[Scummvm-git-logs] scummvm master -> 3ff5054f0276af2a17e69392374dac95d09330d8
aquadran
noreply at scummvm.org
Fri May 23 08:06:32 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
3ff5054f02 WINTERMUTE: Implemented debug scene draw for shader renderer
Commit: 3ff5054f0276af2a17e69392374dac95d09330d8
https://github.com/scummvm/scummvm/commit/3ff5054f0276af2a17e69392374dac95d09330d8
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2025-05-23T10:06:27+02:00
Commit Message:
WINTERMUTE: Implemented debug scene draw for shader renderer
Changed paths:
engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 7fad6916fc1..7b106705813 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -825,59 +825,6 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
}
}
- // render lights lines
- for (uint i = 0; i < lights.size(); ++i) {
- if (lights[i]->_active) {
- LineVertex vertices[12];
- vertices[0].x = lights[i]->_pos._x;
- vertices[0].y = lights[i]->_pos._y;
- vertices[0].z = lights[i]->_pos._z;
- vertices[1].x = lights[i]->_pos._x + 1000.0f;
- vertices[1].y = lights[i]->_pos._y;
- vertices[1].z = lights[i]->_pos._z;
- vertices[2].x = lights[i]->_pos._x;
- vertices[2].y = lights[i]->_pos._y;
- vertices[2].z = lights[i]->_pos._z;
- vertices[3].x = lights[i]->_pos._x;
- vertices[3].y = lights[i]->_pos._y + 1000.0f;
- vertices[3].z = lights[i]->_pos._z;
- vertices[4].x = lights[i]->_pos._x;
- vertices[4].y = lights[i]->_pos._y;
- vertices[4].z = lights[i]->_pos._z;
- vertices[5].x = lights[i]->_pos._x;
- vertices[5].y = lights[i]->_pos._y;
- vertices[5].z = lights[i]->_pos._z + 1000.0f;
- vertices[6].x = lights[i]->_pos._x;
- vertices[6].y = lights[i]->_pos._y;
- vertices[6].z = lights[i]->_pos._z;
- vertices[7].x = lights[i]->_pos._x - 1000.0f;
- vertices[7].y = lights[i]->_pos._y;
- vertices[7].z = lights[i]->_pos._z;
- vertices[8].x = lights[i]->_pos._x;
- vertices[8].y = lights[i]->_pos._y;
- vertices[8].z = lights[i]->_pos._z;
- vertices[9].x = lights[i]->_pos._x;
- vertices[9].y = lights[i]->_pos._y - 1000.0f;
- vertices[9].z = lights[i]->_pos._z;
- vertices[10].x = lights[i]->_pos._x;
- vertices[10].y = lights[i]->_pos._y;
- vertices[10].z = lights[i]->_pos._z;
- vertices[11].x = lights[i]->_pos._x;
- vertices[11].y = lights[i]->_pos._y;
- vertices[11].z = lights[i]->_pos._z - 1000.0f;
-
- glColor3f(1.0f, 1.0f, 0.0f);
-
- glEnableClientState(GL_VERTEX_ARRAY);
-
- glVertexPointer(3, GL_FLOAT, sizeof(LineVertex), &vertices[0].x);
-
- glDrawArrays(GL_LINES, 0, 12);
-
- glDisableClientState(GL_VERTEX_ARRAY);
- }
- }
-
// render waypoints
AdScene *scene = ((AdGame *)_gameRef)->_scene;
AdSceneGeometry *geom = scene->_geom;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
index 8bc746b8869..df6b562cc84 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -20,11 +20,16 @@
*/
#include "engines/wintermute/ad/ad_block.h"
+#include "engines/wintermute/ad/ad_game.h"
#include "engines/wintermute/ad/ad_generic.h"
+#include "engines/wintermute/ad/ad_scene.h"
+#include "engines/wintermute/ad/ad_scene_geometry.h"
#include "engines/wintermute/ad/ad_walkplane.h"
+#include "engines/wintermute/ad/ad_waypoint_group3d.h"
#include "engines/wintermute/base/base_game.h"
#include "engines/wintermute/base/gfx/base_image.h"
#include "engines/wintermute/base/gfx/3dcamera.h"
+#include "engines/wintermute/base/gfx/3dlight.h"
#include "graphics/opengl/system_headers.h"
@@ -97,7 +102,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
glGenBuffers(1, &_spriteVBO);
glBindBuffer(GL_ARRAY_BUFFER, _spriteVBO);
- glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(SpriteVertex), nullptr, GL_DYNAMIC_DRAW);
+ glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(SpriteVertex), nullptr, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
static const char *spriteAttributes[] = { "position", "texcoord", "color", nullptr };
@@ -145,7 +150,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
glGenBuffers(1, &_fadeVBO);
glBindBuffer(GL_ARRAY_BUFFER, _fadeVBO);
- glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(LineVertex), nullptr, GL_DYNAMIC_DRAW);
+ glBufferData(GL_ARRAY_BUFFER, 4 * sizeof(LineVertex), nullptr, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
static const char *fadeAttributes[] = { "position", nullptr };
@@ -154,7 +159,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
glGenBuffers(1, &_lineVBO);
glBindBuffer(GL_ARRAY_BUFFER, _lineVBO);
- glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(LineVertex), nullptr, GL_DYNAMIC_DRAW);
+ glBufferData(GL_ARRAY_BUFFER, 2 * sizeof(LineVertex), nullptr, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
static const char *lineAttributes[] = { "position", nullptr };
@@ -289,13 +294,13 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
Math::Matrix4 viewMatrix, projectionMatrix;
viewMatrix.setData(_viewMatrix);
projectionMatrix.setData(_glProjectionMatrix);
+
_xmodelShader->use();
_xmodelShader->setUniform("viewMatrix", viewMatrix);
_xmodelShader->setUniform("projMatrix", projectionMatrix);
_xmodelShader->setUniform1f("alphaRef", _alphaRef);
_xmodelShader->setUniform("alphaTest", true);
-
_geometryShader->use();
_geometryShader->setUniform("viewMatrix", viewMatrix);
_geometryShader->setUniform("projMatrix", projectionMatrix);
@@ -853,7 +858,62 @@ void BaseRenderOpenGL3DShader::setLightParameters(int index, const DXVector3 &po
// backend layer AdSceneGeometry::Render
void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks,
const BaseArray<AdGeneric *> &generics, const BaseArray<Light3D *> &lights, Camera3D *camera) {
- // don't render scene geometry, as OpenGL ES 2 has no wireframe rendering and we don't have a shader alternative yet
+ DXMatrix matIdentity;
+ DXMatrixIdentity(&matIdentity);
+
+ if (camera)
+ _gameRef->_renderer3D->setup3D(camera, true);
+
+ setWorldTransform(matIdentity);
+
+ glDisable(GL_DEPTH_TEST);
+ glFrontFace(GL_CW); // WME DX have CCW
+ glEnable(GL_BLEND);
+ glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
+
+ for (uint i = 0; i < planes.size(); i++) {
+ if (planes[i]->_active) {
+ planes[i]->_mesh->render();
+ }
+ }
+
+ // render blocks
+ for (uint i = 0; i < blocks.size(); i++) {
+ if (blocks[i]->_active) {
+ blocks[i]->_mesh->render();
+ }
+ }
+
+ // render generic objects
+ for (uint i = 0; i < generics.size(); i++) {
+ if (generics[i]->_active) {
+ generics[i]->_mesh->render();
+ }
+ }
+
+ // render waypoints
+ AdScene *scene = ((AdGame *)_gameRef)->_scene;
+ AdSceneGeometry *geom = scene->_geom;
+ if (geom && geom->_wptMarker) {
+ DXMatrix viewMat, projMat, worldMat;
+ DXVector3 vec2d(0.0f, 0.0f, 0.0f);
+
+ getViewTransform(&viewMat);
+ getProjectionTransform(&projMat);
+ DXMatrixIdentity(&worldMat);
+
+ DXViewport vport = getViewPort();
+
+ setup2D();
+
+ for (uint i = 0; i < geom->_waypointGroups.size(); i++) {
+ for (uint j = 0; j < geom->_waypointGroups[i]->_points.size(); j++) {
+ DXVec3Project(&vec2d, geom->_waypointGroups[i]->_points[j], &vport, &projMat, &viewMat, &worldMat);
+ geom->_wptMarker->display(vec2d._x + scene->getOffsetLeft() - _drawOffsetX, vec2d._y + scene->getOffsetTop() - _drawOffsetY);
+ }
+ }
+ }
}
// backend layer 3DShadowVolume::Render()
@@ -967,6 +1027,9 @@ bool BaseRenderOpenGL3DShader::setWorldTransform(const DXMatrix &transform) {
_xmodelShader->setUniform("modelMatrix", modelMatrix);
_xmodelShader->setUniform("normalMatrix", normalMatrix);
+ _geometryShader->use();
+ _geometryShader->setUniform("modelMatrix", modelMatrix);
+
_simpleShadowShader->use();
_simpleShadowShader->setUniform("modelMatrix", modelMatrix);
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
index dd58112d873..2a65e90ed07 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.cpp
@@ -34,12 +34,10 @@ Mesh3DSOpenGLShader::Mesh3DSOpenGLShader(BaseGame *inGame, OpenGL::Shader *shade
_vertexData = nullptr;
glGenBuffers(1, &_vertexBuffer);
- glGenBuffers(1, &_indexBuffer);
}
Mesh3DSOpenGLShader::~Mesh3DSOpenGLShader() {
glDeleteBuffers(1, &_vertexBuffer);
- glDeleteBuffers(1, &_indexBuffer);
}
void Mesh3DSOpenGLShader::fillVertexBuffer() {
@@ -57,8 +55,6 @@ void Mesh3DSOpenGLShader::render() {
_shader->enableVertexAttribute("position", _vertexBuffer, 3, GL_FLOAT, false, sizeof(Mesh3DSVertex), 0);
_shader->enableVertexAttribute("color", _vertexBuffer, 4, GL_FLOAT, false, sizeof(Mesh3DSVertex), 24);
- _shader->setUniform("useTexture", false);
-
_shader->use(true);
glDrawArrays(GL_TRIANGLES, 0, _vertexCount);
diff --git a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
index 420619f9836..079eb002dae 100644
--- a/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
+++ b/engines/wintermute/base/gfx/opengl/mesh3ds_opengl_shader.h
@@ -41,7 +41,6 @@ private:
Mesh3DSVertex *_vertexData;
uint16 _vertexCount;
GLuint _vertexBuffer;
- GLuint _indexBuffer;
OpenGL::Shader *_shader;
};
More information about the Scummvm-git-logs
mailing list