[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