mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-21 18:19:19 +02:00
WIP
This commit is contained in:
28
shaders/ecs_billboard.frag
Normal file
28
shaders/ecs_billboard.frag
Normal file
@@ -0,0 +1,28 @@
|
||||
in vec2 f_uv;
|
||||
in vec4 f_pos;
|
||||
|
||||
#texture (tex1, 0, sRGB_A)
|
||||
uniform sampler2D tex1;
|
||||
|
||||
#include <common>
|
||||
#include <apply_fog.glsl>
|
||||
#include <tonemapping.glsl>
|
||||
|
||||
layout(location = 0) out vec4 out_color;
|
||||
#if MOTIONBLUR_ENABLED
|
||||
layout(location = 1) out vec4 out_motion;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 col = texture(tex1, f_uv);
|
||||
if (col.a < 0.01) discard;
|
||||
#if POSTFX_ENABLED
|
||||
out_color = vec4(apply_fog(col.rgb), col.a);
|
||||
#else
|
||||
out_color = tonemap(vec4(apply_fog(col.rgb), col.a));
|
||||
#endif
|
||||
#if MOTIONBLUR_ENABLED
|
||||
out_motion = vec4(0.0);
|
||||
#endif
|
||||
}
|
||||
30
shaders/ecs_billboard.vert
Normal file
30
shaders/ecs_billboard.vert
Normal file
@@ -0,0 +1,30 @@
|
||||
// ECS billboard instanced vertex shader.
|
||||
// Per-instance: camera-relative position and size.
|
||||
// UVs are generated per-corner from gl_VertexID.
|
||||
layout(location = 0) in vec3 i_position;
|
||||
layout(location = 1) in float i_size;
|
||||
|
||||
out vec2 f_uv;
|
||||
out vec4 f_pos;
|
||||
|
||||
#include <common>
|
||||
|
||||
const vec2 corners[6] = vec2[6](
|
||||
vec2(-0.5, -0.5), vec2( 0.5, -0.5), vec2( 0.5, 0.5),
|
||||
vec2(-0.5, -0.5), vec2( 0.5, 0.5), vec2(-0.5, 0.5)
|
||||
);
|
||||
const vec2 uvs[6] = vec2[6](
|
||||
vec2(0.0, 0.0), vec2(1.0, 0.0), vec2(1.0, 1.0),
|
||||
vec2(0.0, 0.0), vec2(1.0, 1.0), vec2(0.0, 1.0)
|
||||
);
|
||||
|
||||
void main()
|
||||
{
|
||||
int idx = gl_VertexID;
|
||||
vec3 right = vec3(inv_view[0]);
|
||||
vec3 up = vec3(inv_view[1]);
|
||||
vec3 worldPos = i_position + (right * corners[idx].x + up * corners[idx].y) * i_size;
|
||||
f_pos = modelview * vec4(worldPos, 1.0);
|
||||
gl_Position = projection * f_pos;
|
||||
f_uv = uvs[idx];
|
||||
}
|
||||
24
shaders/ecs_line.frag
Normal file
24
shaders/ecs_line.frag
Normal file
@@ -0,0 +1,24 @@
|
||||
in vec3 f_color;
|
||||
in vec4 f_pos;
|
||||
|
||||
#include <common>
|
||||
#include <apply_fog.glsl>
|
||||
#include <tonemapping.glsl>
|
||||
|
||||
layout(location = 0) out vec4 out_color;
|
||||
#if MOTIONBLUR_ENABLED
|
||||
layout(location = 1) out vec4 out_motion;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 col = f_color;
|
||||
#if POSTFX_ENABLED
|
||||
out_color = vec4(apply_fog(col), 1.0);
|
||||
#else
|
||||
out_color = tonemap(vec4(apply_fog(col), 1.0));
|
||||
#endif
|
||||
#if MOTIONBLUR_ENABLED
|
||||
out_motion = vec4(0.0);
|
||||
#endif
|
||||
}
|
||||
24
shaders/ecs_particle.frag
Normal file
24
shaders/ecs_particle.frag
Normal file
@@ -0,0 +1,24 @@
|
||||
in vec4 f_color;
|
||||
in vec4 f_pos;
|
||||
|
||||
#include <common>
|
||||
#include <apply_fog.glsl>
|
||||
#include <tonemapping.glsl>
|
||||
|
||||
layout(location = 0) out vec4 out_color;
|
||||
#if MOTIONBLUR_ENABLED
|
||||
layout(location = 1) out vec4 out_motion;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 col = f_color;
|
||||
#if POSTFX_ENABLED
|
||||
out_color = vec4(apply_fog(col.rgb), col.a);
|
||||
#else
|
||||
out_color = tonemap(vec4(apply_fog(col.rgb), col.a));
|
||||
#endif
|
||||
#if MOTIONBLUR_ENABLED
|
||||
out_motion = vec4(0.0);
|
||||
#endif
|
||||
}
|
||||
34
shaders/ecs_particle.vert
Normal file
34
shaders/ecs_particle.vert
Normal file
@@ -0,0 +1,34 @@
|
||||
// ECS particle instanced billboard vertex shader.
|
||||
// Per-instance data: camera-relative world position, size, color.
|
||||
// Billboard corners are generated via gl_VertexID (no geometry shader needed).
|
||||
layout(location = 0) in vec3 i_position; // camera-relative world position
|
||||
layout(location = 1) in float i_size;
|
||||
layout(location = 2) in vec4 i_color;
|
||||
|
||||
out vec4 f_color;
|
||||
out vec4 f_pos;
|
||||
|
||||
#include <common>
|
||||
|
||||
// Two-triangle billboard quad (CCW winding)
|
||||
const vec2 corners[6] = vec2[6](
|
||||
vec2(-0.5, -0.5), vec2( 0.5, -0.5), vec2( 0.5, 0.5),
|
||||
vec2(-0.5, -0.5), vec2( 0.5, 0.5), vec2(-0.5, 0.5)
|
||||
);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 corner = corners[gl_VertexID];
|
||||
|
||||
// inv_view is the inverse of the rotation-only view matrix.
|
||||
// Its columns are the camera's right, up, forward vectors in world space.
|
||||
vec3 right = vec3(inv_view[0]);
|
||||
vec3 up = vec3(inv_view[1]);
|
||||
|
||||
// Expand billboard in world space around the camera-relative centre.
|
||||
vec3 worldPos = i_position + (right * corner.x + up * corner.y) * i_size;
|
||||
|
||||
f_pos = modelview * vec4(worldPos, 1.0);
|
||||
gl_Position = projection * f_pos;
|
||||
f_color = i_color;
|
||||
}
|
||||
Reference in New Issue
Block a user