[Scummvm-git-logs] scummvm master -> 5a90d31b9849c0739eec9df341b66dc5b2cb5780
aquadran
noreply at scummvm.org
Wed Nov 20 20:52:36 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:
5a90d31b98 WINTERMUTE: Synced shadows path with original code
Commit: 5a90d31b9849c0739eec9df341b66dc5b2cb5780
https://github.com/scummvm/scummvm/commit/5a90d31b9849c0739eec9df341b66dc5b2cb5780
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-11-20T21:52:31+01:00
Commit Message:
WINTERMUTE: Synced shadows path with original code
Changed paths:
engines/wintermute/ad/ad_actor_3dx.cpp
engines/wintermute/base/base_game.cpp
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/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index c88f55753ff..8b6a275658f 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -393,7 +393,6 @@ bool AdActor3DX::display() {
}
TShadowType shadowType = _gameRef->getMaxShadowType(this);
-
if (shadowType == SHADOW_STENCIL) {
displayShadowVolume();
} else if (shadowType > SHADOW_NONE) {
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 252045472b1..dedee46da9e 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -4675,10 +4675,10 @@ bool BaseGame::setMaxShadowType(TShadowType maxShadowType) {
//////////////////////////////////////////////////////////////////////////
TShadowType BaseGame::getMaxShadowType(BaseObject *object) {
- if (object) {
- return MIN(_maxShadowType, object->_shadowType);
- } else {
+ if (!object) {
return _maxShadowType;
+ } else {
+ return MIN(_maxShadowType, object->_shadowType);
}
}
#endif
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 86bf7678a3b..e4b64ffcc93 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -677,16 +677,29 @@ BaseImage *BaseRenderOpenGL3D::takeScreenshot() {
}
bool BaseRenderOpenGL3D::enableShadows() {
- warning("BaseRenderOpenGL3D::enableShadows not implemented yet");
+ _gameRef->_supportsRealTimeShadows = false;
return true;
}
bool BaseRenderOpenGL3D::disableShadows() {
- warning("BaseRenderOpenGL3D::disableShadows not implemented yet");
return true;
}
void BaseRenderOpenGL3D::displayShadow(BaseObject *object, const DXVector3 *lightPos, bool lightPosRelative) {
+ if (!_ready || !object || !lightPos)
+ return;
+
+ // redirect simple shadow if needed
+ bool simpleShadow = _gameRef->getMaxShadowType(object) <= SHADOW_SIMPLE;
+ if (!_gameRef->_supportsRealTimeShadows)
+ simpleShadow = true;
+ if (simpleShadow)
+ return renderSimpleShadow(object);
+
+ // TODO: to be implemented
+}
+
+void BaseRenderOpenGL3D::renderSimpleShadow(BaseObject *object) {
BaseSurface *shadowImage;
if (object->_shadowImage) {
shadowImage = object->_shadowImage;
@@ -698,7 +711,6 @@ void BaseRenderOpenGL3D::displayShadow(BaseObject *object, const DXVector3 *ligh
return;
}
-
DXMatrix scale, trans, rot, finalm;
DXMatrixScaling(&scale, object->_shadowSize * object->_scale3D, 1.0f, object->_shadowSize * object->_scale3D);
DXMatrixRotationY(&rot, degToRad(object->_angle));
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index 09dff73150c..c17e1295bc5 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -152,6 +152,8 @@ public:
void setPostfilter(PostFilter postFilter) override { _postFilterMode = postFilter; };
private:
+ void renderSimpleShadow(BaseObject *object);
+
SimpleShadowVertex _simpleShadow[4]{};
Common::Array<DXVector4> _lightPositions;
Common::Array<DXVector3> _lightDirections;
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 cd4c36b36d9..74e1896a1bb 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -651,20 +651,32 @@ BaseImage *BaseRenderOpenGL3DShader::takeScreenshot() {
}
bool BaseRenderOpenGL3DShader::enableShadows() {
- warning("BaseRenderOpenGL3DShader::disableShadows not implemented yet");
+ _gameRef->_supportsRealTimeShadows = false;
return true;
}
bool BaseRenderOpenGL3DShader::disableShadows() {
- warning("BaseRenderOpenGL3DShader::disableShadows not implemented yet");
return true;
}
void BaseRenderOpenGL3DShader::displayShadow(BaseObject *object, const DXVector3 *lightPos, bool lightPosRelative) {
+ if (!_ready || !object || !lightPos)
+ return;
+
+ // redirect simple shadow if needed
+ bool simpleShadow = _gameRef->getMaxShadowType(object) <= SHADOW_SIMPLE;
+ if (!_gameRef->_supportsRealTimeShadows)
+ simpleShadow = true;
+ if (simpleShadow)
+ return renderSimpleShadow(object);
+
// TODO: to be implemented
return;
}
+void BaseRenderOpenGL3DShader::renderSimpleShadow(BaseObject *object) {
+ // TODO: to be implemented
+}
void BaseRenderOpenGL3DShader::setSpriteBlendMode(Graphics::TSpriteBlendMode blendMode, bool forceChange) {
if (blendMode == _blendMode && !forceChange)
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 14061b35c0f..dbe28bbeef8 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -143,6 +143,8 @@ public:
OpenGL::Shader *_shadowMaskShader;
private:
+ void renderSimpleShadow(BaseObject *object);
+
DXMatrix _glProjectionMatrix;
float _alphaRef;
More information about the Scummvm-git-logs
mailing list