[Scummvm-git-logs] scummvm master -> 558582ed2a3afaf16b60b208a41a4347a5bb2230
aquadran
noreply at scummvm.org
Wed Oct 16 22:43:16 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:
558582ed2a WINTERMUTE: Sync renderer code with original
Commit: 558582ed2a3afaf16b60b208a41a4347a5bb2230
https://github.com/scummvm/scummvm/commit/558582ed2a3afaf16b60b208a41a4347a5bb2230
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-17T00:43:12+02:00
Commit Message:
WINTERMUTE: Sync renderer code with original
Changed paths:
engines/wintermute/base/gfx/base_renderer3d.cpp
engines/wintermute/base/gfx/base_renderer3d.h
engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
diff --git a/engines/wintermute/base/gfx/base_renderer3d.cpp b/engines/wintermute/base/gfx/base_renderer3d.cpp
index cbf21ae7a36..96a8f3d5c17 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.cpp
+++ b/engines/wintermute/base/gfx/base_renderer3d.cpp
@@ -91,7 +91,7 @@ void BaseRenderer3D::project(const Math::Matrix4 &worldMatrix, const Math::Vecto
Math::Matrix4 tmp = worldMatrix;
tmp.transpose();
Math::Vector3d windowCoords;
- Math::Matrix4 modelMatrix = tmp * _lastViewMatrix;
+ Math::Matrix4 modelMatrix = tmp * _viewMatrix;
int viewport[4] = { _viewportRect.left, _height - _viewportRect.bottom, _viewportRect.width(), _viewportRect.height()};
Math::gluMathProject(point, modelMatrix.getData(), _projectionMatrix.getData(), viewport, windowCoords);
x = windowCoords.x();
@@ -104,7 +104,7 @@ Math::Ray BaseRenderer3D::rayIntoScene(int x, int y) {
-(((2.0f * y) / _viewportRect.height()) - 1) / _projectionMatrix(1, 1),
-1.0f);
- Math::Matrix4 m = _lastViewMatrix;
+ Math::Matrix4 m = _viewMatrix;
m.inverse();
m.transpose();
m.transform(&direction, false);
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index 816ba9dd734..185b4e8ffa8 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -129,18 +129,9 @@ public:
virtual bool setProjection2D() = 0;
- virtual void setWorldTransform(const Math::Matrix4 &transform) = 0;
-// void setWorldTransform(const Math::Matrix4 &transform) {
-// _worldMatrix = transform;
-// }
-
- void setViewTransform(const Math::Matrix4 &transform) {
- _viewMatrix = transform;
- }
-
- void setProjectionTransform(const Math::Matrix4 &transform) {
- _projectionMatrix = transform;
- }
+ virtual bool setWorldTransform(const Math::Matrix4 &transform) = 0;
+ virtual bool setViewTransform(const Math::Matrix4 &transform) = 0;
+ virtual bool setProjectionTransform(const Math::Matrix4 &transform) = 0;
void getWorldTransform(Math::Matrix4 &transform) {
transform = _worldMatrix;
@@ -173,7 +164,6 @@ public:
// ScummVM specific methods <--
protected:
- Math::Matrix4 _lastViewMatrix;
Math::Matrix4 _worldMatrix;
Math::Matrix4 _viewMatrix;
Math::Matrix4 _projectionMatrix;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 4c80e9fe150..cd29cde502c 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -191,7 +191,7 @@ void BaseRenderOpenGL3D::displayShadow(BaseObject *object, const Math::Vector3d
Math::Matrix4 worldTransformation = translation * rotation * scale;
worldTransformation.transpose();
- worldTransformation = worldTransformation * _lastViewMatrix;
+ worldTransformation = worldTransformation * _viewMatrix;
glLoadMatrixf(worldTransformation.getData());
@@ -214,7 +214,7 @@ void BaseRenderOpenGL3D::displayShadow(BaseObject *object, const Math::Vector3d
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDepthMask(GL_TRUE);
- glLoadMatrixf(_lastViewMatrix.getData());
+ glLoadMatrixf(_viewMatrix.getData());
}
bool BaseRenderOpenGL3D::usingStencilBuffer() {
@@ -373,12 +373,7 @@ bool BaseRenderOpenGL3D::setProjection() {
Math::Matrix4 m;
m.setData(matProj);
- _projectionMatrix = m;
- glMatrixMode(GL_PROJECTION);
- glLoadMatrixf(m.getData());
-
- glMatrixMode(GL_MODELVIEW);
- return true;
+ return setProjectionTransform(m);
}
bool BaseRenderOpenGL3D::setProjection2D() {
@@ -390,11 +385,28 @@ bool BaseRenderOpenGL3D::setProjection2D() {
return true;
}
-void BaseRenderOpenGL3D::setWorldTransform(const Math::Matrix4 &transform) {
+bool BaseRenderOpenGL3D::setWorldTransform(const Math::Matrix4 &transform) {
+ _worldMatrix = transform;
Math::Matrix4 tmp = transform;
tmp.transpose();
- Math::Matrix4 newModelViewTransform = tmp * _lastViewMatrix;
+ Math::Matrix4 newModelViewTransform = tmp * _viewMatrix;
glLoadMatrixf(newModelViewTransform.getData());
+ return true;
+}
+
+bool BaseRenderOpenGL3D::setViewTransform(const Math::Matrix4 &transform) {
+ _viewMatrix = transform;
+ glLoadMatrixf(transform.getData());
+ return true;
+}
+
+bool BaseRenderOpenGL3D::setProjectionTransform(const Math::Matrix4 &transform) {
+ _projectionMatrix = transform;
+ glMatrixMode(GL_PROJECTION);
+ glLoadMatrixf(transform.getData());
+
+ glMatrixMode(GL_MODELVIEW);
+ return true;
}
bool BaseRenderOpenGL3D::windowedBlt() {
@@ -525,7 +537,7 @@ bool BaseRenderOpenGL3D::setup3D(Camera3D *camera, bool force) {
cameraTranslate.setPosition(-_camera->_position);
cameraTranslate.transpose();
viewMatrix = cameraTranslate * viewMatrix;
- _lastViewMatrix = viewMatrix;
+ setViewTransform(viewMatrix);
_fov = _camera->_fov;
@@ -540,10 +552,7 @@ bool BaseRenderOpenGL3D::setup3D(Camera3D *camera, bool force) {
} else {
_farClipPlane = DEFAULT_FAR_PLANE;
}
-
- glLoadMatrixf(_lastViewMatrix.getData());
} else {
- glLoadMatrixf(_lastViewMatrix.getData());
_nearClipPlane = DEFAULT_NEAR_PLANE;
_farClipPlane = DEFAULT_FAR_PLANE;
}
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index e1562e285ef..9c1fd0cd116 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -85,7 +85,9 @@ public:
bool setProjection() override;
bool setProjection2D() override;
- void setWorldTransform(const Math::Matrix4 &transform) override;
+ bool setWorldTransform(const Math::Matrix4 &transform) override;
+ bool setViewTransform(const Math::Matrix4 &transform) override;
+ bool setProjectionTransform(const Math::Matrix4 &transform) override;
bool windowedBlt() override;
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 31c4097ee04..09c7ad508fb 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -314,7 +314,7 @@ void BaseRenderOpenGL3DShader::displayShadow(BaseObject *object, const Math::Vec
_flatShadowMaskShader->use();
_flatShadowMaskShader->setUniform("lightViewMatrix", lightViewMatrix);
_flatShadowMaskShader->setUniform("worldMatrix", shadowPosition);
- _flatShadowMaskShader->setUniform("viewMatrix", _lastViewMatrix);
+ _flatShadowMaskShader->setUniform("viewMatrix", _viewMatrix);
_flatShadowMaskShader->setUniform("projMatrix", _projectionMatrix);
_flatShadowMaskShader->setUniform("shadowColor", _flatShadowColor);
@@ -470,8 +470,7 @@ bool BaseRenderOpenGL3DShader::setProjection() {
Math::Matrix4 m;
m.setData(matProj);
- _projectionMatrix = m;
- return true;
+ return setProjectionTransform(m);
}
bool BaseRenderOpenGL3DShader::setProjection2D() {
@@ -493,11 +492,11 @@ bool BaseRenderOpenGL3DShader::setProjection2D() {
return true;
}
-void BaseRenderOpenGL3DShader::setWorldTransform(const Math::Matrix4 &transform) {
+bool BaseRenderOpenGL3DShader::setWorldTransform(const Math::Matrix4 &transform) {
Math::Matrix4 tmp = transform;
tmp.transpose();
- Math::Matrix4 newInvertedTranspose = tmp * _lastViewMatrix;
+ Math::Matrix4 newInvertedTranspose = tmp * _viewMatrix;
newInvertedTranspose.inverse();
newInvertedTranspose.transpose();
@@ -507,6 +506,18 @@ void BaseRenderOpenGL3DShader::setWorldTransform(const Math::Matrix4 &transform)
_shadowVolumeShader->use();
_shadowVolumeShader->setUniform("modelMatrix", tmp);
+
+ return true;
+}
+
+bool BaseRenderOpenGL3DShader::setViewTransform(const Math::Matrix4 &transform) {
+ _viewMatrix = transform;
+ return true;
+}
+
+bool BaseRenderOpenGL3DShader::setProjectionTransform(const Math::Matrix4 &transform) {
+ _projectionMatrix = transform;
+ return true;
}
bool BaseRenderOpenGL3DShader::windowedBlt() {
@@ -655,7 +666,7 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
cameraTranslate.setPosition(-_camera->_position);
cameraTranslate.transpose();
viewMatrix = cameraTranslate * viewMatrix;
- _lastViewMatrix = viewMatrix;
+ setViewTransform(viewMatrix);
_fov = _camera->_fov;
@@ -696,17 +707,17 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
}
_xmodelShader->use();
- _xmodelShader->setUniform("viewMatrix", _lastViewMatrix);
+ _xmodelShader->setUniform("viewMatrix", _viewMatrix);
_xmodelShader->setUniform("projMatrix", _projectionMatrix);
// this is 8 / 255, since 8 is the value used by wme (as a DWORD)
_xmodelShader->setUniform1f("alphaRef", 0.031f);
_geometryShader->use();
- _geometryShader->setUniform("viewMatrix", _lastViewMatrix);
+ _geometryShader->setUniform("viewMatrix", _viewMatrix);
_geometryShader->setUniform("projMatrix", _projectionMatrix);
_shadowVolumeShader->use();
- _shadowVolumeShader->setUniform("viewMatrix", _lastViewMatrix);
+ _shadowVolumeShader->setUniform("viewMatrix", _viewMatrix);
_shadowVolumeShader->setUniform("projMatrix", _projectionMatrix);
return true;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
index e0488cdcd91..4141aa7488b 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -74,7 +74,9 @@ public:
bool setProjection() override;
bool setProjection2D() override;
- void setWorldTransform(const Math::Matrix4 &transform) override;
+ bool setWorldTransform(const Math::Matrix4 &transform) override;
+ bool setViewTransform(const Math::Matrix4 &transform) override;
+ bool setProjectionTransform(const Math::Matrix4 &transform) override;
bool windowedBlt() override;
More information about the Scummvm-git-logs
mailing list