forked from suyu/suyu
Merge pull request #2367 from JayFoxRox/lighting-lut-quickfix
Lighting LUT Quickfix
This commit is contained in:
commit
2f746e9946
1 changed files with 9 additions and 10 deletions
|
@ -293,7 +293,7 @@ static void AppendAlphaTestCondition(std::string& out, Regs::CompareFunc func) {
|
||||||
case CompareFunc::GreaterThanOrEqual: {
|
case CompareFunc::GreaterThanOrEqual: {
|
||||||
static const char* op[] = {"!=", "==", ">=", ">", "<=", "<"};
|
static const char* op[] = {"!=", "==", ">=", ">", "<=", "<"};
|
||||||
unsigned index = (unsigned)func - (unsigned)CompareFunc::Equal;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -422,16 +422,13 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
|
||||||
if (abs) {
|
if (abs) {
|
||||||
// LUT index is in the range of (0.0, 1.0)
|
// LUT index is in the range of (0.0, 1.0)
|
||||||
index = lighting.light[light_num].two_sided_diffuse ? "abs(" + index + ")"
|
index = lighting.light[light_num].two_sided_diffuse ? "abs(" + index + ")"
|
||||||
: "max(" + index + ", 0.f)";
|
: "max(" + index + ", 0.0)";
|
||||||
return "(FLOAT_255 * clamp(" + index + ", 0.0, 1.0))";
|
|
||||||
} else {
|
} else {
|
||||||
// LUT index is in the range of (-1.0, 1.0)
|
// LUT index is in the range of (-1.0, 1.0)
|
||||||
index = "clamp(" + index + ", -1.0, 1.0)";
|
index = "((" + index + " < 0) ? " + index + " + 2.0 : " + index + ") / 2.0";
|
||||||
return "(FLOAT_255 * ((" + 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
|
// 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) {
|
if (light_config.dist_atten_enable) {
|
||||||
std::string index = "(" + light_src + ".dist_atten_scale * length(-view - " +
|
std::string index = "(" + light_src + ".dist_atten_scale * length(-view - " +
|
||||||
light_src + ".position) + " + light_src + ".dist_atten_bias)";
|
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 =
|
const unsigned lut_num =
|
||||||
((unsigned)Regs::LightingSampler::DistanceAttenuation + light_config.num);
|
((unsigned)Regs::LightingSampler::DistanceAttenuation + light_config.num);
|
||||||
dist_atten = GetLutValue((Regs::LightingSampler)lut_num, index);
|
dist_atten = GetLutValue((Regs::LightingSampler)lut_num, index);
|
||||||
|
@ -580,8 +577,10 @@ std::string GenerateFragmentShader(const PicaShaderConfig& config) {
|
||||||
#version 330 core
|
#version 330 core
|
||||||
#define NUM_TEV_STAGES 6
|
#define NUM_TEV_STAGES 6
|
||||||
#define NUM_LIGHTS 8
|
#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 vec4 primary_color;
|
||||||
in vec2 texcoord[3];
|
in vec2 texcoord[3];
|
||||||
|
|
Loading…
Reference in a new issue