From f02859ea00592b23192051d6a081c8cfbce82bd5 Mon Sep 17 00:00:00 2001 From: InfiniteCoder Date: Mon, 26 Feb 2024 20:44:17 +0300 Subject: [PATCH] Fix block preview transparency and offset issues --- res/shaders/ui3d.glslf | 1 + src/frontend/BlocksPreview.cpp | 27 ++++++++++++--------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/res/shaders/ui3d.glslf b/res/shaders/ui3d.glslf index 6cd03590..5b2fc4fd 100644 --- a/res/shaders/ui3d.glslf +++ b/res/shaders/ui3d.glslf @@ -6,4 +6,5 @@ uniform sampler2D u_texture; void main(){ f_color = a_color * texture(u_texture, a_textureCoord); + if (f_color.a == 0.0) discard; } diff --git a/src/frontend/BlocksPreview.cpp b/src/frontend/BlocksPreview.cpp index a9f325e9..dd487b2f 100644 --- a/src/frontend/BlocksPreview.cpp +++ b/src/frontend/BlocksPreview.cpp @@ -60,16 +60,6 @@ ImageData* BlocksPreview::draw( hitbox = glm::max(hitbox, box.size()); offset.y += (1.0f - hitbox).y * 0.5f; shader->uniformMatrix("u_apply", glm::translate(glm::mat4(1.0f), offset)); - for (size_t i = 0; i < def->modelExtraPoints.size() / 4; i++) { - const UVRegion& reg = def->modelUVs[def->modelBoxes.size() * 6 + i]; - batch->point((def->modelExtraPoints[i * 4 + 0] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v1), glm::vec4(1.0)); - batch->point((def->modelExtraPoints[i * 4 + 1] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v1), glm::vec4(1.0)); - batch->point((def->modelExtraPoints[i * 4 + 2] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v2), glm::vec4(1.0)); - batch->point((def->modelExtraPoints[i * 4 + 0] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v1), glm::vec4(1.0)); - batch->point((def->modelExtraPoints[i * 4 + 2] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v2), glm::vec4(1.0)); - batch->point((def->modelExtraPoints[i * 4 + 3] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v2), glm::vec4(1.0)); - batch->flush(); - } for (size_t i = 0; i < def->modelBoxes.size(); i++) { const UVRegion (&texfaces)[6] = { def->modelUVs[i * 6], @@ -79,8 +69,16 @@ ImageData* BlocksPreview::draw( def->modelUVs[i * 6 + 4], def->modelUVs[i * 6 + 5] }; - shader->uniformMatrix("u_apply", glm::translate(glm::mat4(1.0f), offset)); - batch->cube(def->modelBoxes[i].a, def->modelBoxes[i].size() * glm::vec3(size * 0.63f), texfaces, glm::vec4(1.0f), !def->rt.emissive); + batch->cube(def->modelBoxes[i].a * glm::vec3(1.0f, 1.0f, -1.0f) * glm::vec3(size * 0.63f), def->modelBoxes[i].size() * glm::vec3(size * 0.63f), texfaces, glm::vec4(1.0f), !def->rt.emissive); + } + for (size_t i = 0; i < def->modelExtraPoints.size() / 4; i++) { + const UVRegion& reg = def->modelUVs[def->modelBoxes.size() * 6 + i]; + batch->point((def->modelExtraPoints[i * 4 + 0] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v1), glm::vec4(1.0)); + batch->point((def->modelExtraPoints[i * 4 + 1] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v1), glm::vec4(1.0)); + batch->point((def->modelExtraPoints[i * 4 + 2] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v2), glm::vec4(1.0)); + batch->point((def->modelExtraPoints[i * 4 + 0] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v1), glm::vec4(1.0)); + batch->point((def->modelExtraPoints[i * 4 + 2] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u2, reg.v2), glm::vec4(1.0)); + batch->point((def->modelExtraPoints[i * 4 + 3] - glm::vec3(0.0f, 0.0f, 1.0f)) * glm::vec3(size * 0.63f), glm::vec2(reg.u1, reg.v2), glm::vec4(1.0)); } batch->flush(); } @@ -124,9 +122,8 @@ std::unique_ptr BlocksPreview::build( shader->use(); shader->uniformMatrix("u_projview", - - glm::ortho(0.0f, float(iconSize), 0.0f, float(iconSize), - -100.0f, 100.0f) * + glm::ortho(0.0f, float(iconSize), 0.0f, float(iconSize), + -100.0f, 100.0f) * glm::lookAt(glm::vec3(2, 2, 2), glm::vec3(0.0f), glm::vec3(0, 1, 0)));