initial commit, 4.5 stable
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
Some checks failed
🔗 GHA / 📊 Static checks (push) Has been cancelled
🔗 GHA / 🤖 Android (push) Has been cancelled
🔗 GHA / 🍏 iOS (push) Has been cancelled
🔗 GHA / 🐧 Linux (push) Has been cancelled
🔗 GHA / 🍎 macOS (push) Has been cancelled
🔗 GHA / 🏁 Windows (push) Has been cancelled
🔗 GHA / 🌐 Web (push) Has been cancelled
This commit is contained in:
108
modules/lightmapper_rd/lm_blendseams.glsl
Normal file
108
modules/lightmapper_rd/lm_blendseams.glsl
Normal file
@@ -0,0 +1,108 @@
|
||||
#[versions]
|
||||
|
||||
lines = "#define MODE_LINES";
|
||||
triangles = "#define MODE_TRIANGLES";
|
||||
|
||||
#[vertex]
|
||||
|
||||
#version 450
|
||||
|
||||
#VERSION_DEFINES
|
||||
|
||||
#include "lm_common_inc.glsl"
|
||||
|
||||
layout(push_constant, std430) uniform Params {
|
||||
uint base_index;
|
||||
uint slice;
|
||||
vec2 uv_offset;
|
||||
bool debug;
|
||||
float blend;
|
||||
uint pad[2];
|
||||
}
|
||||
params;
|
||||
|
||||
layout(location = 0) out vec3 uv_interp;
|
||||
|
||||
void main() {
|
||||
#ifdef MODE_TRIANGLES
|
||||
uint triangle_idx = params.base_index + gl_VertexIndex / 3;
|
||||
uint triangle_subidx = gl_VertexIndex % 3;
|
||||
|
||||
vec2 uv;
|
||||
if (triangle_subidx == 0) {
|
||||
uv = vertices.data[triangles.data[triangle_idx].indices.x].uv;
|
||||
} else if (triangle_subidx == 1) {
|
||||
uv = vertices.data[triangles.data[triangle_idx].indices.y].uv;
|
||||
} else {
|
||||
uv = vertices.data[triangles.data[triangle_idx].indices.z].uv;
|
||||
}
|
||||
|
||||
uv_interp = vec3(uv, float(params.slice));
|
||||
gl_Position = vec4((uv + params.uv_offset) * 2.0 - 1.0, 0.0001, 1.0);
|
||||
#endif
|
||||
|
||||
#ifdef MODE_LINES
|
||||
uint seam_idx = params.base_index + gl_VertexIndex / 4;
|
||||
uint seam_subidx = gl_VertexIndex % 4;
|
||||
|
||||
uint src_idx;
|
||||
uint dst_idx;
|
||||
|
||||
if (seam_subidx == 0) {
|
||||
src_idx = seams.data[seam_idx].b.x;
|
||||
dst_idx = seams.data[seam_idx].a.x;
|
||||
} else if (seam_subidx == 1) {
|
||||
src_idx = seams.data[seam_idx].b.y;
|
||||
dst_idx = seams.data[seam_idx].a.y;
|
||||
} else if (seam_subidx == 2) {
|
||||
src_idx = seams.data[seam_idx].a.x;
|
||||
dst_idx = seams.data[seam_idx].b.x;
|
||||
} else if (seam_subidx == 3) {
|
||||
src_idx = seams.data[seam_idx].a.y;
|
||||
dst_idx = seams.data[seam_idx].b.y;
|
||||
}
|
||||
|
||||
vec2 src_uv = vertices.data[src_idx].uv;
|
||||
vec2 dst_uv = vertices.data[dst_idx].uv + params.uv_offset;
|
||||
|
||||
uv_interp = vec3(src_uv, float(params.slice));
|
||||
gl_Position = vec4(dst_uv * 2.0 - 1.0, 0.0001, 1.0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#[fragment]
|
||||
|
||||
#version 450
|
||||
|
||||
#VERSION_DEFINES
|
||||
|
||||
#include "lm_common_inc.glsl"
|
||||
|
||||
layout(push_constant, std430) uniform Params {
|
||||
uint base_index;
|
||||
uint slice;
|
||||
vec2 uv_offset;
|
||||
bool debug;
|
||||
float blend;
|
||||
uint pad[2];
|
||||
}
|
||||
params;
|
||||
|
||||
layout(location = 0) in vec3 uv_interp;
|
||||
|
||||
layout(location = 0) out vec4 dst_color;
|
||||
|
||||
layout(set = 1, binding = 0) uniform texture2DArray src_color_tex;
|
||||
|
||||
void main() {
|
||||
if (params.debug) {
|
||||
#ifdef MODE_TRIANGLES
|
||||
dst_color = vec4(1, 0, 1, 1);
|
||||
#else
|
||||
dst_color = vec4(1, 1, 0, 1);
|
||||
#endif
|
||||
} else {
|
||||
vec4 src_color = textureLod(sampler2DArray(src_color_tex, linear_sampler), uv_interp, 0.0);
|
||||
dst_color = vec4(src_color.rgb, params.blend); //mix
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user