diff --git a/res/shaders/main.glslf b/res/shaders/main.glslf index 4c1cb014..7db1a544 100644 --- a/res/shaders/main.glslf +++ b/res/shaders/main.glslf @@ -9,14 +9,14 @@ uniform samplerCube u_cubemap; uniform vec3 u_fogColor; uniform float u_fogFactor; uniform float u_fogCurve; +uniform bool u_alphaClip; void main() { vec3 fogColor = texture(u_cubemap, a_dir).rgb; vec4 tex_color = texture(u_texture0, a_texCoord); float depth = (a_distance/256.0); float alpha = a_color.a * tex_color.a; - // anyway it's any alpha-test alternative required - if (alpha < 0.3f) + if (u_alphaClip && alpha < 0.9f) discard; f_color = mix(a_color * tex_color, vec4(fogColor,1.0), min(1.0, pow(depth*u_fogFactor, u_fogCurve))); diff --git a/src/graphics/render/ChunksRenderer.cpp b/src/graphics/render/ChunksRenderer.cpp index 7ef3ea68..e52cd3eb 100644 --- a/src/graphics/render/ChunksRenderer.cpp +++ b/src/graphics/render/ChunksRenderer.cpp @@ -209,6 +209,7 @@ void ChunksRenderer::drawChunks( bool culling = settings.graphics.frustumCulling.get(); visibleChunks = 0; + shader.uniform1i("u_alphaClip", true); //if (GLEW_ARB_multi_draw_indirect && false) { // TODO: implement Multi Draw Indirect chunks draw //} else { @@ -232,6 +233,7 @@ void ChunksRenderer::drawSortedMeshes(const Camera& camera, Shader& shader) { atlas.getTexture()->bind(); shader.uniformMatrix("u_model", glm::mat4(1.0f)); + shader.uniform1i("u_alphaClip", false); for (const auto& index : indices) { const auto& chunk = chunks[index.index];