From 7413fbdc5c3d2a2f693268bc5299cd850860bcbe Mon Sep 17 00:00:00 2001 From: Valerie Date: Thu, 11 Apr 2024 14:59:46 -0400 Subject: [PATCH] started moving shareable code to modules --- shaders/composite.vsh | 6 +----- shaders/gbuffers_basic.fsh | 13 +------------ shaders/gbuffers_basic.vsh | 14 +++++--------- shaders/module/common.glsl | 3 +++ shaders/module/empty.frag | 15 +++++++++++++++ shaders/module/empty.vert | 9 +++++++++ shaders/module/texture_warp.vert | 7 +++++++ shaders/module/vertex_warp.vert | 12 ++++++++++++ 8 files changed, 53 insertions(+), 26 deletions(-) create mode 100644 shaders/module/common.glsl create mode 100644 shaders/module/empty.frag create mode 100644 shaders/module/empty.vert create mode 100644 shaders/module/texture_warp.vert create mode 100644 shaders/module/vertex_warp.vert diff --git a/shaders/composite.vsh b/shaders/composite.vsh index 8de6c87..dc94a6b 100644 --- a/shaders/composite.vsh +++ b/shaders/composite.vsh @@ -1,8 +1,4 @@ #version 120 -varying vec2 texcoord; +#include "/module/empty.vert" -void main() { - gl_Position = ftransform(); - texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; -} diff --git a/shaders/gbuffers_basic.fsh b/shaders/gbuffers_basic.fsh index 1bf926d..5c240ef 100644 --- a/shaders/gbuffers_basic.fsh +++ b/shaders/gbuffers_basic.fsh @@ -1,15 +1,4 @@ #version 120 -varying vec2 texcoord; -varying vec4 color; -varying vec2 lmcoord; - -uniform sampler2D texture; -uniform sampler2D lightmap; - -void main() { - vec4 final = texture2D(texture, texcoord) * color; - final *= texture2D(lightmap, lmcoord); - gl_FragData[0] = final; -} +#include "/module/empty.frag" diff --git a/shaders/gbuffers_basic.vsh b/shaders/gbuffers_basic.vsh index 4c5e85b..8752f2f 100644 --- a/shaders/gbuffers_basic.vsh +++ b/shaders/gbuffers_basic.vsh @@ -1,8 +1,6 @@ #version 120 #define pixelSize 2 // [1 2 4 8 16] -#define vWarp 0 // psx vertex warp [0 1 2 4 8 16 32] -//#define tWarp // psx texture warp varying vec2 texcoord; varying vec4 color; @@ -11,24 +9,22 @@ varying vec2 lmcoord; uniform mat4 gbufferModelView, gbufferModelViewInverse; uniform float viewWidth, viewHeight; +#include "/module/vertex_warp.vert" +#include "/module/texture_warp.vert" + void main() { texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy; color = gl_Color; #if vWarp > 0 - float mod = pixelSize * vWarp; - vec2 screen = vec2(viewWidth / mod, viewHeight / mod); - vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; - vec2 nearest = round(position.xy / position.w * screen) / screen; - position.xy = nearest; - gl_Position = gl_ProjectionMatrix * gbufferModelView * position; + vertex_warp(); #else gl_Position = ftransform(); #endif #ifdef tWarp - gl_Position /= abs(gl_Position.w); + texture_warp(); #endif } diff --git a/shaders/module/common.glsl b/shaders/module/common.glsl new file mode 100644 index 0000000..4326128 --- /dev/null +++ b/shaders/module/common.glsl @@ -0,0 +1,3 @@ + +#define pixelSize 2 // [1 2 4 8 16] + diff --git a/shaders/module/empty.frag b/shaders/module/empty.frag new file mode 100644 index 0000000..0c8deaf --- /dev/null +++ b/shaders/module/empty.frag @@ -0,0 +1,15 @@ +// "empty" fragment shader + +varying vec2 texcoord; +varying vec4 color; +varying vec2 lmcoord; + +uniform sampler2D texture; +uniform sampler2D lightmap; + +void main() { + vec4 final = texture2D(texture, texcoord) * color; + final *= texture2D(lightmap, lmcoord); + gl_FragData[0] = final; +} + diff --git a/shaders/module/empty.vert b/shaders/module/empty.vert new file mode 100644 index 0000000..5d55684 --- /dev/null +++ b/shaders/module/empty.vert @@ -0,0 +1,9 @@ +// "empty" vertex shader + +varying vec2 texcoord; + +void main() { + gl_Position = ftransform(); + texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; +} + diff --git a/shaders/module/texture_warp.vert b/shaders/module/texture_warp.vert new file mode 100644 index 0000000..c5e1a8d --- /dev/null +++ b/shaders/module/texture_warp.vert @@ -0,0 +1,7 @@ + +//#define tWarp // psx texture warp + +void texture_warp() { + gl_Position /= abs(gl_Position.w); +} + diff --git a/shaders/module/vertex_warp.vert b/shaders/module/vertex_warp.vert new file mode 100644 index 0000000..63d9d4c --- /dev/null +++ b/shaders/module/vertex_warp.vert @@ -0,0 +1,12 @@ + +#define vWarp 0 // psx vertex warp [0 1 2 4 8 16 32] + +vec4 vertex_warp() { + float mod = pixelSize * vWarp; + vec2 screen = vec2(viewWidth / mod, viewHeight / mod); + vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; + vec2 nearest = round(position.xy, position.w * screen) / screen); + position.xy = nearest; + return (gl_ProjectionMatrix * gbufferModelView * position); +} +