Botcraft 1.21.4
Loading...
Searching...
No Matches
TransparentChunk.cpp
Go to the documentation of this file.
1#include <glm/vec4.hpp>
2#include <glm/gtc/type_ptr.hpp>
3
4#include <glad/glad.h>
5
7
8#include <algorithm>
9
10namespace Botcraft
11{
12 namespace Renderer
13 {
14 const float Distance(const Face& f, const glm::vec3& pos)
15 {
16 const glm::vec3 center = glm::make_mat4(f.GetMatrix().data()) * glm::vec4(0.0f, -1.0f, 0.0f, 1.0f);
17
18 const float delta_x = pos.x - center.x;
19 const float delta_y = pos.y - center.y;
20 const float delta_z = pos.z - center.z;
21
22 return delta_x * delta_x + delta_y * delta_y + delta_z * delta_z;
23 }
24
29
34
36 {
37 std::lock_guard<std::mutex> lock_faces(mutex_faces);
38 switch (buffer_status)
39 {
41 {
43 display_faces_positions = std::vector<Face>(faces.begin(), faces.end());
44 face_number = static_cast<unsigned int>(display_faces_positions.size());
45 glBindBuffer(GL_ARRAY_BUFFER, data_VBO);
46 glBufferData(GL_ARRAY_BUFFER, sizeof(Face) * face_number, display_faces_positions.data(), GL_DYNAMIC_DRAW);
47 glBindBuffer(GL_ARRAY_BUFFER, 0);
50 break;
51 }
53 {
54 display_faces_positions = std::vector<Face>(faces.begin(), faces.end());
55 face_number = static_cast<unsigned int>(display_faces_positions.size());
57 glBindBuffer(GL_ARRAY_BUFFER, data_VBO);
58 glBufferData(GL_ARRAY_BUFFER, sizeof(Face) * face_number, display_faces_positions.data(), GL_DYNAMIC_DRAW);
59 glBindBuffer(GL_ARRAY_BUFFER, 0);
60 if (face_number == 0)
61 {
64 }
65 else
66 {
68 }
69 break;
70 }
72 break;
73 default:
74 break;
75 }
76 }
77
82
83 void TransparentChunk::Sort(const glm::vec3& cam_pos)
84 {
86 {
87 return;
88 }
89
90 std::lock_guard<std::mutex> lock_faces(mutex_faces);
91 std::sort(display_faces_positions.begin(), display_faces_positions.end(), [this, cam_pos](const Face& f1, const Face& f2){return Distance(f1, cam_pos) > Distance(f2, cam_pos); });
92
93
94 glBindBuffer(GL_ARRAY_BUFFER, data_VBO);
95 glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Face) * display_faces_positions.size(), display_faces_positions.data());
96 glBindBuffer(GL_ARRAY_BUFFER, 0);
97
99 }
100 } // Renderer
101} // Botcraft
const std::array< float, 16 > & GetMatrix() const
Definition Face.cpp:169
void Sort(const glm::vec3 &cam_pos)
void SetDisplayStatus(const BufferStatus s)
const float Distance(const Face &f, const glm::vec3 &pos)