فهرست منبع

Merge pull request #2367 from JayFoxRox/lighting-lut-quickfix

Lighting LUT Quickfix
bunnei 9 سال پیش
والد
کامیت
2f746e9946
1فایلهای تغییر یافته به همراه9 افزوده شده و 10 حذف شده
  1. 9 10
      src/video_core/renderer_opengl/gl_shader_gen.cpp

+ 9 - 10
src/video_core/renderer_opengl/gl_shader_gen.cpp

@@ -293,7 +293,7 @@ static void AppendAlphaTestCondition(std::string& out, Regs::CompareFunc func) {
     case CompareFunc::GreaterThanOrEqual: {
         static const char* op[] = {"!=", "==", ">=", ">", "<=", "<"};
         unsigned index = (unsigned)func - (unsigned)CompareFunc::Equal;
-        out += "int(last_tex_env_out.a * 255.0f) " + std::string(op[index]) + " alphatest_ref";
+        out += "int(last_tex_env_out.a * 255.0) " + std::string(op[index]) + " alphatest_ref";
         break;
     }
 
@@ -422,16 +422,13 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
         if (abs) {
             // LUT index is in the range of (0.0, 1.0)
             index = lighting.light[light_num].two_sided_diffuse ? "abs(" + index + ")"
-                                                                : "max(" + index + ", 0.f)";
-            return "(FLOAT_255 * clamp(" + index + ", 0.0, 1.0))";
+                                                                : "max(" + index + ", 0.0)";
         } else {
             // LUT index is in the range of (-1.0, 1.0)
-            index = "clamp(" + index + ", -1.0, 1.0)";
-            return "(FLOAT_255 * ((" + index + " < 0) ? " + index + " + 2.0 : " + index +
-                   ") / 2.0)";
+            index = "((" + index + " < 0) ? " + index + " + 2.0 : " + index + ") / 2.0";
         }
 
-        return std::string();
+        return "(OFFSET_256 + SCALE_256 * clamp(" + index + ", 0.0, 1.0))";
     };
 
     // Gets the lighting lookup table value given the specified sampler and index
@@ -462,7 +459,7 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
         if (light_config.dist_atten_enable) {
             std::string index = "(" + light_src + ".dist_atten_scale * length(-view - " +
                                 light_src + ".position) + " + light_src + ".dist_atten_bias)";
-            index = "((clamp(" + index + ", 0.0, FLOAT_255)))";
+            index = "(OFFSET_256 + SCALE_256 * clamp(" + index + ", 0.0, 1.0))";
             const unsigned lut_num =
                 ((unsigned)Regs::LightingSampler::DistanceAttenuation + light_config.num);
             dist_atten = GetLutValue((Regs::LightingSampler)lut_num, index);
@@ -580,8 +577,10 @@ std::string GenerateFragmentShader(const PicaShaderConfig& config) {
 #version 330 core
 #define NUM_TEV_STAGES 6
 #define NUM_LIGHTS 8
-#define LIGHTING_LUT_SIZE 256
-#define FLOAT_255 (255.0 / 256.0)
+
+// Texture coordinate offsets and scales
+#define OFFSET_256 (0.5 / 256.0)
+#define SCALE_256 (255.0 / 256.0)
 
 in vec4 primary_color;
 in vec2 texcoord[3];