[Scummvm-git-logs] scummvm master -> 874965f4549f58b4372acf7462dbfccb6438a5fc
aquadran
aquadran at gmail.com
Sun Oct 18 05:22:46 UTC 2020
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b0c8870a00 WINTERMUTE: Remove glShadeModel calls from gles2 renderer shadow volume
8eacf532c9 WINTERMUTE: Permanently store texture data in main memory
1ea679f90a WINTERMUTE: Provide getters for actual opengl texture dimensions
874965f454 WINTERMUTE: Remove Model-View transformation reset function from 3d renderer interface
Commit: b0c8870a0075a42ea455e39b4da161de27fffa70
https://github.com/scummvm/scummvm/commit/b0c8870a0075a42ea455e39b4da161de27fffa70
Author: Gunnar Birke (gunnar.birke at online.de)
Date: 2020-10-18T07:22:40+02:00
Commit Message:
WINTERMUTE: Remove glShadeModel calls from gles2 renderer shadow volume
Changed paths:
engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
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 ae8023b075..9884a6814f 100644
--- a/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/shadow_volume_opengl_shader.cpp
@@ -107,8 +107,6 @@ bool ShadowVolumeOpenGLShader::renderToStencilBuffer() {
// renderstate is really not needed.
glStencilFunc(GL_ALWAYS, 0x1, 0xFFFFFFFF);
- glShadeModel(GL_FLAT);
-
// Make sure that no pixels get drawn to the frame buffer
glEnable(GL_BLEND);
glBlendFunc(GL_ZERO, GL_ONE);
@@ -128,7 +126,6 @@ bool ShadowVolumeOpenGLShader::renderToStencilBuffer() {
// Restore render states
glFrontFace(GL_CCW);
- glShadeModel(GL_SMOOTH);
glDepthMask(GL_TRUE);
glDisable(GL_STENCIL_TEST);
glDisable(GL_BLEND);
Commit: 8eacf532c985ebbe498e800b84664e66778696c9
https://github.com/scummvm/scummvm/commit/8eacf532c985ebbe498e800b84664e66778696c9
Author: Gunnar Birke (gunnar.birke at online.de)
Date: 2020-10-18T07:22:40+02:00
Commit Message:
WINTERMUTE: Permanently store texture data in main memory
Changed paths:
engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
index fd8212edd9..338fbfe2dc 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
@@ -66,6 +66,7 @@ BaseSurfaceOpenGL3D::~BaseSurfaceOpenGL3D() {
bool BaseSurfaceOpenGL3D::invalidate() {
glDeleteTextures(1, &_tex);
+ _imageData->free();
delete[] _imageData;
_imageData = nullptr;
@@ -81,16 +82,7 @@ bool BaseSurfaceOpenGL3D::displayHalfTrans(int x, int y, Rect32 rect) {
bool BaseSurfaceOpenGL3D::isTransparentAt(int x, int y) {
prepareToDraw();
- uint8 *imageData = new uint8[4 * _texWidth * _texHeight]();
-
- // assume 32 bit rgba for now
- glBindTexture(GL_TEXTURE_2D, _tex);
- glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- uint8 alpha = imageData[y * _texWidth * 4 + x * 4 + 3];
-
- delete[] imageData;
+ uint8 alpha = reinterpret_cast<uint8 *>(_imageData->getPixels())[y * _width * 4 + x * 4 + 3];
return alpha < 128;
}
@@ -179,7 +171,12 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
bool needsColorKey = false;
bool replaceAlpha = true;
- Graphics::Surface *surf = img.getSurface()->convertTo(OpenGL::TextureGL::getRGBAPixelFormat(), img.getPalette());
+ if (_imageData) {
+ _imageData->free();
+ delete _imageData;
+ }
+
+ _imageData = img.getSurface()->convertTo(OpenGL::TextureGL::getRGBAPixelFormat(), img.getPalette());
if (_filename.hasSuffix(".bmp") && img.getSurface()->format.bytesPerPixel == 4) {
// 32 bpp BMPs have nothing useful in their alpha-channel -> color-key
@@ -190,13 +187,10 @@ bool BaseSurfaceOpenGL3D::create(const Common::String &filename, bool defaultCK,
}
if (needsColorKey) {
- applyColorKey(*surf, ckRed, ckGreen, ckBlue, replaceAlpha);
+ applyColorKey(*_imageData, ckRed, ckGreen, ckBlue, replaceAlpha);
}
- putSurface(*surf);
-
- surf->free();
- delete surf;
+ putSurface(*_imageData);
if (_lifeTime == 0 || lifeTime == -1 || lifeTime > _lifeTime) {
_lifeTime = lifeTime;
@@ -227,6 +221,14 @@ bool BaseSurfaceOpenGL3D::create(int width, int height) {
}
bool BaseSurfaceOpenGL3D::putSurface(const Graphics::Surface &surface, bool hasAlpha) {
+ if (!_imageData) {
+ _imageData = new Graphics::Surface();
+ }
+
+ if (_imageData && _imageData != &surface) {
+ _imageData->copyFrom(surface);
+ }
+
_width = surface.w;
_height = surface.h;
_texWidth = Common::nextHigher2(_width);
@@ -266,22 +268,11 @@ bool BaseSurfaceOpenGL3D::comparePixel(int x, int y, byte r, byte g, byte b, int
}
bool BaseSurfaceOpenGL3D::startPixelOp() {
- if (_imageData) {
- return true;
- }
-
prepareToDraw();
-
- _imageData = new uint8[4 * _texWidth * _texHeight]();
- glBindTexture(GL_TEXTURE_2D, _tex);
- glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, _imageData);
return true;
}
bool BaseSurfaceOpenGL3D::endPixelOp() {
- glBindTexture(GL_TEXTURE_2D, 0);
- delete[] _imageData;
- _imageData = nullptr;
return true;
}
@@ -295,7 +286,7 @@ bool BaseSurfaceOpenGL3D::isTransparentAtLite(int x, int y) {
}
//TODO: Check for endianness issues
- uint8 alpha = _imageData[y * _texWidth * 4 + x * 4 + 3];
+ uint8 alpha = reinterpret_cast<uint8 *>(_imageData->getPixels())[y * _width * 4 + x * 4 + 3];
return alpha == 0;
}
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
index 4ca9bafef3..b0d3f7cce0 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
@@ -69,7 +69,7 @@ public:
private:
GLuint _tex;
BaseRenderer3D *_renderer;
- uint8 *_imageData;
+ Graphics::Surface *_imageData;
uint _texWidth;
uint _texHeight;
};
Commit: 1ea679f90a85a38ab33caaf1daf32dd6e241f20a
https://github.com/scummvm/scummvm/commit/1ea679f90a85a38ab33caaf1daf32dd6e241f20a
Author: Gunnar Birke (gunnar.birke at online.de)
Date: 2020-10-18T07:22:40+02:00
Commit Message:
WINTERMUTE: Provide getters for actual opengl texture dimensions
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_surface_opengl3d.h
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index d68a887bd3..f907cf2916 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -638,11 +638,8 @@ bool BaseRenderOpenGL3D::drawSpriteEx(BaseSurfaceOpenGL3D &tex, const Wintermute
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- // might as well provide getters for those
- GLint texWidth;
- GLint texHeight;
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &texWidth);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &texHeight);
+ int texWidth = tex.getGLTextureWidth();
+ int texHeight = tex.getGLTextureHeight();
float texLeft = (float)rect.left / (float)texWidth;
float texTop = (float)rect.top / (float)texHeight;
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 e5fe23143e..05f2533017 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -558,11 +558,8 @@ bool BaseRenderOpenGL3DShader::drawSpriteEx(BaseSurfaceOpenGL3D &tex, const Wint
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- // might as well provide getters for those
- int texWidth;
- int texHeight;
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &texWidth);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &texHeight);
+ int texWidth = tex.getGLTextureWidth();
+ int texHeight = tex.getGLTextureHeight();
float texLeft = (float)rect.left / (float)texWidth;
float texTop = (float)rect.top / (float)texHeight;
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
index b0d3f7cce0..19878144d0 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
@@ -66,6 +66,14 @@ public:
return _tex;
}
+ uint getGLTextureWidth() const {
+ return _texWidth;
+ }
+
+ uint getGLTextureHeight() const {
+ return _texHeight;
+ }
+
private:
GLuint _tex;
BaseRenderer3D *_renderer;
Commit: 874965f4549f58b4372acf7462dbfccb6438a5fc
https://github.com/scummvm/scummvm/commit/874965f4549f58b4372acf7462dbfccb6438a5fc
Author: Gunnar Birke (gunnar.birke at online.de)
Date: 2020-10-18T07:22:40+02:00
Commit Message:
WINTERMUTE: Remove Model-View transformation reset function from 3d renderer interface
Changed paths:
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/base/gfx/base_renderer3d.h b/engines/wintermute/base/gfx/base_renderer3d.h
index c3d8d7c950..0693cd14bc 100644
--- a/engines/wintermute/base/gfx/base_renderer3d.h
+++ b/engines/wintermute/base/gfx/base_renderer3d.h
@@ -85,7 +85,6 @@ public:
void initLoop() override;
virtual bool setProjection2D() = 0;
- virtual void resetModelViewTransform() = 0;
virtual void setWorldTransform(const Math::Matrix4 &transform) = 0;
void project(const Math::Matrix4 &worldMatrix, const Math::Vector3d &point, int32 &x, int32 &y);
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
index f907cf2916..e602fd894b 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.cpp
@@ -365,11 +365,6 @@ bool BaseRenderOpenGL3D::setProjection2D() {
return true;
}
-void BaseRenderOpenGL3D::resetModelViewTransform() {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
void BaseRenderOpenGL3D::setWorldTransform(const Math::Matrix4 &transform) {
Math::Matrix4 tmp = transform;
tmp.transpose();
@@ -742,7 +737,8 @@ bool BaseRenderOpenGL3D::drawSpriteEx(BaseSurfaceOpenGL3D &tex, const Wintermute
void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks,
const BaseArray<AdGeneric *> &generics, const BaseArray<Light3D *> &lights, Camera3D *camera) {
- _gameRef->_renderer3D->resetModelViewTransform();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
_gameRef->_renderer3D->setup3D(camera, true);
glDisable(GL_LIGHTING);
@@ -808,7 +804,8 @@ void BaseRenderOpenGL3D::renderSceneGeometry(const BaseArray<AdWalkplane *> &pla
}
void BaseRenderOpenGL3D::renderShadowGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks, const BaseArray<AdGeneric *> &generics, Camera3D *camera) {
- resetModelViewTransform();
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
setup3D(camera, true);
// disable color write
diff --git a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
index eec078fcd6..1ffb2bec9f 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d.h
@@ -91,7 +91,6 @@ public:
bool setProjection() override;
bool setProjection2D() override;
- void resetModelViewTransform() override;
void setWorldTransform(const Math::Matrix4 &transform) override;
bool windowedBlt() 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 05f2533017..50a79dd380 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.cpp
@@ -308,11 +308,6 @@ bool BaseRenderOpenGL3DShader::setProjection2D() {
return true;
}
-void BaseRenderOpenGL3DShader::resetModelViewTransform() {
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
void BaseRenderOpenGL3DShader::setWorldTransform(const Math::Matrix4 &transform) {
Math::Matrix4 tmp = transform;
tmp.transpose();
@@ -648,7 +643,6 @@ void BaseRenderOpenGL3DShader::renderSceneGeometry(const BaseArray<AdWalkplane *
}
void BaseRenderOpenGL3DShader::renderShadowGeometry(const BaseArray<AdWalkplane *> &planes, const BaseArray<AdBlock *> &blocks, const BaseArray<AdGeneric *> &generics, Camera3D *camera) {
- resetModelViewTransform();
setup3D(camera, true);
// disable color write
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 0cfb33413d..3c87cdeca9 100644
--- a/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
+++ b/engines/wintermute/base/gfx/opengl/base_render_opengl3d_shader.h
@@ -76,7 +76,6 @@ public:
bool setProjection() override;
bool setProjection2D() override;
- void resetModelViewTransform() override;
void setWorldTransform(const Math::Matrix4 &transform) override;
bool windowedBlt() override;
More information about the Scummvm-git-logs
mailing list