Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/assets/opensb/rendering
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-04-08 14:22:22 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-04-08 14:22:22 +1000
commit8a8a0501590e83cbc598c7491fca0b767094466f (patch)
tree4fd806e646179fa9a7e4027cc60e19492d003ade /assets/opensb/rendering
parent4458d2e85ed7f9e373af290dbe8063a52d2824b5 (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.config2
-rw-r--r--assets/opensb/rendering/effects/interface.frag22
-rw-r--r--assets/opensb/rendering/effects/interface.vert34
-rw-r--r--assets/opensb/rendering/effects/world.config2
-rw-r--r--assets/opensb/rendering/effects/world.frag26
-rw-r--r--assets/opensb/rendering/effects/world.vert40
-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