diff --git a/src/pc/gfx/gfx_direct3d_common.cpp b/src/pc/gfx/gfx_direct3d_common.cpp index 5b5eff36d..289271b78 100644 --- a/src/pc/gfx/gfx_direct3d_common.cpp +++ b/src/pc/gfx/gfx_direct3d_common.cpp @@ -274,6 +274,7 @@ void gfx_direct3d_common_build_shader(char buf[4096], size_t& len, size_t& num_f } else { append_line(buf, &len, " float4 texVal1 = g_texture1.Sample(g_sampler1, input.lightmap);"); } + append_line(buf, &len, " texVal1.rgb = texVal1.rgb * texVal1.rgb + texVal1.rgb;"); } else { if (three_point_filtering) { append_line(buf, &len, " float4 texVal1;"); diff --git a/src/pc/gfx/gfx_opengl.c b/src/pc/gfx/gfx_opengl.c index fb168d368..d3e2d20f4 100644 --- a/src/pc/gfx/gfx_opengl.c +++ b/src/pc/gfx/gfx_opengl.c @@ -383,22 +383,26 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC } } - append_str(fs_buf, &fs_len, (opt_alpha) ? "vec4 texel = " : "vec3 texel = "); - for (int i = 0; i < (opt_2cycle + 1); i++) { - u8* cmd = &cc->shader_commands[i * 8]; - if (!ccf.color_alpha_same[i] && opt_alpha) { - append_str(fs_buf, &fs_len, "vec4("); - append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+0], ccf.do_multiply[i*2+0], ccf.do_mix[i*2+0], false, false, true); - append_str(fs_buf, &fs_len, ", "); - append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+1], ccf.do_multiply[i*2+1], ccf.do_mix[i*2+1], true, true, true); - append_str(fs_buf, &fs_len, ")"); - } else { - append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+0], ccf.do_multiply[i*2+0], ccf.do_mix[i*2+0], opt_alpha, false, opt_alpha); - } - append_line(fs_buf, &fs_len, ";"); + if (opt_light_map) { + append_str(fs_buf, &fs_len, "vec3 texel = texVal0.rgb * (texVal1.rgb * texVal1.rgb + texVal1.rgb);\n"); + } else { + append_str(fs_buf, &fs_len, (opt_alpha) ? "vec4 texel = " : "vec3 texel = "); + for (int i = 0; i < (opt_2cycle + 1); i++) { + u8* cmd = &cc->shader_commands[i * 8]; + if (!ccf.color_alpha_same[i] && opt_alpha) { + append_str(fs_buf, &fs_len, "vec4("); + append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+0], ccf.do_multiply[i*2+0], ccf.do_mix[i*2+0], false, false, true); + append_str(fs_buf, &fs_len, ", "); + append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+1], ccf.do_multiply[i*2+1], ccf.do_mix[i*2+1], true, true, true); + append_str(fs_buf, &fs_len, ")"); + } else { + append_formula(fs_buf, &fs_len, cmd, ccf.do_single[i*2+0], ccf.do_multiply[i*2+0], ccf.do_mix[i*2+0], opt_alpha, false, opt_alpha); + } + append_line(fs_buf, &fs_len, ";"); - if (i == 0 && opt_2cycle) { - append_str(fs_buf, &fs_len, "texel = "); + if (i == 0 && opt_2cycle) { + append_str(fs_buf, &fs_len, "texel = "); + } } }