[Scummvm-git-logs] scummvm master -> 5378ff61f2528c7e70796dd1335e3c12d400ce95
neuromancer
noreply at scummvm.org
Tue Apr 4 17:59:59 UTC 2023
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a01431838d FREESCAPE: properly initialize _verts in shader renderer
7a96738168 GRAPHICS: OPENGL: added another setUniform function to set an uniform value in shaders from an array of ints
5378ff61f2 FREESCAPE: initial implementation of stipple patterns in shader renderer
Commit: a01431838df52511759fb5f89e08f144d57ca662
https://github.com/scummvm/scummvm/commit/a01431838df52511759fb5f89e08f144d57ca662
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-04-04T20:00:17+02:00
Commit Message:
FREESCAPE: properly initialize _verts in shader renderer
Changed paths:
engines/freescape/gfx_opengl_shaders.cpp
diff --git a/engines/freescape/gfx_opengl_shaders.cpp b/engines/freescape/gfx_opengl_shaders.cpp
index 9e067cfd426..53f263c56c1 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -46,6 +46,7 @@ Renderer *CreateGfxOpenGLShader(int screenW, int screenH, Common::RenderMode ren
}
OpenGLShaderRenderer::OpenGLShaderRenderer(int screenW, int screenH, Common::RenderMode renderMode) : Renderer(screenW, screenH, renderMode) {
+ _verts = nullptr;
_triangleShader = nullptr;
_triangleVBO = 0;
Commit: 7a967381681ba88f7a00864cbd118c87cdc1aa00
https://github.com/scummvm/scummvm/commit/7a967381681ba88f7a00864cbd118c87cdc1aa00
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-04-04T20:00:17+02:00
Commit Message:
GRAPHICS: OPENGL: added another setUniform function to set an uniform value in shaders from an array of ints
Changed paths:
graphics/opengl/shader.h
diff --git a/graphics/opengl/shader.h b/graphics/opengl/shader.h
index 16d908ec63d..185bd4fb063 100644
--- a/graphics/opengl/shader.h
+++ b/graphics/opengl/shader.h
@@ -131,6 +131,17 @@ public:
}
}
+ bool setUniform(const Common::String &uniform, const int size, const int *array) {
+ GLint pos = getUniformLocation(uniform);
+ if (pos != -1) {
+ use();
+ GL_CALL(glUniform1iv(pos, size, array));
+ return true;
+ } else {
+ return false;
+ }
+ }
+
// Different name to avoid overload ambiguity
bool setUniform1f(const Common::String &uniform, float f) {
GLint pos = getUniformLocation(uniform);
Commit: 5378ff61f2528c7e70796dd1335e3c12d400ce95
https://github.com/scummvm/scummvm/commit/5378ff61f2528c7e70796dd1335e3c12d400ce95
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-04-04T20:00:17+02:00
Commit Message:
FREESCAPE: initial implementation of stipple patterns in shader renderer
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 53f263c56c1..d14ee7dc874 100644
--- a/engines/freescape/gfx_opengl_shaders.cpp
+++ b/engines/freescape/gfx_opengl_shaders.cpp
@@ -186,6 +186,7 @@ void OpenGLShaderRenderer::renderPlayerShoot(byte color, const Common::Point pos
identity(3, 3) = 1.0;
_triangleShader->use();
+ _triangleShader->setUniform("useStipple", false);
_triangleShader->setUniform("mvpMatrix", identity);
if (_renderMode == Common::kRenderCGA || _renderMode == Common::kRenderZX) {
@@ -281,30 +282,32 @@ void OpenGLShaderRenderer::polygonOffset(bool enabled) {
}
void OpenGLShaderRenderer::setStippleData(byte *data) {
+ _triangleShader->use();
if (!data)
return;
- //_variableStippleArray = data;
- //for (int i = 0; i < 128; i++)
- // _variableStippleArray[i] = data[(i / 16) % 4];
+ for (int i = 0; i < 8; i++) {
+ byte b = data[i];
+ for (int j = 0; j < 8; j++) {
+ //debug("%d", 8*i + j);
+ _variableStippleArray[8*i + j] = b & 0x1;
+ b = b >> 1;
+ }
+ }
+ _triangleShader->setUniform("stipple", 64, (const int*)&_variableStippleArray);
}
void OpenGLShaderRenderer::useStipple(bool enabled) {
- /*if (enabled) {
+ _triangleShader->use();
+ if (enabled) {
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(0.0f, -1.0f);
- glEnable(GL_POLYGON_STIPPLE);
- if (_renderMode == Common::kRenderZX ||
- _renderMode == Common::kRenderCPC ||
- _renderMode == Common::kRenderCGA)
- glPolygonStipple(_variableStippleArray);
- else
- glPolygonStipple(_defaultStippleArray);
+ _triangleShader->setUniform("useStipple", true);
} else {
glPolygonOffset(0, 0);
glDisable(GL_POLYGON_OFFSET_FILL);
- glDisable(GL_POLYGON_STIPPLE);
- }*/
+ _triangleShader->setUniform("useStipple", false);
+ }
}
void OpenGLShaderRenderer::useColor(uint8 r, uint8 g, uint8 b) {
@@ -350,7 +353,6 @@ Graphics::Surface *OpenGLShaderRenderer::getScreenshot() {
glReadPixels(screen.left, screen.top, screen.width(), screen.height(), GL_RGBA, GL_UNSIGNED_BYTE, s->getPixels());
flipVertical(s);
return s;
- return nullptr;
}
} // End of namespace Freescape
diff --git a/engines/freescape/gfx_opengl_shaders.h b/engines/freescape/gfx_opengl_shaders.h
index 1084a8fb1cb..ae3592a6587 100644
--- a/engines/freescape/gfx_opengl_shaders.h
+++ b/engines/freescape/gfx_opengl_shaders.h
@@ -58,17 +58,11 @@ public:
GLfloat y;
};
- /*Coord *_coords;
-
- void copyToCoordArray(uint idx, const Math::Vector2d &src) {
- assert(idx < kCoordsArraySize);
- _coords[idx].x = src.getValue(0); _coords[idx].y = src.getValue(1);
- }*/
-
OpenGL::Shader *_triangleShader;
OpenGL::Shader *_bitmapShader;
GLuint _triangleVBO;
GLuint _bitmapVBO;
+ int _variableStippleArray[64];
virtual void init() override;
virtual void clear(uint8 color) override;
diff --git a/engines/freescape/shaders/freescape_triangle.fragment b/engines/freescape/shaders/freescape_triangle.fragment
index aaf98049c01..8ab397df899 100644
--- a/engines/freescape/shaders/freescape_triangle.fragment
+++ b/engines/freescape/shaders/freescape_triangle.fragment
@@ -1,8 +1,17 @@
OUTPUT
+uniform UBOOL useStipple;
+uniform int stipple[64];
+
varying vec4 var_color;
void main()
{
- outColor = var_color;
+ if (UBOOL_TEST(useStipple)) {
+ ivec2 coord = ivec2(gl_FragCoord.xy - 0.5);
+ if (stipple[int(mod(coord.x, 8) + mod(coord.y, 8) * 8)] == 0)
+ discard;
+ }
+
+ outColor = var_color;
}
\ No newline at end of file
More information about the Scummvm-git-logs
mailing list