diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-04-08 14:22:22 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2024-04-08 14:22:22 +1000 |
commit | 8a8a0501590e83cbc598c7491fca0b767094466f (patch) | |
tree | 4fd806e646179fa9a7e4027cc60e19492d003ade /assets/opensb/rendering | |
parent | 4458d2e85ed7f9e373af290dbe8063a52d2824b5 (diff) |
2 features: multi-sample anti-aliasing & Lua patches for images
Diffstat (limited to 'assets/opensb/rendering')
-rw-r--r-- | assets/opensb/rendering/effects/interface.config | 2 | ||||
-rw-r--r-- | assets/opensb/rendering/effects/interface.frag | 22 | ||||
-rw-r--r-- | assets/opensb/rendering/effects/interface.vert | 34 | ||||
-rw-r--r-- | assets/opensb/rendering/effects/world.config | 2 | ||||
-rw-r--r-- | assets/opensb/rendering/effects/world.frag | 26 | ||||
-rw-r--r-- | assets/opensb/rendering/effects/world.vert | 40 | ||||
-rw-r--r-- | assets/opensb/rendering/opengl.config (renamed from assets/opensb/rendering/opengl20.config.patch) | 2 |
7 files changed, 71 insertions, 57 deletions
diff --git a/assets/opensb/rendering/effects/interface.config b/assets/opensb/rendering/effects/interface.config index b4860d6..4616e72 100644 --- a/assets/opensb/rendering/effects/interface.config +++ b/assets/opensb/rendering/effects/interface.config @@ -1,5 +1,5 @@ { - "blitFrameBuffer" : "world", + "blitFrameBuffer" : "main", "effectParameters" : {}, "effectTextures" : {}, diff --git a/assets/opensb/rendering/effects/interface.frag b/assets/opensb/rendering/effects/interface.frag index 0ba2d60..3dd79c8 100644 --- a/assets/opensb/rendering/effects/interface.frag +++ b/assets/opensb/rendering/effects/interface.frag @@ -1,27 +1,29 @@ -#version 110 +#version 130 uniform sampler2D texture0; uniform sampler2D texture1; uniform sampler2D texture2; uniform sampler2D texture3; -varying vec2 fragmentTextureCoordinate; -varying float fragmentTextureIndex; -varying vec4 fragmentColor; +in vec2 fragmentTextureCoordinate; +flat in int fragmentTextureIndex; +in vec4 fragmentColor; + +out vec4 outColor; void main() { vec4 texColor; - if (fragmentTextureIndex > 2.9) { + if (fragmentTextureIndex == 3) texColor = texture2D(texture3, fragmentTextureCoordinate); - } else if (fragmentTextureIndex > 1.9) { + else if (fragmentTextureIndex == 2) texColor = texture2D(texture2, fragmentTextureCoordinate); - } else if (fragmentTextureIndex > 0.9) { + else if (fragmentTextureIndex == 1) texColor = texture2D(texture1, fragmentTextureCoordinate); - } else { + else texColor = texture2D(texture0, fragmentTextureCoordinate); - } + if (texColor.a <= 0.0) discard; - gl_FragColor = texColor * fragmentColor; + outColor = texColor * fragmentColor; }
\ No newline at end of file diff --git a/assets/opensb/rendering/effects/interface.vert b/assets/opensb/rendering/effects/interface.vert index 612a788..14a7cea 100644 --- a/assets/opensb/rendering/effects/interface.vert +++ b/assets/opensb/rendering/effects/interface.vert @@ -1,4 +1,4 @@ -#version 110 +#version 130 uniform vec2 textureSize0; uniform vec2 textureSize1; @@ -7,28 +7,32 @@ uniform vec2 textureSize3; uniform vec2 screenSize; uniform mat3 vertexTransform; -attribute vec2 vertexPosition; -attribute vec2 vertexTextureCoordinate; -attribute float vertexTextureIndex; -attribute vec4 vertexColor; +in vec2 vertexPosition; +in vec4 vertexColor; +in vec2 vertexTextureCoordinate; +in int vertexData; -varying vec2 fragmentTextureCoordinate; -varying float fragmentTextureIndex; -varying vec4 fragmentColor; +out vec2 fragmentTextureCoordinate; +flat out int fragmentTextureIndex; +out vec4 fragmentColor; void main() { vec2 screenPosition = (vertexTransform * vec3(vertexPosition, 1.0)).xy; - - if (vertexTextureIndex > 2.9) { + gl_Position = vec4(screenPosition / screenSize * 2.0 - 1.0, 0.0, 1.0); + if (((vertexData >> 3) & 0x1) == 1) + screenPosition.x = round(screenPosition.x); + if (((vertexData >> 4) & 0x1) == 1) + screenPosition.y = round(screenPosition.y); + int vertexTextureIndex = vertexData & 0x3; + if (vertexTextureIndex == 3) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize3; - } else if (vertexTextureIndex > 1.9) { + else if (vertexTextureIndex == 2) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize2; - } else if (vertexTextureIndex > 0.9) { + else if (vertexTextureIndex == 1) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize1; - } else { + else fragmentTextureCoordinate = vertexTextureCoordinate / textureSize0; - } + fragmentTextureIndex = vertexTextureIndex; fragmentColor = vertexColor; - gl_Position = vec4(screenPosition / screenSize * 2.0 - 1.0, 0.0, 1.0); }
\ No newline at end of file diff --git a/assets/opensb/rendering/effects/world.config b/assets/opensb/rendering/effects/world.config index 68b84fa..d8ec1a9 100644 --- a/assets/opensb/rendering/effects/world.config +++ b/assets/opensb/rendering/effects/world.config @@ -1,5 +1,5 @@ { - "frameBuffer" : "world", + "frameBuffer" : "main", "effectParameters" : { "lightMapEnabled" : { diff --git a/assets/opensb/rendering/effects/world.frag b/assets/opensb/rendering/effects/world.frag index 7da662d..8b4d77c 100644 --- a/assets/opensb/rendering/effects/world.frag +++ b/assets/opensb/rendering/effects/world.frag @@ -1,4 +1,4 @@ -#version 110 +#version 130 uniform sampler2D texture0; uniform sampler2D texture1; @@ -9,11 +9,13 @@ uniform vec2 lightMapSize; uniform sampler2D lightMap; uniform float lightMapMultiplier; -varying vec2 fragmentTextureCoordinate; -varying float fragmentTextureIndex; -varying vec4 fragmentColor; -varying float fragmentLightMapMultiplier; -varying vec2 fragmentLightMapCoordinate; +in vec2 fragmentTextureCoordinate; +flat in int fragmentTextureIndex; +in vec4 fragmentColor; +in float fragmentLightMapMultiplier; +in vec2 fragmentLightMapCoordinate; + +out vec4 outColor; vec4 cubic(float v) { vec4 n = vec4(1.0, 2.0, 3.0, 4.0) - v; @@ -64,15 +66,15 @@ vec3 sampleLight(vec2 coord, vec2 scale) { void main() { vec4 texColor; - if (fragmentTextureIndex > 2.9) { + if (fragmentTextureIndex == 3) texColor = texture2D(texture3, fragmentTextureCoordinate); - } else if (fragmentTextureIndex > 1.9) { + else if (fragmentTextureIndex == 2) texColor = texture2D(texture2, fragmentTextureCoordinate); - } else if (fragmentTextureIndex > 0.9) { + else if (fragmentTextureIndex == 1) texColor = texture2D(texture1, fragmentTextureCoordinate); - } else { + else texColor = texture2D(texture0, fragmentTextureCoordinate); - } + if (texColor.a <= 0.0) discard; @@ -82,5 +84,5 @@ void main() { finalColor.a = fragmentColor.a; else if (lightMapEnabled && finalLightMapMultiplier > 0.0) finalColor.rgb *= sampleLight(fragmentLightMapCoordinate, 1.0 / lightMapSize) * finalLightMapMultiplier; - gl_FragColor = finalColor; + outColor = finalColor; }
\ No newline at end of file diff --git a/assets/opensb/rendering/effects/world.vert b/assets/opensb/rendering/effects/world.vert index 67998bc..ce8a9fc 100644 --- a/assets/opensb/rendering/effects/world.vert +++ b/assets/opensb/rendering/effects/world.vert @@ -1,4 +1,4 @@ -#version 110 +#version 130 uniform vec2 textureSize0; uniform vec2 textureSize1; @@ -10,31 +10,37 @@ uniform vec2 lightMapSize; uniform vec2 lightMapScale; uniform vec2 lightMapOffset; -attribute vec2 vertexPosition; -attribute vec2 vertexTextureCoordinate; -attribute float vertexTextureIndex; -attribute vec4 vertexColor; -attribute float vertexParam1; +in vec2 vertexPosition; +in vec2 vertexTextureCoordinate; +in vec4 vertexColor; +in int vertexData; -varying vec2 fragmentTextureCoordinate; -varying float fragmentTextureIndex; -varying vec4 fragmentColor; -varying float fragmentLightMapMultiplier; -varying vec2 fragmentLightMapCoordinate; +out vec2 fragmentTextureCoordinate; +flat out int fragmentTextureIndex; +out vec4 fragmentColor; +out float fragmentLightMapMultiplier; +out vec2 fragmentLightMapCoordinate; void main() { vec2 screenPosition = (vertexTransform * vec3(vertexPosition, 1.0)).xy; - fragmentLightMapMultiplier = vertexParam1; + + if (((vertexData >> 3) & 0x1) == 1) + screenPosition.x = round(screenPosition.x); + if (((vertexData >> 4) & 0x1) == 1) + screenPosition.y = round(screenPosition.y); + + fragmentLightMapMultiplier = float((vertexData >> 2) & 0x1); + int vertexTextureIndex = vertexData & 0x3; fragmentLightMapCoordinate = (screenPosition / lightMapScale) - lightMapOffset * lightMapSize / screenSize; - if (vertexTextureIndex > 2.9) { + if (vertexTextureIndex == 3) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize3; - } else if (vertexTextureIndex > 1.9) { + else if (vertexTextureIndex == 2) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize2; - } else if (vertexTextureIndex > 0.9) { + else if (vertexTextureIndex == 1) fragmentTextureCoordinate = vertexTextureCoordinate / textureSize1; - } else { + else fragmentTextureCoordinate = vertexTextureCoordinate / textureSize0; - } + fragmentTextureIndex = vertexTextureIndex; fragmentColor = vertexColor; gl_Position = vec4(screenPosition / screenSize * 2.0 - 1.0, 0.0, 1.0); diff --git a/assets/opensb/rendering/opengl20.config.patch b/assets/opensb/rendering/opengl.config index 3d85c1a..8ca132e 100644 --- a/assets/opensb/rendering/opengl20.config.patch +++ b/assets/opensb/rendering/opengl.config @@ -1,5 +1,5 @@ { "frameBuffers" : { - "world" : {} + "main" : {} } }
\ No newline at end of file |