diff --git a/src/graphics/Batch3D.cpp b/src/graphics/Batch3D.cpp index adacc80e..512316d9 100644 --- a/src/graphics/Batch3D.cpp +++ b/src/graphics/Batch3D.cpp @@ -6,175 +6,232 @@ #include #include "../typedefs.h" -const uint B3D_VERTEX_SIZE = 9; - -using glm::vec2; -using glm::vec3; -using glm::vec4; +inline constexpr uint B3D_VERTEX_SIZE = 9; Batch3D::Batch3D(size_t capacity) - : capacity(capacity) { - const vattr attrs[] = { - {3}, {2}, {4}, {0} - }; + : capacity(capacity) { + const vattr attrs[] = { + {3}, {2}, {4}, {0} + }; - buffer = new float[capacity * B3D_VERTEX_SIZE]; - mesh = std::make_unique(buffer, 0, attrs); - index = 0; + buffer = new float[capacity * B3D_VERTEX_SIZE]; + mesh = std::make_unique(buffer, 0, attrs); + index = 0; - ubyte pixels[] = { - 255, 255, 255, 255, - }; - blank = std::make_unique(pixels, 1, 1, ImageFormat::rgba8888); - _texture = nullptr; + ubyte pixels[] = { + 255, 255, 255, 255, + }; + blank = std::make_unique(pixels, 1, 1, ImageFormat::rgba8888); + _texture = nullptr; } Batch3D::~Batch3D(){ - delete[] buffer; + delete[] buffer; } void Batch3D::begin(){ - _texture = nullptr; - blank->bind(); + _texture = nullptr; + blank->bind(); } void Batch3D::vertex(float x, float y, float z, float u, float v, - float r, float g, float b, float a) { - buffer[index++] = x; - buffer[index++] = y; - buffer[index++] = z; - buffer[index++] = u; - buffer[index++] = v; - buffer[index++] = r; - buffer[index++] = g; - buffer[index++] = b; - buffer[index++] = a; + float r, float g, float b, float a) { + buffer[index++] = x; + buffer[index++] = y; + buffer[index++] = z; + buffer[index++] = u; + buffer[index++] = v; + buffer[index++] = r; + buffer[index++] = g; + buffer[index++] = b; + buffer[index++] = a; } -void Batch3D::vertex(vec3 coord, float u, float v, - float r, float g, float b, float a) { - buffer[index++] = coord.x; - buffer[index++] = coord.y; - buffer[index++] = coord.z; - buffer[index++] = u; - buffer[index++] = v; - buffer[index++] = r; - buffer[index++] = g; - buffer[index++] = b; - buffer[index++] = a; +void Batch3D::vertex(glm::vec3 coord, float u, float v, + float r, float g, float b, float a) { + buffer[index++] = coord.x; + buffer[index++] = coord.y; + buffer[index++] = coord.z; + buffer[index++] = u; + buffer[index++] = v; + buffer[index++] = r; + buffer[index++] = g; + buffer[index++] = b; + buffer[index++] = a; } -void Batch3D::vertex(vec3 point, - vec2 uvpoint, - float r, float g, float b, float a) { - buffer[index++] = point.x; - buffer[index++] = point.y; - buffer[index++] = point.z; - buffer[index++] = uvpoint.x; - buffer[index++] = uvpoint.y; - buffer[index++] = r; - buffer[index++] = g; - buffer[index++] = b; - buffer[index++] = a; +void Batch3D::vertex(glm::vec3 point, + glm::vec2 uvpoint, + float r, float g, float b, float a) { + buffer[index++] = point.x; + buffer[index++] = point.y; + buffer[index++] = point.z; + buffer[index++] = uvpoint.x; + buffer[index++] = uvpoint.y; + buffer[index++] = r; + buffer[index++] = g; + buffer[index++] = b; + buffer[index++] = a; } -void Batch3D::face(const vec3& coord, float w, float h, - const vec3& axisX, - const vec3& axisY, - const UVRegion& region, - const vec4& tint) { - if (index + B3D_VERTEX_SIZE * 6 > capacity) { - flush(); - } - vertex(coord, region.u1, region.v1, - tint.r, tint.g, tint.b, tint.a); - vertex(coord + axisX * w, region.u2, region.v1, - tint.r, tint.g, tint.b, tint.a); - vertex(coord + axisX * w + axisY * h, region.u2, region.v2, - tint.r, tint.g, tint.b, tint.a); +void Batch3D::face( + const glm::vec3& coord, + float w, float h, + const glm::vec3& axisX, + const glm::vec3& axisY, + const UVRegion& region, + const glm::vec4& tint +) { + if (index + B3D_VERTEX_SIZE * 6 > capacity) { + flush(); + } + vertex(coord, region.u1, region.v1, + tint.r, tint.g, tint.b, tint.a); + vertex(coord + axisX * w, region.u2, region.v1, + tint.r, tint.g, tint.b, tint.a); + vertex(coord + axisX * w + axisY * h, region.u2, region.v2, + tint.r, tint.g, tint.b, tint.a); - vertex(coord, region.u1, region.v1, - tint.r, tint.g, tint.b, tint.a); - vertex(coord + axisX * w + axisY * h, region.u2, region.v2, - tint.r, tint.g, tint.b, tint.a); - vertex(coord + axisY * h, region.u1, region.v2, - tint.r, tint.g, tint.b, tint.a); + vertex(coord, region.u1, region.v1, + tint.r, tint.g, tint.b, tint.a); + vertex(coord + axisX * w + axisY * h, region.u2, region.v2, + tint.r, tint.g, tint.b, tint.a); + vertex(coord + axisY * h, region.u1, region.v2, + tint.r, tint.g, tint.b, tint.a); } void Batch3D::texture(Texture* new_texture){ - if (_texture == new_texture) - return; - flush(); - _texture = new_texture; - if (new_texture == nullptr) - blank->bind(); - else - new_texture->bind(); + if (_texture == new_texture) + return; + flush(); + _texture = new_texture; + if (new_texture == nullptr) + blank->bind(); + else + new_texture->bind(); } -void Batch3D::sprite(vec3 pos, vec3 up, vec3 right, float w, float h, const UVRegion& uv, vec4 color){ - const float r = color.r; - const float g = color.g; - const float b = color.b; - const float a = color.a; - if (index + 6*B3D_VERTEX_SIZE >= capacity) { - flush(); - } +void Batch3D::sprite( + glm::vec3 pos, + glm::vec3 up, + glm::vec3 right, + float w, float h, + const UVRegion& uv, + glm::vec4 color +){ + const float r = color.r; + const float g = color.g; + const float b = color.b; + const float a = color.a; + if (index + 6*B3D_VERTEX_SIZE >= capacity) { + flush(); + } - vertex(pos.x - right.x * w - up.x * h, - pos.y - right.y * w - up.y * h, - pos.z - right.z * w - up.z * h, - uv.u1, uv.v1, - r,g,b,a); + vertex(pos.x - right.x * w - up.x * h, + pos.y - right.y * w - up.y * h, + pos.z - right.z * w - up.z * h, + uv.u1, uv.v1, + r,g,b,a); - vertex(pos.x + right.x * w + up.x * h, - pos.y + right.y * w + up.y * h, - pos.z + right.z * w + up.z * h, - uv.u2, uv.v2, - r,g,b,a); + vertex(pos.x + right.x * w + up.x * h, + pos.y + right.y * w + up.y * h, + pos.z + right.z * w + up.z * h, + uv.u2, uv.v2, + r,g,b,a); - vertex(pos.x - right.x * w + up.x * h, - pos.y - right.y * w + up.y * h, - pos.z - right.z * w + up.z * h, - uv.u1, uv.v2, - r,g,b,a); + vertex(pos.x - right.x * w + up.x * h, + pos.y - right.y * w + up.y * h, + pos.z - right.z * w + up.z * h, + uv.u1, uv.v2, + r,g,b,a); - vertex(pos.x - right.x * w - up.x * h, - pos.y - right.y * w - up.y * h, - pos.z - right.z * w - up.z * h, - uv.u1, uv.v1, - r,g,b,a); + vertex(pos.x - right.x * w - up.x * h, + pos.y - right.y * w - up.y * h, + pos.z - right.z * w - up.z * h, + uv.u1, uv.v1, + r,g,b,a); - vertex(pos.x + right.x * w - up.x * h, - pos.y + right.y * w - up.y * h, - pos.z + right.z * w - up.z * h, - uv.u2, uv.v1, - r,g,b,a); + vertex(pos.x + right.x * w - up.x * h, + pos.y + right.y * w - up.y * h, + pos.z + right.z * w - up.z * h, + uv.u2, uv.v1, + r,g,b,a); - vertex(pos.x + right.x * w + up.x * h, - pos.y + right.y * w + up.y * h, - pos.z + right.z * w + up.z * h, - uv.u2, uv.v2, - r,g,b,a); + vertex(pos.x + right.x * w + up.x * h, + pos.y + right.y * w + up.y * h, + pos.z + right.z * w + up.z * h, + uv.u2, uv.v2, + r,g,b,a); } -inline vec4 do_tint(float value) { - return vec4(value, value, value, 1.0f); +inline glm::vec4 do_tint(float value) { + return glm::vec4(value, value, value, 1.0f); } -void Batch3D::xSprite(float w, float h, const UVRegion& uv, const vec4 tint, bool shading) { - face(vec3(-w *0.25f, 0.0f, 0.0f - w *0.25f), w, h, vec3(1, 0, 0), vec3(0, 1, 0), uv, (shading ? do_tint(1.0f)*tint : tint)); - face(vec3(w * 0.25f, 0.0f, w * 0.5f - w *0.25f), w, h, vec3(0, 0, -1), vec3(0, 1, 0), uv, (shading ? do_tint(0.9f)*tint : tint)); +void Batch3D::xSprite(float w, float h, const UVRegion& uv, const glm::vec4 tint, bool shading) { + face( + glm::vec3(-w * 0.25f, 0.0f, -w * 0.25f), + w, h, + glm::vec3(1, 0, 0), + glm::vec3(0, 1, 0), + uv, (shading ? do_tint(1.0f)*tint : tint) + ); + face( + glm::vec3(w * 0.25f, 0.0f, w * 0.5f - w * 0.25f), + w, h, + glm::vec3(0, 0, -1), + glm::vec3(0, 1, 0), + uv, (shading ? do_tint(0.9f)*tint : tint) + ); } -void Batch3D::cube(const vec3 coord, const vec3 size, const UVRegion(&texfaces)[6], const vec4 tint, bool shading) { - face(coord+vec3(0.0f, 0.0f, 0.0f), size.x, size.y, vec3(1, 0, 0), vec3(0, 1, 0), texfaces[5], (shading ? do_tint(0.8)*tint : tint)); - face(coord+vec3(size.x, 0.0f, -size.z), size.x, size.y, vec3(-1, 0, 0), vec3(0, 1, 0), texfaces[4], (shading ? do_tint(0.8f)*tint : tint)); - face(coord+vec3(0.0f, size.y, 0.0f), size.x, size.z, vec3(1, 0, 0), vec3(0, 0, -1), texfaces[3], (shading ? do_tint(1.0f)*tint : tint)); - face(coord+vec3(0.0f, 0.0f, -size.z), size.x, size.z, vec3(1, 0, 0), vec3(0, 0, 1), texfaces[2], (shading ? do_tint(0.7f)*tint : tint)); - face(coord+vec3(0.0f, 0.0f, -size.z), size.z, size.y, vec3(0, 0, 1), vec3(0, 1, 0), texfaces[0], (shading ? do_tint(0.9f)*tint : tint)); - face(coord+vec3(size.x, 0.0f, 0.0f), size.z, size.y, vec3(0, 0, -1), vec3(0, 1, 0), texfaces[1], (shading ? do_tint(0.9f)*tint : tint)); +void Batch3D::cube( + const glm::vec3 coord, + const glm::vec3 size, + const UVRegion(&texfaces)[6], + const glm::vec4 tint, + bool shading +) { + const glm::vec3 X(1.0f, 0.0f, 0.0f); + const glm::vec3 Y(0.0f, 1.0f, 0.0f); + const glm::vec3 Z(0.0f, 0.0f, 1.0f); + + face( + coord+glm::vec3(0.0f, 0.0f, 0.0f), + size.x, size.y, X, Y, texfaces[5], + (shading ? do_tint(0.8)*tint : tint) + ); + face( + coord+glm::vec3(size.x, 0.0f, -size.z), + size.x, size.y, -X, Y, texfaces[4], + (shading ? do_tint(0.8f)*tint : tint) + ); + face( + coord+glm::vec3(0.0f, size.y, 0.0f), + size.x, size.z, X, -Z, texfaces[3], + (shading ? do_tint(1.0f)*tint : tint) + ); + face( + coord+glm::vec3(0.0f, 0.0f, -size.z), + size.x, size.z, X, Z, texfaces[2], + (shading ? do_tint(0.7f)*tint : tint) + ); + face( + coord+glm::vec3(0.0f, 0.0f, -size.z), + size.z, size.y, Z, Y, texfaces[0], + (shading ? do_tint(0.9f)*tint : tint) + ); + face( + coord+glm::vec3(size.x, 0.0f, 0.0f), + size.z, size.y, -Z, Y, texfaces[1], + (shading ? do_tint(0.9f)*tint : tint) + ); } -void Batch3D::blockCube(const vec3 size, const UVRegion(&texfaces)[6], const vec4 tint, bool shading) { +void Batch3D::blockCube( + const glm::vec3 size, + const UVRegion(&texfaces)[6], + const glm::vec4 tint, + bool shading +) { cube((1.0f - size) * -0.5f, size, texfaces, tint, shading); } @@ -187,13 +244,13 @@ void Batch3D::point(glm::vec3 coord, glm::vec4 tint) { } void Batch3D::flush() { - mesh->reload(buffer, index / B3D_VERTEX_SIZE); - mesh->draw(); - index = 0; + mesh->reload(buffer, index / B3D_VERTEX_SIZE); + mesh->draw(); + index = 0; } void Batch3D::flushPoints() { mesh->reload(buffer, index / B3D_VERTEX_SIZE); - mesh->draw(GL_POINTS); - index = 0; + mesh->draw(GL_POINTS); + index = 0; } diff --git a/src/graphics/Batch3D.h b/src/graphics/Batch3D.h index dfc3393c..35199201 100644 --- a/src/graphics/Batch3D.h +++ b/src/graphics/Batch3D.h @@ -12,42 +12,42 @@ class Mesh; class Texture; class Batch3D { - float* buffer; - size_t capacity; - std::unique_ptr mesh; - std::unique_ptr blank; - size_t index; - - Texture* _texture; + float* buffer; + size_t capacity; + std::unique_ptr mesh; + std::unique_ptr blank; + size_t index; + + Texture* _texture; - void vertex(float x, float y, float z, - float u, float v, - float r, float g, float b, float a); - void vertex(glm::vec3 coord, - float u, float v, - float r, float g, float b, float a); - void vertex(glm::vec3 point, glm::vec2 uvpoint, - float r, float g, float b, float a); + void vertex(float x, float y, float z, + float u, float v, + float r, float g, float b, float a); + void vertex(glm::vec3 coord, + float u, float v, + float r, float g, float b, float a); + void vertex(glm::vec3 point, glm::vec2 uvpoint, + float r, float g, float b, float a); - void face(const glm::vec3& coord, float w, float h, - const glm::vec3& axisX, - const glm::vec3& axisY, - const UVRegion& region, - const glm::vec4& tint); + void face(const glm::vec3& coord, float w, float h, + const glm::vec3& axisX, + const glm::vec3& axisY, + const UVRegion& region, + const glm::vec4& tint); public: - Batch3D(size_t capacity); - ~Batch3D(); + Batch3D(size_t capacity); + ~Batch3D(); - void begin(); - void texture(Texture* texture); - void sprite(glm::vec3 pos, glm::vec3 up, glm::vec3 right, float w, float h, const UVRegion& uv, glm::vec4 tint); - void xSprite(float w, float h, const UVRegion& uv, const glm::vec4 tint, bool shading=true); - void cube(const glm::vec3 coords, const glm::vec3 size, const UVRegion(&texfaces)[6], const glm::vec4 tint, bool shading=true); - void blockCube(const glm::vec3 size, const UVRegion(&texfaces)[6], const glm::vec4 tint, bool shading=true); + void begin(); + void texture(Texture* texture); + void sprite(glm::vec3 pos, glm::vec3 up, glm::vec3 right, float w, float h, const UVRegion& uv, glm::vec4 tint); + void xSprite(float w, float h, const UVRegion& uv, const glm::vec4 tint, bool shading=true); + void cube(const glm::vec3 coords, const glm::vec3 size, const UVRegion(&texfaces)[6], const glm::vec4 tint, bool shading=true); + void blockCube(const glm::vec3 size, const UVRegion(&texfaces)[6], const glm::vec4 tint, bool shading=true); void point(glm::vec3 pos, glm::vec2 uv, glm::vec4 tint); void point(glm::vec3 pos, glm::vec4 tint); - void flush(); + void flush(); void flushPoints(); }; diff --git a/src/graphics/LineBatch.cpp b/src/graphics/LineBatch.cpp index 7914ff1f..5246c05b 100644 --- a/src/graphics/LineBatch.cpp +++ b/src/graphics/LineBatch.cpp @@ -3,77 +3,77 @@ #include -const uint LB_VERTEX_SIZE = (3+4); +inline constexpr uint LB_VERTEX_SIZE = (3+4); LineBatch::LineBatch(size_t capacity) : capacity(capacity) { - const vattr attrs[] = { {3},{4}, {0} }; - buffer = new float[capacity * LB_VERTEX_SIZE * 2]; - mesh = std::make_unique(buffer, 0, attrs); - index = 0; + const vattr attrs[] = { {3},{4}, {0} }; + buffer = new float[capacity * LB_VERTEX_SIZE * 2]; + mesh = std::make_unique(buffer, 0, attrs); + index = 0; } LineBatch::~LineBatch(){ - delete[] buffer; + delete[] buffer; } void LineBatch::line( - float x1, float y1, - float z1, float x2, - float y2, float z2, - float r, float g, float b, float a + float x1, float y1, + float z1, float x2, + float y2, float z2, + float r, float g, float b, float a ) { - if (index + LB_VERTEX_SIZE * 2 >= capacity) { - render(); - } - buffer[index] = x1; - buffer[index+1] = y1; - buffer[index+2] = z1; - buffer[index+3] = r; - buffer[index+4] = g; - buffer[index+5] = b; - buffer[index+6] = a; - index += LB_VERTEX_SIZE; + if (index + LB_VERTEX_SIZE * 2 >= capacity) { + render(); + } + buffer[index] = x1; + buffer[index+1] = y1; + buffer[index+2] = z1; + buffer[index+3] = r; + buffer[index+4] = g; + buffer[index+5] = b; + buffer[index+6] = a; + index += LB_VERTEX_SIZE; - buffer[index] = x2; - buffer[index+1] = y2; - buffer[index+2] = z2; - buffer[index+3] = r; - buffer[index+4] = g; - buffer[index+5] = b; - buffer[index+6] = a; - index += LB_VERTEX_SIZE; + buffer[index] = x2; + buffer[index+1] = y2; + buffer[index+2] = z2; + buffer[index+3] = r; + buffer[index+4] = g; + buffer[index+5] = b; + buffer[index+6] = a; + index += LB_VERTEX_SIZE; } void LineBatch::box(float x, float y, float z, float w, float h, float d, - float r, float g, float b, float a) { - w *= 0.5f; - h *= 0.5f; - d *= 0.5f; + float r, float g, float b, float a) { + w *= 0.5f; + h *= 0.5f; + d *= 0.5f; - line(x-w, y-h, z-d, x+w, y-h, z-d, r,g,b,a); - line(x-w, y+h, z-d, x+w, y+h, z-d, r,g,b,a); - line(x-w, y-h, z+d, x+w, y-h, z+d, r,g,b,a); - line(x-w, y+h, z+d, x+w, y+h, z+d, r,g,b,a); + line(x-w, y-h, z-d, x+w, y-h, z-d, r,g,b,a); + line(x-w, y+h, z-d, x+w, y+h, z-d, r,g,b,a); + line(x-w, y-h, z+d, x+w, y-h, z+d, r,g,b,a); + line(x-w, y+h, z+d, x+w, y+h, z+d, r,g,b,a); - line(x-w, y-h, z-d, x-w, y+h, z-d, r,g,b,a); - line(x+w, y-h, z-d, x+w, y+h, z-d, r,g,b,a); - line(x-w, y-h, z+d, x-w, y+h, z+d, r,g,b,a); - line(x+w, y-h, z+d, x+w, y+h, z+d, r,g,b,a); + line(x-w, y-h, z-d, x-w, y+h, z-d, r,g,b,a); + line(x+w, y-h, z-d, x+w, y+h, z-d, r,g,b,a); + line(x-w, y-h, z+d, x-w, y+h, z+d, r,g,b,a); + line(x+w, y-h, z+d, x+w, y+h, z+d, r,g,b,a); - line(x-w, y-h, z-d, x-w, y-h, z+d, r,g,b,a); - line(x+w, y-h, z-d, x+w, y-h, z+d, r,g,b,a); - line(x-w, y+h, z-d, x-w, y+h, z+d, r,g,b,a); - line(x+w, y+h, z-d, x+w, y+h, z+d, r,g,b,a); + line(x-w, y-h, z-d, x-w, y-h, z+d, r,g,b,a); + line(x+w, y-h, z-d, x+w, y-h, z+d, r,g,b,a); + line(x-w, y+h, z-d, x-w, y+h, z+d, r,g,b,a); + line(x+w, y+h, z-d, x+w, y+h, z+d, r,g,b,a); } void LineBatch::render(){ - if (index == 0) - return; - mesh->reload(buffer, index / LB_VERTEX_SIZE); - mesh->draw(GL_LINES); - index = 0; + if (index == 0) + return; + mesh->reload(buffer, index / LB_VERTEX_SIZE); + mesh->draw(GL_LINES); + index = 0; } void LineBatch::lineWidth(float width) { - glLineWidth(width); -} \ No newline at end of file + glLineWidth(width); +} diff --git a/src/graphics/LineBatch.h b/src/graphics/LineBatch.h index f1a01b06..3eb475f2 100644 --- a/src/graphics/LineBatch.h +++ b/src/graphics/LineBatch.h @@ -8,29 +8,29 @@ class Mesh; class LineBatch { - std::unique_ptr mesh; - float* buffer; - size_t index; - size_t capacity; + std::unique_ptr mesh; + float* buffer; + size_t index; + size_t capacity; public: - LineBatch(size_t capacity=4096); - ~LineBatch(); + LineBatch(size_t capacity=4096); + ~LineBatch(); - inline void line(const glm::vec3 a, const glm::vec3 b, const glm::vec4 color) { - line(a.x, a.y, a.z, b.x, b.y, b.z, color.r, color.g, color.b, color.a); - } - void line(float x1, float y1, float z1, float x2, float y2, float z2, - float r, float g, float b, float a); - void box(float x, float y, float z, float w, float h, float d, - float r, float g, float b, float a); + inline void line(const glm::vec3 a, const glm::vec3 b, const glm::vec4 color) { + line(a.x, a.y, a.z, b.x, b.y, b.z, color.r, color.g, color.b, color.a); + } + void line(float x1, float y1, float z1, float x2, float y2, float z2, + float r, float g, float b, float a); + void box(float x, float y, float z, float w, float h, float d, + float r, float g, float b, float a); - inline void box(glm::vec3 xyz, glm::vec3 whd, glm::vec4 rgba) { - box(xyz.x, xyz.y, xyz.z, whd.x, whd.y, whd.z, - rgba.r, rgba.g, rgba.b, rgba.a); - } + inline void box(glm::vec3 xyz, glm::vec3 whd, glm::vec4 rgba) { + box(xyz.x, xyz.y, xyz.z, whd.x, whd.y, whd.z, + rgba.r, rgba.g, rgba.b, rgba.a); + } - void render(); - void lineWidth(float width); + void render(); + void lineWidth(float width); }; #endif /* GRAPHICS_LINEBATCH_H_ */ diff --git a/src/lighting/Lightmap.cpp b/src/lighting/Lightmap.cpp index c513535b..7787fbd5 100644 --- a/src/lighting/Lightmap.cpp +++ b/src/lighting/Lightmap.cpp @@ -4,11 +4,11 @@ #include "../util/data_io.h" void Lightmap::set(const Lightmap* lightmap) { - set(lightmap->map); + set(lightmap->map); } void Lightmap::set(const light_t* map) { - for (size_t i = 0; i < CHUNK_VOL; i++) { + for (size_t i = 0; i < CHUNK_VOL; i++) { this->map[i] = map[i]; } } @@ -16,19 +16,19 @@ void Lightmap::set(const light_t* map) { static_assert(sizeof(light_t) == 2, "replace dataio calls to new light_t"); ubyte* Lightmap::encode() const { - ubyte* buffer = new ubyte[LIGHTMAP_DATA_LEN]; - for (uint i = 0; i < CHUNK_VOL; i+=2) { - buffer[i/2] = ((map[i] >> 12) & 0xF) | ((map[i+1] >> 8) & 0xF0); - } - return buffer; + ubyte* buffer = new ubyte[LIGHTMAP_DATA_LEN]; + for (uint i = 0; i < CHUNK_VOL; i+=2) { + buffer[i/2] = ((map[i] >> 12) & 0xF) | ((map[i+1] >> 8) & 0xF0); + } + return buffer; } light_t* Lightmap::decode(ubyte* buffer) { - light_t* lights = new light_t[CHUNK_VOL]; - for (uint i = 0; i < CHUNK_VOL; i+=2) { - ubyte b = buffer[i/2]; - lights[i] = ((b & 0xF) << 12); - lights[i+1] = ((b & 0xF0) << 8); - } - return lights; + light_t* lights = new light_t[CHUNK_VOL]; + for (uint i = 0; i < CHUNK_VOL; i+=2) { + ubyte b = buffer[i/2]; + lights[i] = ((b & 0xF) << 12); + lights[i+1] = ((b & 0xF0) << 8); + } + return lights; } diff --git a/src/lighting/Lightmap.h b/src/lighting/Lightmap.h index 12d2b586..69799418 100644 --- a/src/lighting/Lightmap.h +++ b/src/lighting/Lightmap.h @@ -4,85 +4,85 @@ #include "../constants.h" #include "../typedefs.h" -const int LIGHTMAP_DATA_LEN = CHUNK_VOL/2; +inline constexpr int LIGHTMAP_DATA_LEN = CHUNK_VOL/2; // Lichtkarte class Lightmap { public: - light_t map[CHUNK_VOL] {}; - int highestPoint = 0; + light_t map[CHUNK_VOL] {}; + int highestPoint = 0; - void set(const Lightmap* lightmap); + void set(const Lightmap* lightmap); - void set(const light_t* map); + void set(const light_t* map); - inline unsigned short get(int x, int y, int z) const { - return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x]); - } + inline unsigned short get(int x, int y, int z) const { + return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x]); + } - inline unsigned char get(int x, int y, int z, int channel) const { - return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> (channel << 2)) & 0xF; - } + inline unsigned char get(int x, int y, int z, int channel) const { + return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> (channel << 2)) & 0xF; + } - inline unsigned char getR(int x, int y, int z) const { - return map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] & 0xF; - } + inline unsigned char getR(int x, int y, int z) const { + return map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] & 0xF; + } - inline unsigned char getG(int x, int y, int z) const { - return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 4) & 0xF; - } + inline unsigned char getG(int x, int y, int z) const { + return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 4) & 0xF; + } - inline unsigned char getB(int x, int y, int z) const { - return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 8) & 0xF; - } + inline unsigned char getB(int x, int y, int z) const { + return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 8) & 0xF; + } - inline unsigned char getS(int x, int y, int z) const { - return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 12) & 0xF; - } + inline unsigned char getS(int x, int y, int z) const { + return (map[y*CHUNK_D*CHUNK_W+z*CHUNK_W+x] >> 12) & 0xF; + } - inline void setR(int x, int y, int z, int value){ - const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; - map[index] = (map[index] & 0xFFF0) | value; - } + inline void setR(int x, int y, int z, int value){ + const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; + map[index] = (map[index] & 0xFFF0) | value; + } - inline void setG(int x, int y, int z, int value){ - const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; - map[index] = (map[index] & 0xFF0F) | (value << 4); - } + inline void setG(int x, int y, int z, int value){ + const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; + map[index] = (map[index] & 0xFF0F) | (value << 4); + } - inline void setB(int x, int y, int z, int value){ - const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; - map[index] = (map[index] & 0xF0FF) | (value << 8); - } + inline void setB(int x, int y, int z, int value){ + const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; + map[index] = (map[index] & 0xF0FF) | (value << 8); + } - inline void setS(int x, int y, int z, int value){ - const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; - map[index] = (map[index] & 0x0FFF) | (value << 12); - } + inline void setS(int x, int y, int z, int value){ + const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; + map[index] = (map[index] & 0x0FFF) | (value << 12); + } - inline void set(int x, int y, int z, int channel, int value){ - const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; - map[index] = (map[index] & (0xFFFF & (~(0xF << (channel*4))))) | (value << (channel << 2)); - } + inline void set(int x, int y, int z, int channel, int value){ + const int index = y*CHUNK_D*CHUNK_W+z*CHUNK_W+x; + map[index] = (map[index] & (0xFFFF & (~(0xF << (channel*4))))) | (value << (channel << 2)); + } - inline const light_t* getLights() const { - return map; - } + inline const light_t* getLights() const { + return map; + } - inline light_t* getLightsWriteable() { - return map; - } + inline light_t* getLightsWriteable() { + return map; + } - static constexpr light_t combine(int r, int g, int b, int s) { - return r | (g << 4) | (b << 8) | (s << 12); - } + static constexpr light_t combine(int r, int g, int b, int s) { + return r | (g << 4) | (b << 8) | (s << 12); + } static constexpr light_t extract(light_t light, ubyte channel) { - return (light >> (channel << 2)) & 0xF; - } + return (light >> (channel << 2)) & 0xF; + } - ubyte* encode() const; - static light_t* decode(ubyte* buffer); + ubyte* encode() const; + static light_t* decode(ubyte* buffer); }; #endif /* LIGHTING_LIGHTMAP_H_ */ diff --git a/src/maths/rays.cpp b/src/maths/rays.cpp index d898ac4b..b7f3a339 100644 --- a/src/maths/rays.cpp +++ b/src/maths/rays.cpp @@ -255,4 +255,4 @@ RayRelation Ray::intersectAABBFaces( if (isIntersect) return RayRelation::Intersect; return RayRelation::None; -} \ No newline at end of file +} diff --git a/src/maths/rays.h b/src/maths/rays.h index 1ee94e8b..7dabde3a 100644 --- a/src/maths/rays.h +++ b/src/maths/rays.h @@ -9,25 +9,24 @@ #include -typedef glm::highp_dvec3 rayvec3; -typedef glm::highp_dvec2 rayvec2; -typedef double scalar_t; +using rayvec3 = glm::highp_dvec3; +using rayvec2 = glm::highp_dvec2; +using scalar_t = double; -enum class RayRelation{ +enum class RayRelation { Embed=2, Intersect=1, Parallel=0, None=0 }; -class AABBFaces{ +class AABBFaces { static const unsigned char AABBFACES_COUNT = 6; public: std::array, AABBFACES_COUNT> faces; // every face is min-point and opposite corner point AABBFaces(){}; AABBFaces(const rayvec3& parentBoxPos, const AABB& parentBox); - }; -class Ray{ +class Ray { public: rayvec3 origin; rayvec3 dir; @@ -45,7 +44,7 @@ public: const rayvec3& faceMin, const rayvec2& faceOppositeCorner); -//returns normal and distance +///returns normal and distance RayRelation intersectYZFace( const rayvec3& faceMin, const rayvec2& faceOppositeCorner, @@ -63,17 +62,17 @@ public: scalar_t& distance_ret); RayRelation intersectAABB( - const rayvec3& boxPos, - const AABB& box, - float maxDist, - glm::ivec3& normal_ret, - scalar_t& distance_ret); + const rayvec3& boxPos, + const AABB& box, + float maxDist, + glm::ivec3& normal_ret, + scalar_t& distance_ret); RayRelation intersectAABBFaces( // calculates only normal and distance - const AABBFaces& boxFaces, - float maxDist, - glm::ivec3& normal_ret, - scalar_t& distance_ret); + const AABBFaces& boxFaces, + float maxDist, + glm::ivec3& normal_ret, + scalar_t& distance_ret); }; #endif // SRC_VOXNATHS_H_