[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