[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