mirror of
https://github.com/Lime3DS/Lime3DS.git
synced 2024-11-14 05:55:13 +01:00
gl_shader_gen: Inline now constant texture buffer.
This commit is contained in:
parent
0838c87dac
commit
46f18d6800
@ -1025,7 +1025,7 @@ void AppendProcTexClamp(std::string& out, const std::string& var, ProcTexClamp m
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AppendProcTexCombineAndMap(std::string& out, ProcTexCombiner combiner,
|
void AppendProcTexCombineAndMap(std::string& out, ProcTexCombiner combiner,
|
||||||
const std::string& map_lut, const std::string& offset) {
|
const std::string& offset) {
|
||||||
std::string combined;
|
std::string combined;
|
||||||
switch (combiner) {
|
switch (combiner) {
|
||||||
case ProcTexCombiner::U:
|
case ProcTexCombiner::U:
|
||||||
@ -1063,7 +1063,7 @@ void AppendProcTexCombineAndMap(std::string& out, ProcTexCombiner combiner,
|
|||||||
combined = "0.0";
|
combined = "0.0";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
out += "ProcTexLookupLUT(" + map_lut + ", " + offset + ", " + combined + ")";
|
out += "ProcTexLookupLUT(" + offset + ", " + combined + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppendProcTexSampler(std::string& out, const PicaFSConfig& config) {
|
void AppendProcTexSampler(std::string& out, const PicaFSConfig& config) {
|
||||||
@ -1072,12 +1072,12 @@ void AppendProcTexSampler(std::string& out, const PicaFSConfig& config) {
|
|||||||
// coord=1.0 is lut[127]+lut_diff[127]. For other indices, the result is interpolated using
|
// coord=1.0 is lut[127]+lut_diff[127]. For other indices, the result is interpolated using
|
||||||
// value entries and difference entries.
|
// value entries and difference entries.
|
||||||
out += R"(
|
out += R"(
|
||||||
float ProcTexLookupLUT(samplerBuffer lut, int offset, float coord) {
|
float ProcTexLookupLUT(int offset, float coord) {
|
||||||
coord *= 128;
|
coord *= 128;
|
||||||
float index_i = clamp(floor(coord), 0.0, 127.0);
|
float index_i = clamp(floor(coord), 0.0, 127.0);
|
||||||
float index_f = coord - index_i; // fract() cannot be used here because 128.0 needs to be
|
float index_f = coord - index_i; // fract() cannot be used here because 128.0 needs to be
|
||||||
// extracted as index_i = 127.0 and index_f = 1.0
|
// extracted as index_i = 127.0 and index_f = 1.0
|
||||||
vec2 entry = texelFetch(lut, int(index_i) + offset).rg;
|
vec2 entry = texelFetch(texture_buffer_lut_rg, int(index_i) + offset).rg;
|
||||||
return clamp(entry.r + entry.g * index_f, 0.0, 1.0);
|
return clamp(entry.r + entry.g * index_f, 0.0, 1.0);
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
@ -1113,8 +1113,8 @@ float ProcTexNoiseCoef(vec2 x) {
|
|||||||
float g2 = ProcTexNoiseRand2D(point + vec2(0.0, 1.0)) * (frac.x + frac.y - 1.0);
|
float g2 = ProcTexNoiseRand2D(point + vec2(0.0, 1.0)) * (frac.x + frac.y - 1.0);
|
||||||
float g3 = ProcTexNoiseRand2D(point + vec2(1.0, 1.0)) * (frac.x + frac.y - 2.0);
|
float g3 = ProcTexNoiseRand2D(point + vec2(1.0, 1.0)) * (frac.x + frac.y - 2.0);
|
||||||
|
|
||||||
float x_noise = ProcTexLookupLUT(texture_buffer_lut_rg, proctex_noise_lut_offset, frac.x);
|
float x_noise = ProcTexLookupLUT(proctex_noise_lut_offset, frac.x);
|
||||||
float y_noise = ProcTexLookupLUT(texture_buffer_lut_rg, proctex_noise_lut_offset, frac.y);
|
float y_noise = ProcTexLookupLUT(proctex_noise_lut_offset, frac.y);
|
||||||
float x0 = mix(g0, g1, x_noise);
|
float x0 = mix(g0, g1, x_noise);
|
||||||
float x1 = mix(g2, g3, x_noise);
|
float x1 = mix(g2, g3, x_noise);
|
||||||
return mix(x0, x1, y_noise);
|
return mix(x0, x1, y_noise);
|
||||||
@ -1156,7 +1156,7 @@ float ProcTexNoiseCoef(vec2 x) {
|
|||||||
|
|
||||||
// Combine and map
|
// Combine and map
|
||||||
out += "float lut_coord = ";
|
out += "float lut_coord = ";
|
||||||
AppendProcTexCombineAndMap(out, config.state.proctex.color_combiner, "texture_buffer_lut_rg",
|
AppendProcTexCombineAndMap(out, config.state.proctex.color_combiner,
|
||||||
"proctex_color_map_offset");
|
"proctex_color_map_offset");
|
||||||
out += ";\n";
|
out += ";\n";
|
||||||
|
|
||||||
@ -1190,7 +1190,7 @@ float ProcTexNoiseCoef(vec2 x) {
|
|||||||
// uses the output of CombineAndMap directly instead.
|
// uses the output of CombineAndMap directly instead.
|
||||||
out += "float final_alpha = ";
|
out += "float final_alpha = ";
|
||||||
AppendProcTexCombineAndMap(out, config.state.proctex.alpha_combiner,
|
AppendProcTexCombineAndMap(out, config.state.proctex.alpha_combiner,
|
||||||
"texture_buffer_lut_rg", "proctex_alpha_map_offset");
|
"proctex_alpha_map_offset");
|
||||||
out += ";\n";
|
out += ";\n";
|
||||||
out += "return vec4(final_color.xyz, final_alpha);\n}\n";
|
out += "return vec4(final_color.xyz, final_alpha);\n}\n";
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user