[Scummvm-git-logs] scummvm master -> f887af81fada66cafa2f1b7793006fc43a3385c3

aquadran noreply at scummvm.org
Sat Nov 2 17:58:10 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:
f887af81fa WINTERMUTE: Corrected conversion depth range from DX to OGL in perspective matrix


Commit: f887af81fada66cafa2f1b7793006fc43a3385c3
    https://github.com/scummvm/scummvm/commit/f887af81fada66cafa2f1b7793006fc43a3385c3
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-11-02T18:58:04+01:00

Commit Message:
WINTERMUTE: Corrected conversion depth range from DX to OGL in perspective matrix

Changed paths:
    engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp


diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index fbb4688031c..717808bafa0 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -532,8 +532,9 @@ bool BaseRenderOpenGL3D::setProjection() {
 	matProj.matrix._32 =  (offsetY + (mtop - mbottom) / 2 - modHeight) / viewportHeight * 2.0f;
 
 	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
-	matProj.matrix._33 = (matProj.matrix._33 * 2.0f) - 1.0f;
-	matProj.matrix._43 *= 2.0f;
+	float range = 2.0f / (_farClipPlane - _nearClipPlane);
+	matProj.matrix._33 = range;
+	matProj.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
 
 	return setProjectionTransform(matProj);
 }
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 290c9ae58b7..d3fa5708f1b 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -489,8 +489,9 @@ bool BaseRenderOpenGL3DShader::setProjection() {
 	matProj.matrix._32 =  (offsetY + (mtop - mbottom) / 2 - modHeight) / viewportHeight * 2.0f;
 
 	// convert DX [0, 1] depth range to OpenGL [-1, 1] depth range.
-	matProj.matrix._33 = (matProj.matrix._33 * 2.0f) - 1.0f;
-	matProj.matrix._43 *= 2.0f;
+	float range = 2.0f / (_farClipPlane - _nearClipPlane);
+	matProj.matrix._33 = range;
+	matProj.matrix._43 = -(_nearClipPlane + _farClipPlane) * range / 2;
 
 	return setProjectionTransform(matProj);
 }




More information about the Scummvm-git-logs mailing list