vertex warp is now a slider, shaders preserve lightmap

This commit is contained in:
Valerie Wolfe 2024-04-09 22:34:45 -04:00
parent 2bac6e11ea
commit 356f35dc55
6 changed files with 27 additions and 12 deletions

View file

@ -2,11 +2,14 @@
varying vec2 texcoord; varying vec2 texcoord;
varying vec4 color; varying vec4 color;
varying vec2 lmcoord;
uniform sampler2D texture; uniform sampler2D texture;
uniform sampler2D lightmap;
void main() { void main() {
vec4 final = texture2D(texture, texcoord) * color; vec4 final = texture2D(texture, texcoord) * color;
final *= texture2D(lightmap, lmcoord);
gl_FragData[0] = final; gl_FragData[0] = final;
} }

View file

@ -2,24 +2,25 @@
varying vec2 texcoord; varying vec2 texcoord;
varying vec4 color; varying vec4 color;
varying vec2 lmcoord;
uniform mat4 gbufferModelView, gbufferModelViewInverse; uniform mat4 gbufferModelView, gbufferModelViewInverse;
uniform float viewWidth, viewHeight; uniform float viewWidth, viewHeight;
#define pixelSize 2 // [1 2 4 8 16] #define pixelSize 2 // [1 2 4 8 16]
//#define vWarp // whether or not to warp vertices #define vWarp 0 // psx vertex warp [0 1 2 4 8 16 32]
void main() { void main() {
texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy;
color = gl_Color; color = gl_Color;
#ifdef vWarp #ifdef vWarp
vec2 screen = vec2(viewWidth / pixelSize, viewHeight / pixelSize); float mod = pixelSize * vWarp;
vec2 screen = vec2(viewWidth / mod, viewHeight / mod);
vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex;
vec2 nearest = round(position.xy * screen) / screen; vec2 nearest = round(position.xy / position.w * screen) / screen;
position.xy = nearest; position.xy = nearest;
//vec3 nearest = round(position.xyz * 100) / 100;
//position.xyz = nearest;
gl_Position = gl_ProjectionMatrix * gbufferModelView * position; gl_Position = gl_ProjectionMatrix * gbufferModelView * position;
#else #else
gl_Position = ftransform(); gl_Position = ftransform();

View file

@ -2,11 +2,14 @@
varying vec2 texcoord; varying vec2 texcoord;
varying vec4 color; varying vec4 color;
varying vec2 lmcoord;
uniform sampler2D texture; uniform sampler2D texture;
uniform sampler2D lightmap;
void main() { void main() {
vec4 final = texture2D(texture, texcoord) * color; vec4 final = texture2D(texture, texcoord) * color;
final *= texture2D(lightmap, lmcoord);
gl_FragData[0] = final; gl_FragData[0] = final;
} }

View file

@ -2,24 +2,25 @@
varying vec2 texcoord; varying vec2 texcoord;
varying vec4 color; varying vec4 color;
varying vec2 lmcoord;
uniform mat4 gbufferModelView, gbufferModelViewInverse; uniform mat4 gbufferModelView, gbufferModelViewInverse;
uniform float viewWidth, viewHeight; uniform float viewWidth, viewHeight;
#define pixelSize 2 // [1 2 4 8 16] #define pixelSize 2 // [1 2 4 8 16]
//#define vWarp // whether or not to warp vertices #define vWarp 0 // psx vertex warp [0 1 2 4 8 16 32]
void main() { void main() {
texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy;
lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy;
color = gl_Color; color = gl_Color;
#ifdef vWarp #if vWarp > 0
vec2 screen = vec2(viewWidth / pixelSize, viewHeight / pixelSize); float mod = pixelSize * vWarp;
vec2 screen = vec2(viewWidth / mod, viewHeight / mod);
vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex; vec4 position = gbufferModelViewInverse * gl_ModelViewMatrix * gl_Vertex;
vec2 nearest = round(position.xy * screen) / screen; vec2 nearest = round(position.xy / position.w * screen) / screen;
position.xy = nearest; position.xy = nearest;
//vec3 nearest = round(position.xyz * 100) / 100;
//position.xyz = nearest;
gl_Position = gl_ProjectionMatrix * gbufferModelView * position; gl_Position = gl_ProjectionMatrix * gbufferModelView * position;
#else #else
gl_Position = ftransform(); gl_Position = ftransform();

View file

@ -19,6 +19,13 @@ option.valSteps=Value Depth
screen.PSX=PSX screen.PSX=PSX
option.vWarp=Vertex Warping option.vWarp=Vertex Warping
option.vWarp.comment=Emulates screen-space vertex snapping responsible for vertex wobble on the PSX option.vWarp.comment=Emulates screen-space vertex snapping responsible for vertex wobble on the PSX
value.vWarp.0=Off
value.vWarp.1=Minimal (1x)
value.vWarp.2=Low (2x)
value.vWarp.4=Medium (4x)
value.vWarp.8=High (8x)
value.vWarp.16=Extreme (16x)
value.vWarp.32=Silly (32x)
option.tWarp=Affine Textures option.tWarp=Affine Textures
option.tWarp.comment=Emulates affine texture mapping responsible for warping textures on the PSX option.tWarp.comment=Emulates affine texture mapping responsible for warping textures on the PSX

View file

@ -1,4 +1,4 @@
sliders=pixelSize hueSteps satSteps valSteps rgbSteps sliders=pixelSize hueSteps satSteps valSteps rgbSteps vWarp
screen=pixelSize <empty> [COLOR] [PSX] screen=pixelSize <empty> [COLOR] [PSX]