[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