WINTERMUTE: WME3D: Restore original code for fog parameters handling

This commit is contained in:
Paweł Kołodziejski 2022-07-02 22:39:01 +02:00
parent 3ffbb3b030
commit 599097964f
No known key found for this signature in database
GPG Key ID: 0BDADC9E74440FF7
7 changed files with 36 additions and 44 deletions

View File

@ -100,7 +100,7 @@ public:
TShadowType getMaxShadowType(BaseObject *object) override;
bool getFogParams(FogParameters &fogParameters) override;
bool getFogParams(bool *fogEnabled, uint32 *fogColor, float *start, float *end) override;
#endif
bool getVersion(byte *verMajor, byte *verMinor, byte *extMajor, byte *extMinor) const override;

View File

@ -159,10 +159,10 @@ void AdScene::setDefaults() {
_ambientLightColor = 0x00000000;
_fogParameters._enabled = false;
_fogParameters._color = 0x00FFFFFF;
_fogParameters._start = 0.0f;
_fogParameters._end = 0.0f;
_fogEnabled = false;
_fogColor = 0x00FFFFFF;
_fogStart = 0.0f;
_fogEnd = 0.0f;
#endif
_viewport = nullptr;
@ -2252,10 +2252,10 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "EnableFog") == 0) {
stack->correctParams(3);
_fogParameters._enabled = true;
_fogParameters._color = stack->pop()->getInt();
_fogParameters._start = stack->pop()->getFloat();
_fogParameters._end = stack->pop()->getFloat();
_fogEnabled = true;
_fogColor = stack->pop()->getInt();
_fogStart = stack->pop()->getFloat();
_fogEnd = stack->pop()->getFloat();
stack->pushNULL();
return STATUS_OK;
@ -2266,7 +2266,7 @@ bool AdScene::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,
//////////////////////////////////////////////////////////////////////////
else if (strcmp(name, "DisableFog") == 0) {
stack->correctParams(0);
_fogParameters._enabled = false;
_fogEnabled = false;
stack->pushNULL();
return STATUS_OK;
@ -2984,13 +2984,13 @@ bool AdScene::persist(BasePersistenceManager *persistMgr) {
persistMgr->transferFloat(TMEMBER(_farPlane));
persistMgr->transferSint32(TMEMBER_INT(_maxShadowType));
persistMgr->transferUint32(TMEMBER(_ambientLightColor));
persistMgr->transferBool(TMEMBER(_fogParameters._enabled));
persistMgr->transferUint32(TMEMBER(_fogParameters._color));
persistMgr->transferFloat(TMEMBER(_fogParameters._start));
persistMgr->transferFloat(TMEMBER(_fogParameters._end));
persistMgr->transferBool(TMEMBER(_fogEnabled));
persistMgr->transferUint32(TMEMBER(_fogColor));
persistMgr->transferFloat(TMEMBER(_fogStart));
persistMgr->transferFloat(TMEMBER(_fogEnd));
} else {
_sceneGeometry = nullptr;
_fogParameters._enabled = false;
_fogEnabled = false;
}
#endif

View File

@ -67,7 +67,10 @@ public:
float _nearPlane;
float _farPlane;
FogParameters _fogParameters;
bool _fogEnabled;
uint32 _fogColor;
float _fogStart;
float _fogEnd;
#endif
bool afterLoad();

View File

@ -78,7 +78,7 @@ public:
#ifdef ENABLE_WME3D
virtual uint32 getAmbientLightColor();
virtual bool getFogParams(FogParameters &fogParameters);
virtual bool getFogParams(bool *fogEnabled, uint32 *fogColor, float *start, float *end);
#endif
virtual bool onScriptShutdown(ScScript *script);

View File

@ -505,16 +505,17 @@ bool BaseRenderOpenGL3D::setup3D(Camera3D *camera, bool force) {
glLightfv(GL_LIGHT0 + i, GL_SPOT_DIRECTION, _lightDirections[i].getData());
}
FogParameters fogParameters;
_gameRef->getFogParams(fogParameters);
bool fogEnabled;
uint32 fogColor;
float fogStart, fogEnd;
if (fogParameters._enabled) {
_gameRef->getFogParams(&fogEnabled, &fogColor, &fogStart, &fogEnd);
if (fogEnabled) {
glEnable(GL_FOG);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_START, fogParameters._start);
glFogf(GL_FOG_END, fogParameters._end);
glFogf(GL_FOG_START, fogStart);
glFogf(GL_FOG_END, fogEnd);
uint32 fogColor = fogParameters._color;
GLfloat color[4] = { RGBCOLGetR(fogColor) / 255.0f,
RGBCOLGetG(fogColor) / 255.0f,
RGBCOLGetB(fogColor) / 255.0f,

View File

@ -632,17 +632,18 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
_lastViewMatrix = viewMatrix;
}
FogParameters fogParameters;
bool fogEnabled;
uint32 fogColor;
float fogStart, fogEnd;
_gameRef->getFogParams(fogParameters);
if (fogParameters._enabled) {
_gameRef->getFogParams(&fogEnabled, &fogColor, &fogStart, &fogEnd);
if (fogEnabled) {
// TODO: Implement fog
GLfloat color[4];
color[0] = RGBCOLGetR(fogParameters._color) / 255.0f;
color[1] = RGBCOLGetG(fogParameters._color) / 255.0f;
color[2] = RGBCOLGetB(fogParameters._color) / 255.0f;
color[3] = RGBCOLGetA(fogParameters._color) / 255.0f;
color[0] = RGBCOLGetR(fogColor) / 255.0f;
color[1] = RGBCOLGetG(fogColor) / 255.0f;
color[2] = RGBCOLGetB(fogColor) / 255.0f;
color[3] = RGBCOLGetA(fogColor) / 255.0f;
debug(5, "BaseRenderOpenGL3DShader::setup3D fog not yet implemented! [%f %f %f %f]", color[0], color[1], color[2], color[3]);
} else {
// TODO: Disable fog in shader

View File

@ -231,19 +231,6 @@ enum TShadowType {
SHADOW_STENCIL = 3
};
#ifdef ENABLE_WME3D
struct FogParameters {
FogParameters() : _start(0.0f), _end(0.0f), _color(0x00000000), _enabled(false) {}
float _start;
float _end;
uint32 _color;
bool _enabled;
};
#endif
} // End of namespace Wintermute
#endif