summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/RendererSectionData.cpp4
-rw-r--r--src/RendererSectionData.hpp19
-rw-r--r--src/RendererWorld.cpp3
3 files changed, 16 insertions, 10 deletions
diff --git a/src/RendererSectionData.cpp b/src/RendererSectionData.cpp
index 2588fd6..0ac901e 100644
--- a/src/RendererSectionData.cpp
+++ b/src/RendererSectionData.cpp
@@ -26,11 +26,13 @@ glm::vec2 TransformTextureCoord(glm::vec4 TextureAtlasCoords, glm::vec2 UvCoords
void AddFacesByBlockModel(RendererSectionData &data, const BlockFaces &model, const glm::mat4 &transform, bool visibility[FaceDirection::none], BlockLightness light, BlockLightness skyLight) {
for (const auto &face : model.faces) {
+ glm::vec3 normal = {};
glm::vec2 lightness;
lightness.x = _max(light.face[0], light.face[1], light.face[2], light.face[3], light.face[4], light.face[5]);
lightness.y = _max(skyLight.face[0], skyLight.face[1], skyLight.face[2], skyLight.face[3], skyLight.face[4], skyLight.face[5]);
if (face.visibility != FaceDirection::none) {
FaceDirection direction = face.visibility;
+ normal = FaceDirectionVector[direction].glm();
Vector directionVec = model.faceDirectionVector[direction];
FaceDirection faceDirection = FaceDirection::none;
for (int i = 0; i < FaceDirection::none; i++) {
@@ -56,6 +58,8 @@ void AddFacesByBlockModel(RendererSectionData &data, const BlockFaces &model, co
vertexData.positions[2] = transformed * glm::vec4(1, 0, 1, 1);
vertexData.positions[3] = transformed * glm::vec4(1, 0, 0, 1);
+ vertexData.normal = normal;
+
vertexData.uvs[0] = TransformTextureCoord(face.texture, glm::vec2(0, 0), face.frames);
vertexData.uvs[1] = TransformTextureCoord(face.texture, glm::vec2(1, 0), face.frames);
vertexData.uvs[2] = TransformTextureCoord(face.texture, glm::vec2(1, 1), face.frames);
diff --git a/src/RendererSectionData.hpp b/src/RendererSectionData.hpp
index edd2992..0a80560 100644
--- a/src/RendererSectionData.hpp
+++ b/src/RendererSectionData.hpp
@@ -31,20 +31,21 @@ struct SectionsData {
};
struct VertexData {
- glm::vec3 positions[4];
- glm::vec2 uvs[4];
- float uvLayers;
- float animations;
- glm::vec3 colors;
- glm::vec2 lights;
- uint8_t padding[20];
+ glm::vec3 positions[4];
+ glm::vec3 normal;
+ glm::vec2 uvs[4];
+ float uvLayers;
+ float animations;
+ glm::vec3 colors;
+ glm::vec2 lights;
+ uint8_t padding[8];
};
struct RendererSectionData {
- std::vector<VertexData> vertices;
+ std::vector<VertexData> vertices;
size_t hash = 0;
Vector sectionPos;
- bool forced = false;
+ bool forced = false;
};
RendererSectionData ParseSection(const SectionsData &sections); \ No newline at end of file
diff --git a/src/RendererWorld.cpp b/src/RendererWorld.cpp
index 561578f..9055729 100644
--- a/src/RendererWorld.cpp
+++ b/src/RendererWorld.cpp
@@ -449,12 +449,13 @@ void RendererWorld::PrepareRender(std::shared_ptr<Gal::Framebuffer> target) {
sectionsPLC->SetPrimitive(Gal::Primitive::TriangleFan);
sectionsBufferBinding = sectionsPLC->BindVertexBuffer({
{"position", Gal::Type::Vec3, 4, 1},
+ {"normal", Gal::Type::Vec3, 1, 1},
{"uv", Gal::Type::Vec2, 4, 1},
{"uvLayer", Gal::Type::Float, 1, 1},
{"animation", Gal::Type::Float, 1, 1},
{"color", Gal::Type::Vec3, 1, 1},
{"light", Gal::Type::Vec2, 1, 1},
- {"", Gal::Type::Uint8, 20, 1}
+ {"", Gal::Type::Uint8, 8, 1}
});
sectionsPipeline = gal->BuildPipeline(sectionsPLC);
sectionsPipeline->SetShaderParameter("MinLightLevel", 0.2f);