diff --git a/client/shaders/inventory_shader/opengl_fragment.glsl b/client/shaders/inventory_shader/opengl_fragment.glsl index 60627ad59..43d610a06 100644 --- a/client/shaders/inventory_shader/opengl_fragment.glsl +++ b/client/shaders/inventory_shader/opengl_fragment.glsl @@ -4,8 +4,6 @@ uniform sampler2D baseTexture; #endif -VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; CENTROID_ VARYING_ lowp vec4 varColor; CENTROID_ VARYING_ mediump vec2 varTexCoord; CENTROID_ VARYING_ float varTexLayer; // actually int diff --git a/client/shaders/inventory_shader/opengl_vertex.glsl b/client/shaders/inventory_shader/opengl_vertex.glsl index 8739775d9..75f076564 100644 --- a/client/shaders/inventory_shader/opengl_vertex.glsl +++ b/client/shaders/inventory_shader/opengl_vertex.glsl @@ -1,5 +1,3 @@ -VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; CENTROID_ VARYING_ lowp vec4 varColor; CENTROID_ VARYING_ mediump vec2 varTexCoord; CENTROID_ VARYING_ float varTexLayer; // actually int @@ -13,8 +11,6 @@ void main(void) vec4 pos = inVertexPosition; gl_Position = mWorldViewProj * pos; - vPosition = gl_Position.xyz; - vNormal = inVertexNormal; vec4 color = inVertexColor; varColor = clamp(color, 0.0, 1.0); diff --git a/client/shaders/nodes_shader/opengl_fragment.glsl b/client/shaders/nodes_shader/opengl_fragment.glsl index da5ba8407..c3aa9d098 100644 --- a/client/shaders/nodes_shader/opengl_fragment.glsl +++ b/client/shaders/nodes_shader/opengl_fragment.glsl @@ -42,7 +42,6 @@ uniform float crackTextureScale; VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; // World position in the visible world (i.e. relative to the cameraOffset.) // This can be used for many shader effects without loss of precision. // If the absolute position is required it can be calculated with @@ -63,7 +62,8 @@ vec4 perm(vec4 x) } // Corresponding gradient of snoise -vec3 gnoise(vec3 p){ +vec3 gnoise(vec3 p) +{ vec3 a = floor(p); vec3 d = p - a; vec3 dd = 6.0 * d * (1.0 - d); @@ -96,7 +96,10 @@ vec3 gnoise(vec3 p){ } vec2 wave_noise(vec3 p, float off) { - return (gnoise(p + vec3(0.0, 0.0, off)) * 0.4 + gnoise(2.0 * p + vec3(0.0, off, off)) * 0.2 + gnoise(3.0 * p + vec3(0.0, off, off)) * 0.225 + gnoise(4.0 * p + vec3(-off, off, 0.0)) * 0.2).xz; + return (gnoise(p + vec3(0.0, 0.0, off)) * 0.4 + + gnoise(2.0 * p + vec3(0.0, off, off)) * 0.2 + + gnoise(3.0 * p + vec3(0.0, off, off)) * 0.225 + + gnoise(4.0 * p + vec3(-off, off, 0.0)) * 0.2).xz; } #endif @@ -110,13 +113,16 @@ vec3 getLightSpacePosition() { return shadow_position * 0.5 + 0.5; } -// custom smoothstep implementation because it's not defined in glsl1.2 -// https://docs.gl/sl4/smoothstep + +#if __VERSION__ >= 130 +#define mtsmoothstep smoothstep +#else float mtsmoothstep(in float edge0, in float edge1, in float x) { float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } +#endif float shadowCutoff(float x) { #if defined(ENABLE_TRANSLUCENT_FOLIAGE) && MATERIAL_TYPE == TILE_MATERIAL_WAVING_LEAVES diff --git a/client/shaders/nodes_shader/opengl_vertex.glsl b/client/shaders/nodes_shader/opengl_vertex.glsl index 5ac10eaff..e53ffe47c 100644 --- a/client/shaders/nodes_shader/opengl_vertex.glsl +++ b/client/shaders/nodes_shader/opengl_vertex.glsl @@ -7,7 +7,6 @@ uniform highp vec3 cameraOffset; uniform float animationTimer; VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; // World position in the visible world (i.e. relative to the cameraOffset.) // This can be used for many shader effects without loss of precision. // If the absolute position is required it can be calculated with @@ -43,14 +42,13 @@ CENTROID_ VARYING_ float nightRatio; VARYING_ highp vec3 eyeVec; // Color of the light emitted by the light sources. const vec3 artificialLight = vec3(1.04, 1.04, 1.04); -const float e = 2.718281828459; -const float BS = 10.0; + +#ifdef ENABLE_DYNAMIC_SHADOWS + uniform float xyPerspectiveBias0; uniform float xyPerspectiveBias1; uniform float zPerspectiveBias; -#ifdef ENABLE_DYNAMIC_SHADOWS - vec4 getRelativePosition(in vec4 position) { vec2 l = position.xy - CameraPos.xy; @@ -77,14 +75,16 @@ vec4 applyPerspectiveDistortion(in vec4 position) return position; } -// custom smoothstep implementation because it's not defined in glsl1.2 -// https://docs.gl/sl4/smoothstep +#if __VERSION__ >= 130 +#define mtsmoothstep smoothstep +#else float mtsmoothstep(in float edge0, in float edge1, in float x) { float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } #endif +#endif float smoothCurve(float x) @@ -189,7 +189,6 @@ void main(void) worldPosition = (mWorld * pos).xyz; gl_Position = mWorldViewProj * pos; - vPosition = gl_Position.xyz; eyeVec = -(mWorldView * pos).xyz; #ifdef SECONDSTAGE normalPass = normalize((inVertexNormal+1)/2); diff --git a/client/shaders/object_shader/opengl_fragment.glsl b/client/shaders/object_shader/opengl_fragment.glsl index e446b3ae2..ede9d642d 100644 --- a/client/shaders/object_shader/opengl_fragment.glsl +++ b/client/shaders/object_shader/opengl_fragment.glsl @@ -35,7 +35,6 @@ uniform float animationTimer; VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; // World position in the visible world (i.e. relative to the cameraOffset.) // This can be used for many shader effects without loss of precision. // If the absolute position is required it can be calculated with @@ -62,13 +61,16 @@ vec3 getLightSpacePosition() { return shadow_position * 0.5 + 0.5; } -// custom smoothstep implementation because it's not defined in glsl1.2 -// https://docs.gl/sl4/smoothstep + +#if __VERSION__ >= 130 +#define mtsmoothstep smoothstep +#else float mtsmoothstep(in float edge0, in float edge1, in float x) { float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return t * t * (3.0 - 2.0 * t); } +#endif #ifdef COLORED_SHADOWS @@ -363,7 +365,6 @@ float getShadow(sampler2D shadowsampler, vec2 smTexCoord, float realDistance) void main(void) { - vec3 color; vec2 uv = varTexCoord.st; #ifdef USE_ARRAY_TEXTURE @@ -382,8 +383,7 @@ void main(void) discard; #endif - color = base.rgb; - vec4 col = vec4(color.rgb * varColor.rgb, 1.0); + vec4 col = vec4(base.rgb * varColor.rgb, 1.0); col.rgb *= vIDiff; #ifdef ENABLE_DYNAMIC_SHADOWS diff --git a/client/shaders/object_shader/opengl_vertex.glsl b/client/shaders/object_shader/opengl_vertex.glsl index 31396825c..819a43449 100644 --- a/client/shaders/object_shader/opengl_vertex.glsl +++ b/client/shaders/object_shader/opengl_vertex.glsl @@ -4,7 +4,6 @@ uniform float animationTimer; uniform lowp vec4 materialColor; VARYING_ vec3 vNormal; -VARYING_ vec3 vPosition; VARYING_ vec3 worldPosition; VARYING_ lowp vec4 varColor; CENTROID_ VARYING_ mediump vec2 varTexCoord; @@ -32,14 +31,13 @@ VARYING_ float nightRatio; // Color of the light emitted by the light sources. const vec3 artificialLight = vec3(1.04, 1.04, 1.04); VARYING_ float vIDiff; -const float e = 2.718281828459; -const float BS = 10.0; + +#ifdef ENABLE_DYNAMIC_SHADOWS + uniform float xyPerspectiveBias0; uniform float xyPerspectiveBias1; uniform float zPerspectiveBias; -#ifdef ENABLE_DYNAMIC_SHADOWS - vec4 getRelativePosition(in vec4 position) { vec2 l = position.xy - CameraPos.xy; @@ -66,8 +64,9 @@ vec4 applyPerspectiveDistortion(in vec4 position) return position; } -// custom smoothstep implementation because it's not defined in glsl1.2 -// https://docs.gl/sl4/smoothstep +#if __VERSION__ >= 130 +#define mtsmoothstep smoothstep +#else float mtsmoothstep(in float edge0, in float edge1, in float x) { float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); @@ -75,6 +74,8 @@ float mtsmoothstep(in float edge0, in float edge1, in float x) } #endif +#endif + float directional_ambient(vec3 normal) { @@ -95,7 +96,6 @@ void main(void) gl_Position = mWorldViewProj * inVertexPosition; - vPosition = gl_Position.xyz; vNormal = (mWorld * vec4(inVertexNormal, 0.0)).xyz; worldPosition = (mWorld * inVertexPosition).xyz; eyeVec = -(mWorldView * inVertexPosition).xyz; diff --git a/src/client/shader.cpp b/src/client/shader.cpp index 5715738e6..6fc5010af 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -696,6 +696,9 @@ void ShaderSource::generateShader(ShaderInfo &shaderinfo) shaders_header << "#version 100\n" << "#define CENTROID_\n"; } + // Precision is only meaningful on GLES + shaders_header << "precision mediump float;\n" + "precision mediump sampler2D;\n"; } else { assert(false); } @@ -708,8 +711,6 @@ void ShaderSource::generateShader(ShaderInfo &shaderinfo) // cf. EVertexAttributes.h for the predefined ones vertex_header = R"( - precision mediump float; - uniform highp mat4 mWorldView; uniform highp mat4 mWorldViewProj; uniform mediump mat4 mTexture; @@ -732,9 +733,7 @@ void ShaderSource::generateShader(ShaderInfo &shaderinfo) // normally expects, so we need to take that into account. vertex_header += "#define inVertexColor (inVertexColor.bgra)\n"; - fragment_header = R"( - precision mediump float; - )"; + fragment_header = ""; if (use_glsl3) { fragment_header += "#define VARYING_ in\n" "#define gl_FragColor outFragColor\n"