[Scummvm-git-logs] scummvm master -> 1bc848ac08b9d2e02a2135b6f4822fbfef425b5c

aquadran noreply at scummvm.org
Sat Nov 2 18:11:51 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:
1bc848ac08 WINTERMUTE: Moved conversion depth range from DX to OGL to setProjectionTransform()


Commit: 1bc848ac08b9d2e02a2135b6f4822fbfef425b5c
    https://github.com/scummvm/scummvm/commit/1bc848ac08b9d2e02a2135b6f4822fbfef425b5c
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-11-02T19:11:46+01:00

Commit Message:
WINTERMUTE: Moved conversion depth range from DX to OGL to setProjectionTransform()

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/base_render_opengl3d_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 717808bafa0..dd03eb61128 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -531,11 +531,6 @@ bool BaseRenderOpenGL3D::setProjection() {
 	matProj.matrix._31 = -(offsetX + (mleft - mright) / 2 - modWidth) / viewportWidth * 2.0f;
 	matProj.matrix._32 =  (offsetY + (mtop - mbottom) / 2 - modHeight) / viewportHeight * 2.0f;
 
-	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
-	float range = 2.0f / (_farClipPlane - _nearClipPlane);
-	matProj.matrix._33 = range;
-	matProj.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
-
 	return setProjectionTransform(matProj);
 }
 
@@ -959,8 +954,15 @@ bool BaseRenderOpenGL3D::setViewTransform(const DXMatrix &transform) {
 // implements SetTransform() D3DTS_PROJECTION
 bool BaseRenderOpenGL3D::setProjectionTransform(const DXMatrix &transform) {
 	_projectionMatrix = transform;
+
+	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
+	DXMatrix finalMatrix = transform;
+	float range = 2.0f / (_farClipPlane - _nearClipPlane);
+	finalMatrix.matrix._33 = range;
+	finalMatrix.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
+
 	glMatrixMode(GL_PROJECTION);
-	glLoadMatrixf(transform);
+	glLoadMatrixf(finalMatrix);
 	return true;
 }
 
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 d3fa5708f1b..7857087e6d6 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -233,7 +233,7 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
 
 	Math::Matrix4 viewMatrix, projectionMatrix;
 	viewMatrix.setData(_viewMatrix);
-	projectionMatrix.setData(_projectionMatrix);
+	projectionMatrix.setData(_glProjectionMatrix);
 	_xmodelShader->use();
 	_xmodelShader->setUniform("viewMatrix", viewMatrix);
 	_xmodelShader->setUniform("projMatrix", projectionMatrix);
@@ -488,11 +488,6 @@ bool BaseRenderOpenGL3DShader::setProjection() {
 	matProj.matrix._31 = -(offsetX + (mleft - mright) / 2 - modWidth) / viewportWidth * 2.0f;
 	matProj.matrix._32 =  (offsetY + (mtop - mbottom) / 2 - modHeight) / viewportHeight * 2.0f;
 
-	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
-	float range = 2.0f / (_farClipPlane - _nearClipPlane);
-	matProj.matrix._33 = range;
-	matProj.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
-
 	return setProjectionTransform(matProj);
 }
 
@@ -819,6 +814,13 @@ bool BaseRenderOpenGL3DShader::setViewTransform(const DXMatrix &transform) {
 // implements SetTransform() D3DTS_PROJECTION
 bool BaseRenderOpenGL3DShader::setProjectionTransform(const DXMatrix &transform) {
 	_projectionMatrix = transform;
+
+	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
+	_glProjectionMatrix = transform;
+	float range = 2.0f / (_farClipPlane - _nearClipPlane);
+	_glProjectionMatrix.matrix._33 = range;
+	_glProjectionMatrix.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
+
 	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 21231dc8a66..21e2ce63fe8 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -121,6 +121,7 @@ public:
 
 private:
 	DXMatrix _projectionMatrix2d;
+	DXMatrix _glProjectionMatrix;
 
 	Common::Array<DXMatrix> _transformStack;
 




More information about the Scummvm-git-logs mailing list