1
0
mirror of https://github.com/moparisthebest/minetest synced 2024-11-16 14:25:19 -05:00

Fix shaders on some GPUs

This commit is contained in:
Novatux 2013-12-08 08:01:20 +01:00
parent 3cc45fd8ad
commit 206565d965
6 changed files with 46 additions and 15 deletions

View File

@ -21,14 +21,16 @@ const float e = 2.718281828459;
void main (void) void main (void)
{ {
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
vec3 color; vec3 color;
vec2 uv = gl_TexCoord[0].st; vec2 uv = gl_TexCoord[0].st;
#ifdef NORMALS
float height; float height;
vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y); vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) { if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) {
float map_height = texture2D(normalTexture, uv).a; float map_height = texture2D(normalTexture, uv).a;
if (map_height < 1.0){ if (map_height < 1.0){
@ -49,6 +51,9 @@ void main (void)
} else { } else {
color = texture2D(baseTexture, uv).rgb; color = texture2D(baseTexture, uv).rgb;
} }
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a; float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha); vec4 col = vec4(color.r, color.g, color.b, alpha);

View File

@ -18,12 +18,13 @@ const float e = 2.718281828459;
void main (void) void main (void)
{ {
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
vec3 color; vec3 color;
vec2 uv = gl_TexCoord[0].st; vec2 uv = gl_TexCoord[0].st;
#ifdef NORMALS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) { if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {
vec3 base = texture2D(baseTexture, uv).rgb; vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec); vec3 vVec = normalize(eyeVec);
@ -36,6 +37,9 @@ void main (void)
} else { } else {
color = texture2D(baseTexture, uv).rgb; color = texture2D(baseTexture, uv).rgb;
} }
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a; float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha); vec4 col = vec4(color.r, color.g, color.b, alpha);

View File

@ -17,12 +17,13 @@ const float e = 2.718281828459;
void main (void) void main (void)
{ {
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
vec3 color; vec3 color;
vec2 uv = gl_TexCoord[0].st; vec2 uv = gl_TexCoord[0].st;
#ifdef NORMALS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) { if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {
vec3 base = texture2D(baseTexture, uv).rgb; vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec); vec3 vVec = normalize(eyeVec);
@ -35,6 +36,9 @@ void main (void)
} else { } else {
color = texture2D(baseTexture, uv).rgb; color = texture2D(baseTexture, uv).rgb;
} }
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = gl_Color.a; float alpha = gl_Color.a;
vec4 col = vec4(color.r, color.g, color.b, alpha); vec4 col = vec4(color.r, color.g, color.b, alpha);

View File

@ -17,12 +17,13 @@ const float e = 2.718281828459;
void main (void) void main (void)
{ {
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
vec3 color; vec3 color;
vec2 uv = gl_TexCoord[0].st; vec2 uv = gl_TexCoord[0].st;
#ifdef NORMALS
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) { if ((enable_bumpmapping == 1.0) && (use_normalmap > 0.0)) {
vec3 base = texture2D(baseTexture, uv).rgb; vec3 base = texture2D(baseTexture, uv).rgb;
vec3 vVec = normalize(eyeVec); vec3 vVec = normalize(eyeVec);
@ -35,6 +36,9 @@ void main (void)
} else { } else {
color = texture2D(baseTexture, uv).rgb; color = texture2D(baseTexture, uv).rgb;
} }
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a; float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha); vec4 col = vec4(color.r, color.g, color.b, alpha);

View File

@ -23,14 +23,16 @@ const float e = 2.718281828459;
void main (void) void main (void)
{ {
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
vec3 color; vec3 color;
vec2 uv = gl_TexCoord[0].st; vec2 uv = gl_TexCoord[0].st;
#ifdef NORMALS
float height; float height;
vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y); vec2 tsEye = vec2(tsEyeVec.x,-tsEyeVec.y);
float use_normalmap = texture2D(useNormalmap,vec2(1.0,1.0)).r;
float enable_bumpmapping = enableBumpmapping;
if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) { if ((enableParallaxOcclusion == 1.0) && (use_normalmap > 0.0)) {
float map_height = texture2D(normalTexture, uv).a; float map_height = texture2D(normalTexture, uv).a;
if (map_height < 1.0){ if (map_height < 1.0){
@ -69,6 +71,9 @@ void main (void)
} else { } else {
color = texture2D(baseTexture, uv).rgb; color = texture2D(baseTexture, uv).rgb;
} }
#else
color = texture2D(baseTexture, uv).rgb;
#endif
float alpha = texture2D(baseTexture, uv).a; float alpha = texture2D(baseTexture, uv).a;
vec4 col = vec4(color.r, color.g, color.b, alpha); vec4 col = vec4(color.r, color.g, color.b, alpha);

View File

@ -673,6 +673,15 @@ ShaderInfo generate_shader(std::string name, IrrlichtDevice *device,
if(vertex_program == "" && pixel_program == "" && geometry_program == "") if(vertex_program == "" && pixel_program == "" && geometry_program == "")
return shaderinfo; return shaderinfo;
if (g_settings->getBool("enable_bumpmapping") || g_settings->getBool("enable_parallax_occlusion")) {
if(vertex_program != "")
vertex_program = "#define NORMALS\n" + vertex_program;
if(pixel_program != "")
pixel_program = "#define NORMALS\n" + pixel_program;
if(geometry_program != "")
geometry_program = "#define NORMALS\n" + geometry_program;
}
// Call addHighLevelShaderMaterial() or addShaderMaterial() // Call addHighLevelShaderMaterial() or addShaderMaterial()
const c8* vertex_program_ptr = 0; const c8* vertex_program_ptr = 0;
const c8* pixel_program_ptr = 0; const c8* pixel_program_ptr = 0;