[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