[Scummvm-git-logs] scummvm master -> 3dd927df06021779c8bd45c34a1ecc1d1ea33fc5

neuromancer noreply at scummvm.org
Sat Jan 11 11:37:44 UTC 2025


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:
3dd927df06 FREESCAPE: fixed several issues in the opengl shader renderer (with help from @cmd05)


Commit: 3dd927df06021779c8bd45c34a1ecc1d1ea33fc5
    https://github.com/scummvm/scummvm/commit/3dd927df06021779c8bd45c34a1ecc1d1ea33fc5
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-01-11T12:38:42+01:00

Commit Message:
FREESCAPE: fixed several issues in the opengl shader renderer (with help from @cmd05)

Changed paths:
    engines/freescape/gfx_opengl_shaders.cpp
    engines/freescape/gfx_opengl_shaders.h
    engines/freescape/shaders/freescape_triangle.fragment


diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index 9569c6ff1d3..aa7a2c224bc 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -95,6 +95,10 @@ void OpenGLShaderRenderer::init() {
 	_bitmapShader->enableVertexAttribute("position", _bitmapVBO, 2, GL_FLOAT, GL_TRUE, 2 * sizeof(float), 0);
 	_bitmapShader->enableVertexAttribute("texcoord", _bitmapVBO, 2, GL_FLOAT, GL_TRUE, 2 * sizeof(float), 0);
 
+	// populate default stipple data for shader rendering
+	for(int i = 0; i < 128; i++)
+		_defaultShaderStippleArray[i] = _defaultStippleArray[i];
+
 	glDisable(GL_TEXTURE_2D);
 	glEnable(GL_DEPTH_TEST);
 	glEnable(GL_SCISSOR_TEST);
@@ -449,38 +453,33 @@ void OpenGLShaderRenderer::polygonOffset(bool enabled) {
 }
 
 void OpenGLShaderRenderer::setStippleData(byte *data) {
-	_triangleShader->use();
 	if (!data)
-		return;
-
-	int stippleData[128];
+		data = _defaultStippleArray;
 
-	for (int i = 0; i < 128; i++) {
-		stippleData[i] = 0;
-		stippleData[i] = data[i];
-	}
-	_triangleShader->setUniform("stipple", 128, (const int*)&stippleData);
+	for (int i = 0; i < 128; i++)
+		_variableStippleArray[i] = data[i];
 }
 
 void OpenGLShaderRenderer::useStipple(bool enabled) {
 	_triangleShader->use();
+	_triangleShader->setUniform("useStipple", enabled);
+
 	if (enabled) {
 		GLfloat factor = 0;
 		glGetFloatv(GL_POLYGON_OFFSET_FACTOR, &factor);
 		glEnable(GL_POLYGON_OFFSET_FILL);
-		glPolygonOffset(factor - 1.0f, -1.0f);
+		glPolygonOffset(factor - 0.5f, -1.0f);
 		if (_renderMode == Common::kRenderZX    ||
 			_renderMode == Common::kRenderCPC   ||
 			_renderMode == Common::kRenderCGA   ||
 			_renderMode == Common::kRenderHercG)
-			setStippleData((byte *)_variableStippleArray);
+			_triangleShader->setUniform("stipple", 128, _variableStippleArray);
 		else
-			setStippleData(_defaultStippleArray);
+			_triangleShader->setUniform("stipple", 128, _defaultShaderStippleArray);
 	} else {
 		glPolygonOffset(0, 0);
 		glDisable(GL_POLYGON_OFFSET_FILL);
 	}
-	_triangleShader->setUniform("useStipple", enabled);
 }
 
 void OpenGLShaderRenderer::useColor(uint8 r, uint8 g, uint8 b) {
diff --git a/engines/freescape/gfx_opengl_shaders.h b/engines/freescape/gfx_opengl_shaders.h
index d5d258cae7b..eacd556f9b7 100644
--- a/engines/freescape/gfx_opengl_shaders.h
+++ b/engines/freescape/gfx_opengl_shaders.h
@@ -62,7 +62,9 @@ public:
 	OpenGL::Shader *_bitmapShader;
 	GLuint _triangleVBO;
 	GLuint _bitmapVBO;
-	int _variableStippleArray[64];
+
+	int _defaultShaderStippleArray[128];
+	int _variableStippleArray[128];
 
 	virtual void init() override;
 	virtual void clear(uint8 r, uint8 g, uint8 b, bool ignoreViewport = false) override;
diff --git a/engines/freescape/shaders/freescape_triangle.fragment b/engines/freescape/shaders/freescape_triangle.fragment
index 0bbe559c0f1..ae9a13a9eb4 100644
--- a/engines/freescape/shaders/freescape_triangle.fragment
+++ b/engines/freescape/shaders/freescape_triangle.fragment
@@ -26,7 +26,7 @@ void main()
 			patternByte = patternByte / 2;
 		}
 
-		if (int(mod(float(patternByte), 2.)) == 1)
+		if (int(mod(float(patternByte), 2.)) == 0)
 			discard;
 	}
 




More information about the Scummvm-git-logs mailing list