[Scummvm-git-logs] scummvm master -> 11b68bda92dda6613d1d484846444c8d10595be2
aquadran
noreply at scummvm.org
Thu Oct 24 13:56:06 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:
11b68bda92 WINTERMUTE: Synced api in renderer with original code
Commit: 11b68bda92dda6613d1d484846444c8d10595be2
https://github.com/scummvm/scummvm/commit/11b68bda92dda6613d1d484846444c8d10595be2
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-10-24T15:55:59+02:00
Commit Message:
WINTERMUTE: Synced api in renderer with original code
Changed paths:
engines/wintermute/ad/ad_scene.cpp
engines/wintermute/ad/ad_scene_geometry.cpp
engines/wintermute/base/gfx/3dlight.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/ad/ad_scene.cpp b/engines/wintermute/ad/ad_scene.cpp
index 5adf70e4866..a30335293fb 100644
--- a/engines/wintermute/ad/ad_scene.cpp
+++ b/engines/wintermute/ad/ad_scene.cpp
@@ -2040,7 +2040,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
script->runtimeError("Scene.EnableLight: Scene doesn't contain any geometry");
stack->pushBool(false);
} else {
- bool res = _geom->enableLight(lightName);
+ bool res = _geom->enableLight(lightName, true);
stack->pushBool(res);
}
diff --git a/engines/wintermute/ad/ad_scene_geometry.cpp b/engines/wintermute/ad/ad_scene_geometry.cpp
index 7be393daf55..c2df93b3acd 100644
--- a/engines/wintermute/ad/ad_scene_geometry.cpp
+++ b/engines/wintermute/ad/ad_scene_geometry.cpp
@@ -856,11 +856,12 @@ bool AdSceneGeometry::initLoop() {
//////////////////////////////////////////////////////////////////////////
bool AdSceneGeometry::createLights() {
// disable all lights
- for (int i = 0; i < _gameRef->_renderer3D->getMaxActiveLights(); i++) {
- _gameRef->_renderer3D->disableLight(i);
+ int maxLights = _gameRef->_renderer3D->getMaxActiveLights();
+ for (int i = 0; i < maxLights; i++) {
+ _gameRef->_renderer3D->lightEnable(i, false);
}
- int lightCount = MIN(static_cast<int>(_lights.size()), _gameRef->_renderer3D->getMaxActiveLights());
+ int lightCount = MIN(static_cast<int>(_lights.size()), maxLights);
for (int i = 0; i < lightCount; i++) {
_lights[i]->setLight(i);
@@ -872,6 +873,7 @@ bool AdSceneGeometry::createLights() {
//////////////////////////////////////////////////////////////////////////
bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLights) {
const int maxLightCount = 100;
+ int maxLights = _gameRef->_renderer3D->getMaxActiveLights();
int activeLightCount = 0;
for (uint i = 0; i < _lights.size(); i++) {
@@ -881,13 +883,13 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
}
}
- if (activeLightCount <= _gameRef->_renderer3D->getMaxActiveLights()) {
+ if (activeLightCount <= maxLights) {
for (uint i = 0; i < _lights.size(); i++) {
_lights[i]->_isAvailable = true;
}
} else {
if (!_maxLightsWarning) {
- _gameRef->LOG(0, "Warning: Using more lights than the hardware supports (%d)", _gameRef->_renderer3D->getMaxActiveLights());
+ _gameRef->LOG(0, "Warning: Using more lights than the hardware supports (%d)", maxLights);
_maxLightsWarning = true;
}
@@ -918,20 +920,20 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
qsort(activeLights.begin(), activeLights.size(), sizeof(Light3D *), AdSceneGeometry::compareLights);
for (uint i = 0; i < activeLights.size(); i++) {
- activeLights[i]->_isAvailable = static_cast<int>(i) < _gameRef->_renderer3D->getMaxActiveLights();
+ activeLights[i]->_isAvailable = static_cast<int>(i) < maxLights;
}
}
}
// light all available lights
for (int i = 0; i < maxLightCount; i++) {
- _gameRef->_renderer3D->disableLight(i);
+ _gameRef->_renderer3D->lightEnable(i, false);
}
activeLightCount = 0;
for (uint i = 0; i < _lights.size(); i++) {
- if (activeLightCount >= _gameRef->_renderer3D->getMaxActiveLights()) {
+ if (activeLightCount >= maxLights) {
break;
}
@@ -952,7 +954,7 @@ bool AdSceneGeometry::enableLights(DXVector3 point, BaseArray<char *> &ignoreLig
if (_lights[i]->_isAvailable) {
if (_lights[i]->_active) {
- _gameRef->_renderer3D->enableLight(i);
+ _gameRef->_renderer3D->lightEnable(i, true);
++activeLightCount;
}
}
diff --git a/engines/wintermute/base/gfx/3dlight.cpp b/engines/wintermute/base/gfx/3dlight.cpp
index 277a181a0e8..758132d098f 100644
--- a/engines/wintermute/base/gfx/3dlight.cpp
+++ b/engines/wintermute/base/gfx/3dlight.cpp
@@ -66,7 +66,7 @@ bool Light3D::setLight(int index) {
_gameRef->_renderer3D->setLightParameters(index, _position, _target - _position, diffuse, _isSpotlight);
if (_active) {
- _gameRef->_renderer3D->enableLight(index);
+ _gameRef->_renderer3D->lightEnable(index, true);
}
return true;
diff --git a/engines/wintermute/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index e79afb2111a..61aa59ca0fc 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -117,8 +117,7 @@ public:
// ScummVM specific methods -->
- virtual void enableLight(int index) = 0;
- virtual void disableLight(int index) = 0;
+ virtual void lightEnable(int index, bool enable) = 0;
virtual void setLightParameters(int index, const DXVector3 &position, const DXVector3 &direction,
const DXVector4 &diffuse, bool spotlight) = 0;
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index 75abbafa233..d6984f34613 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -109,12 +109,11 @@ int BaseRenderOpenGL3D::getMaxActiveLights() {
return maxLightCount;
}
-void BaseRenderOpenGL3D::enableLight(int index) {
- glEnable(GL_LIGHT0 + index);
-}
-
-void BaseRenderOpenGL3D::disableLight(int index) {
- glDisable(GL_LIGHT0 + index);
+void BaseRenderOpenGL3D::lightEnable(int index, bool enable) {
+ if (enable)
+ glEnable(GL_LIGHT0 + index);
+ else
+ glDisable(GL_LIGHT0 + index);
}
void BaseRenderOpenGL3D::setLightParameters(int index, const DXVector3 &position, const DXVector3 &direction, const DXVector4 &diffuse, bool spotlight) {
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index d753de851e3..113dec91f5f 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -61,8 +61,7 @@ public:
void setAmbientLightRenderState() override;
int getMaxActiveLights() override;
- void enableLight(int index) override;
- void disableLight(int index) override;
+ void lightEnable(int index, bool enable) override;
void setLightParameters(int index, const DXVector3 &position, const DXVector3 &direction, const DXVector4 &diffuse, bool spotlight) override;
void enableCulling() 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 95de6b05b9a..acedc66317c 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -119,16 +119,13 @@ int BaseRenderOpenGL3DShader::getMaxActiveLights() {
return 8;
}
-void BaseRenderOpenGL3DShader::enableLight(int index) {
+void BaseRenderOpenGL3DShader::lightEnable(int index, bool enable) {
_xmodelShader->use();
Common::String uniform = Common::String::format("lights[%i].enabled", index);
- _xmodelShader->setUniform1f(uniform.c_str(), 1.0f);
-}
-
-void BaseRenderOpenGL3DShader::disableLight(int index) {
- _xmodelShader->use();
- Common::String uniform = Common::String::format("lights[%i].enabled", index);
- _xmodelShader->setUniform1f(uniform.c_str(), -1.0f);
+ if (enable)
+ _xmodelShader->setUniform1f(uniform.c_str(), 1.0f);
+ else
+ _xmodelShader->setUniform1f(uniform.c_str(), -1.0f);
}
void BaseRenderOpenGL3DShader::setLightParameters(int index, const DXVector3 &position,
@@ -587,7 +584,7 @@ bool BaseRenderOpenGL3DShader::initRenderer(int width, int height, bool windowed
for (int i = 0; i < getMaxActiveLights(); ++i) {
setLightParameters(i, DXVector3(0, 0, 0), DXVector3(0, 0, 0), DXVector4(0, 0, 0, 0), false);
- disableLight(i);
+ lightEnable(i, false);
}
_windowed = !ConfMan.getBool("fullscreen");
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 93a4566106f..c45bb95b3c1 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -51,8 +51,7 @@ public:
void setAmbientLightRenderState() override;
int getMaxActiveLights() override;
- void enableLight(int index) override;
- void disableLight(int index) override;
+ void lightEnable(int index, bool enable) override;
void setLightParameters(int index, const DXVector3 &position, const DXVector3 &direction, const DXVector4 &diffuse, bool spotlight) override;
void enableCulling() override;
More information about the Scummvm-git-logs
mailing list