[Scummvm-git-logs] scummvm master -> db4c9c7bd995a95d57ab9312665074effba6f0d1
neuromancer
noreply at scummvm.org
Tue Jun 11 11:55:08 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
db4c9c7bd9 FREESCAPE: improved stipple effect in OpenGL shaders
Commit: db4c9c7bd995a95d57ab9312665074effba6f0d1
https://github.com/scummvm/scummvm/commit/db4c9c7bd995a95d57ab9312665074effba6f0d1
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-06-11T13:56:13+02:00
Commit Message:
FREESCAPE: improved stipple effect in OpenGL shaders
Changed paths:
engines/freescape/gfx_opengl_shaders.cpp
engines/freescape/shaders/freescape_triangle.fragment
diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index e5d40824a02..5287e587337 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -457,15 +457,13 @@ void OpenGLShaderRenderer::setStippleData(byte *data) {
if (!data)
return;
- for (int i = 0; i < 8; i++) {
- byte b = data[i];
- for (int j = 0; j < 8; j++) {
- //debug("%d", 8*i + j);
- _variableStippleArray[i + 8*j] = b & 0x1;
- b = b >> 1;
- }
+ int stippleData[128];
+
+ for (int i = 0; i < 128; i++) {
+ stippleData[i] = 0;
+ stippleData[i] = data[i];
}
- _triangleShader->setUniform("stipple", 64, (const int*)&_variableStippleArray);
+ _triangleShader->setUniform("stipple", 128, (const int*)&stippleData);
}
void OpenGLShaderRenderer::useStipple(bool enabled) {
diff --git a/engines/freescape/shaders/freescape_triangle.fragment b/engines/freescape/shaders/freescape_triangle.fragment
index 9ad098b111e..0bbe559c0f1 100644
--- a/engines/freescape/shaders/freescape_triangle.fragment
+++ b/engines/freescape/shaders/freescape_triangle.fragment
@@ -1,15 +1,32 @@
OUTPUT
uniform UBOOL useStipple;
-uniform int stipple[64];
+uniform int stipple[128];
varying vec4 var_color;
void main()
{
if (UBOOL_TEST(useStipple)) {
- ivec2 coord = ivec2(gl_FragCoord.xy - 0.5);
- if (stipple[int(mod(float(coord.x), 8.) + mod(float(coord.y), 8.) * 8.)] == 0)
+ // Calculate the 32x32 pattern coordinates
+ ivec2 coord = ivec2(gl_FragCoord.xy);
+
+ // Calculate the byte position and bit position within that byte
+ int x = int(mod(float(coord.x), 32.));
+ int y = int(mod(float(coord.y), 32.));
+
+ // Each row in the 32x32 pattern is represented by 4 bytes (4 * 8 bits = 32 bits)
+ int byteIndex = y * 4 + (x / 8);
+ int bitIndex = int(mod(float(x), 8.));
+
+ // Get the stipple pattern byte
+ int patternByte = stipple[byteIndex];
+
+ for (int i = 0; i < 7 - bitIndex; i++) {
+ patternByte = patternByte / 2;
+ }
+
+ if (int(mod(float(patternByte), 2.)) == 1)
discard;
}
More information about the Scummvm-git-logs
mailing list