[Scummvm-git-logs] scummvm master -> bfa7d4866d0f29725891dfc710261d8f1180f6dc
aquadran
noreply at scummvm.org
Sun Nov 3 13:17:24 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:
bfa7d4866d WINTERMUTE: Sync both renderers
Commit: bfa7d4866d0f29725891dfc710261d8f1180f6dc
https://github.com/scummvm/scummvm/commit/bfa7d4866d0f29725891dfc710261d8f1180f6dc
Author: PaweÅ KoÅodziejski (aquadran at gmail.com)
Date: 2024-11-03T14:17:13+01:00
Commit Message:
WINTERMUTE: Sync both renderers
Changed paths:
engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
engines/wintermute/base/gfx/opengl/shadow_volume_opengl_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 bf477765b71..109e092f97e 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -137,7 +137,7 @@ bool BaseRenderOpenGL3D::setup2D(bool force) {
glAlphaFunc(GL_GEQUAL, 0.0f);
glPolygonMode(GL_FRONT, GL_FILL);
- glFrontFace(GL_CCW); // DX have CW
+ glFrontFace(GL_CCW); // WME DX have CW
glEnable(GL_CULL_FACE);
glDisable(GL_STENCIL_TEST);
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 b43ab6c296d..1333ce66e11 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -48,6 +48,7 @@ BaseRenderer3D *makeOpenGL3DShaderRenderer(BaseGame *inGame) {
}
BaseRenderOpenGL3DShader::BaseRenderOpenGL3DShader(BaseGame *inGame) : BaseRenderer3D(inGame) {
+ setDefaultAmbientLightColor();
_spriteVBO = 0;
}
@@ -150,15 +151,18 @@ bool BaseRenderOpenGL3DShader::setup2D(bool force) {
if (_state != RSTATE_2D || force) {
_state = RSTATE_2D;
- // some states are still missing here
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glDisable(GL_DEPTH_TEST);
- glDisable(GL_STENCIL_TEST);
- glEnable(GL_CULL_FACE);
- glFrontFace(GL_CCW); // WME DX have CW
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ setSpriteBlendMode(Graphics::BLEND_NORMAL);
+
+ glPolygonMode(GL_FRONT, GL_FILL);
+ glFrontFace(GL_CCW); // WME DX have CW
+ glEnable(GL_CULL_FACE);
+ glDisable(GL_STENCIL_TEST);
}
return true;
@@ -168,11 +172,18 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
if (_state != RSTATE_3D || force) {
_state = RSTATE_3D;
+ glEnable(GL_NORMALIZE);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+
glEnable(GL_DEPTH_TEST);
- glEnable(GL_BLEND);
setAmbientLightRenderState();
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
+
if (camera)
_camera = camera;
if (_camera) {
@@ -239,12 +250,17 @@ bool BaseRenderOpenGL3DShader::setup3D(Camera3D *camera, bool force) {
}
void BaseRenderOpenGL3DShader::setAmbientLightRenderState() {
- byte a = RGBCOLGetA(_ambientLightColor);
- byte r = RGBCOLGetR(_ambientLightColor);
- byte g = RGBCOLGetG(_ambientLightColor);
- byte b = RGBCOLGetB(_ambientLightColor);
-
- if (!_ambientLightOverride) {
+ byte a = 0;
+ byte r = 0;
+ byte g = 0;
+ byte b = 0;
+
+ if (_ambientLightOverride) {
+ a = RGBCOLGetA(_ambientLightColor);
+ r = RGBCOLGetR(_ambientLightColor);
+ g = RGBCOLGetG(_ambientLightColor);
+ b = RGBCOLGetB(_ambientLightColor);
+ } else {
uint32 color = _gameRef->getAmbientLightColor();
a = RGBCOLGetA(color);
@@ -259,20 +275,24 @@ void BaseRenderOpenGL3DShader::setAmbientLightRenderState() {
value.z() = b / 255.0f;
value.w() = a / 255.0f;
- _xmodelShader->use();
- _xmodelShader->setUniform("ambientLight", value);
+ if (_xmodelShader) {
+ _xmodelShader->use();
+ _xmodelShader->setUniform("ambientLight", value);
+ }
}
bool BaseRenderOpenGL3DShader::setupLines() {
if (_state != RSTATE_LINES) {
_state = RSTATE_LINES;
+ glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glDisable(GL_DEPTH_TEST);
glFrontFace(GL_CW); // WME DX have CCW
glEnable(GL_CULL_FACE);
glEnable(GL_BLEND);
glEnable(GL_ALPHA_TEST);
+ glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
_lastTexture = nullptr;
}
@@ -300,13 +320,6 @@ bool BaseRenderOpenGL3DShader::drawSpriteEx(BaseSurface *tex, const Wintermute::
float width = (rect.right - rect.left) * scale.x;
float height = (rect.bottom - rect.top) * scale.y;
- glBindTexture(GL_TEXTURE_2D, texture->getTextureName());
-
- // for sprites we clamp to the edge, to avoid line fragments at the edges
- // this is not done by wme, though
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
int texWidth = texture->getGLTextureWidth();
int texHeight = texture->getGLTextureHeight();
@@ -390,6 +403,20 @@ bool BaseRenderOpenGL3DShader::drawSpriteEx(BaseSurface *tex, const Wintermute::
// TODO
} else {
setSpriteBlendMode(blendMode);
+ if (alphaDisable) {
+ glDisable(GL_ALPHA_TEST);
+ }
+
+ if (_lastTexture != texture) {
+ _lastTexture = texture;
+ glBindTexture(GL_TEXTURE_2D, texture->getTextureName());
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ // for sprites we clamp to the edge, to avoid line fragments at the edges
+ // this is not done by wme, though
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glEnable(GL_TEXTURE_2D);
+ }
glBindBuffer(GL_ARRAY_BUFFER, _spriteVBO);
glBufferSubData(GL_ARRAY_BUFFER, 0, 4 * sizeof(SpriteVertex), vertices);
@@ -399,6 +426,10 @@ bool BaseRenderOpenGL3DShader::drawSpriteEx(BaseSurface *tex, const Wintermute::
setProjection2D(_spriteShader);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+ if (alphaDisable) {
+ glEnable(GL_BLEND);
+ }
}
return true;
@@ -565,6 +596,7 @@ void BaseRenderOpenGL3DShader::fadeToColor(byte r, byte g, byte b, byte a) {
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
glBindBuffer(GL_ARRAY_BUFFER, _fadeVBO);
_lastTexture = nullptr;
@@ -727,6 +759,7 @@ void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane
// no texture
_lastTexture = nullptr;
+ glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
glFrontFace(GL_CW); // WME DX have CCW
@@ -862,6 +895,8 @@ ShadowVolume *BaseRenderOpenGL3DShader::createShadowVolume() {
return new ShadowVolumeOpenGLShader(_gameRef, _shadowVolumeShader, _shadowMaskShader);
}
+// ScummVM specific ends <--
+
} // namespace Wintermute
#endif // defined(USE_OPENGL_SHADERS)
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 18a18f97664..f80a6b9c6fb 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -146,12 +146,12 @@ private:
GLuint _spriteVBO;
GLuint _fadeVBO;
GLuint _lineVBO;
- OpenGL::Shader *_spriteShader;
- OpenGL::Shader *_fadeShader;
- OpenGL::Shader *_xmodelShader;
- OpenGL::Shader *_geometryShader;
- OpenGL::Shader *_shadowVolumeShader;
- OpenGL::Shader *_lineShader;
+ OpenGL::Shader *_spriteShader{};
+ OpenGL::Shader *_fadeShader{};
+ OpenGL::Shader *_xmodelShader{};
+ OpenGL::Shader *_geometryShader{};
+ OpenGL::Shader *_shadowVolumeShader{};
+ OpenGL::Shader *_lineShader{};
};
} // namespace Wintermute
diff --git a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
index c931fd41659..3cc41ec8686 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
@@ -73,8 +73,9 @@ ShadowVolumeOpenGLShader::~ShadowVolumeOpenGLShader() {
//////////////////////////////////////////////////////////////////////////
bool ShadowVolumeOpenGLShader::render() {
glBindTexture(GL_TEXTURE_2D, 0);
- glDrawArrays(GL_TRIANGLES, 0, _vertices.size());
+ glDisable(GL_TEXTURE_2D);
_gameRef->_renderer3D->_lastTexture = nullptr;
+ glDrawArrays(GL_TRIANGLES, 0, _vertices.size());
return true;
}
@@ -96,6 +97,7 @@ bool ShadowVolumeOpenGLShader::renderToStencilBuffer() {
// Disable z-buffer writes (note: z-testing still occurs), and enable the
// stencil-buffer
glDepthMask(GL_FALSE);
+ glDisable(GL_TEXTURE_2D);
glEnable(GL_STENCIL_TEST);
glEnable(GL_CULL_FACE);
More information about the Scummvm-git-logs
mailing list