[Scummvm-git-logs] scummvm master -> a9df1f82bebb52d8a8ec39ffbb93202a91a7c718

aquadran noreply at scummvm.org
Thu Oct 2 09:13:50 UTC 2025


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
a9df1f82be WINTERMUTE: Split texture path for 2D only and 3D mesh for TinyGL


Commit: a9df1f82bebb52d8a8ec39ffbb93202a91a7c718
    https://github.com/scummvm/scummvm/commit/a9df1f82bebb52d8a8ec39ffbb93202a91a7c718
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2025-10-02T11:12:33+02:00

Commit Message:
WINTERMUTE: Split texture path for 2D only and 3D mesh for TinyGL

Changed paths:
    engines/wintermute/ad/ad_actor_3dx.cpp
    engines/wintermute/base/base_game.cpp
    engines/wintermute/base/base_object.cpp
    engines/wintermute/base/base_sub_frame.cpp
    engines/wintermute/base/base_surface_storage.cpp
    engines/wintermute/base/base_surface_storage.h
    engines/wintermute/base/gfx/base_surface.h
    engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
    engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
    engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
    engines/wintermute/base/gfx/osystem/base_surface_osystem.h
    engines/wintermute/base/gfx/tinygl/base_surface_tinygl.cpp
    engines/wintermute/base/gfx/tinygl/base_surface_tinygl.h
    engines/wintermute/base/gfx/xmaterial.cpp


diff --git a/engines/wintermute/ad/ad_actor_3dx.cpp b/engines/wintermute/ad/ad_actor_3dx.cpp
index ab975fd9cbd..1f8d0817c82 100644
--- a/engines/wintermute/ad/ad_actor_3dx.cpp
+++ b/engines/wintermute/ad/ad_actor_3dx.cpp
@@ -1166,7 +1166,7 @@ bool AdActor3DX::loadBuffer(char *buffer, bool complete) {
 				_game->_surfaceStorage->removeSurface(_shadowImage);
 			_shadowImage = nullptr;
 
-			_shadowImage = _game->_surfaceStorage->addSurface(params);
+			_shadowImage = _game->_surfaceStorage->addSurface(params, false);
 			break;
 
 		case TOKEN_BLOCKED_REGION: {
diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index e187fefb3f9..d4061dc25b3 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -631,7 +631,7 @@ bool BaseGame::initialize2() { // we know whether we are going to be accelerated
 #if defined(USE_TINYGL)
 	if (!force2dRenderer && matchingRendererType == Graphics::kRendererTypeTinyGL) {
 		if (_playing3DGame) {
-			_renderer3D = nullptr;//makeTinyGL3DRenderer(this);
+			_renderer3D = makeTinyGL3DRenderer(this);
 		}
 	}
 #endif // defined(USE_TINYGL)
@@ -997,7 +997,7 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
 			}
 			_shadowImage = nullptr;
 
-			_shadowImage = _game->_surfaceStorage->addSurface(params);
+			_shadowImage = _game->_surfaceStorage->addSurface(params, false);
 			break;
 #endif
 
@@ -1129,7 +1129,7 @@ bool BaseGame::loadBuffer(char *buffer, bool complete) {
 	}
 #ifdef ENABLE_WME3D
 	if (!_shadowImage) {
-		_shadowImage = _game->_surfaceStorage->addSurface("shadow.png");
+		_shadowImage = _game->_surfaceStorage->addSurface("shadow.png", false);
 	}
 #endif
 
@@ -4241,7 +4241,7 @@ bool BaseGame::saveGame(int32 slot, const char *desc, bool quickSave) {
 			SAFE_DELETE(_saveLoadImage);
 			if (_saveImageName && _saveImageName[0] != '\0') {
 				_saveLoadImage = _game->_renderer->createSurface();
-				if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_saveImageName, true, 0, 0, 0))) {
+				if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_saveImageName, true, true, 0, 0, 0))) {
 					SAFE_DELETE(_saveLoadImage);
 				}
 			}
@@ -4294,7 +4294,7 @@ bool BaseGame::loadGame(const char *filename) {
 	if (_loadImageName && _loadImageName[0] != '\0') {
 		_saveLoadImage = _game->_renderer->createSurface();
 
-		if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_loadImageName, true, 0, 0, 0))) {
+		if (!_saveLoadImage || DID_FAIL(_saveLoadImage->create(_loadImageName, true, true, 0, 0, 0))) {
 			SAFE_DELETE(_saveLoadImage);
 		}
 	}
diff --git a/engines/wintermute/base/base_object.cpp b/engines/wintermute/base/base_object.cpp
index 454b6cf5a54..2662f4e1ded 100644
--- a/engines/wintermute/base/base_object.cpp
+++ b/engines/wintermute/base/base_object.cpp
@@ -527,7 +527,7 @@ bool BaseObject::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisSta
 		}
 
 		if (val->isString()) {
-			_shadowImage = _game->_surfaceStorage->addSurface(val->getString());
+			_shadowImage = _game->_surfaceStorage->addSurface(val->getString(), false);
 			stack->pushBool(_shadowImage != nullptr);
 		} else {
 			stack->pushBool(true);
@@ -1135,7 +1135,7 @@ bool BaseObject::persist(BasePersistenceManager *persistMgr) {
 			if (persistMgr->checkVersion(1, 6, 1)) {
 				persistMgr->transferString(TMEMBER(tempString));
 				if (!tempString.empty()) {
-					_shadowImage = _game->_surfaceStorage->addSurface(tempString.c_str());
+					_shadowImage = _game->_surfaceStorage->addSurface(tempString.c_str(), false);
 				}
 			}
 		}
diff --git a/engines/wintermute/base/base_sub_frame.cpp b/engines/wintermute/base/base_sub_frame.cpp
index 94cea4c55b8..99c47c97cdb 100644
--- a/engines/wintermute/base/base_sub_frame.cpp
+++ b/engines/wintermute/base/base_sub_frame.cpp
@@ -686,7 +686,7 @@ bool BaseSubFrame::setSurface(const char *filename, bool defaultCK, byte ckRed,
 
 	SAFE_DELETE_ARRAY(_surfaceFilename);
 
-	_surface = _game->_surfaceStorage->addSurface(filename, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
+	_surface = _game->_surfaceStorage->addSurface(filename, true, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
 	if (_surface) {
 		size_t filenameSize = strlen(filename) + 1;
 		_surfaceFilename = new char[filenameSize];
@@ -712,7 +712,7 @@ bool BaseSubFrame::setSurfaceSimple() {
 		_surface = nullptr;
 		return STATUS_OK;
 	}
-	_surface = _game->_surfaceStorage->addSurface(_surfaceFilename, _ckDefault, _ckRed, _ckGreen, _ckBlue, _lifeTime, _keepLoaded);
+	_surface = _game->_surfaceStorage->addSurface(_surfaceFilename, true, _ckDefault, _ckRed, _ckGreen, _ckBlue, _lifeTime, _keepLoaded);
 	if (_surface) {
 		return STATUS_OK;
 	} else {
diff --git a/engines/wintermute/base/base_surface_storage.cpp b/engines/wintermute/base/base_surface_storage.cpp
index 7699392b665..5ed14a2b4fe 100644
--- a/engines/wintermute/base/base_surface_storage.cpp
+++ b/engines/wintermute/base/base_surface_storage.cpp
@@ -102,7 +102,7 @@ bool BaseSurfaceStorage::removeSurface(BaseSurface *surface) {
 
 
 //////////////////////////////////////////////////////////////////////
-BaseSurface *BaseSurfaceStorage::addSurface(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+BaseSurface *BaseSurfaceStorage::addSurface(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	for (int32 i = 0; i < _surfaces.getSize(); i++) {
 		if (scumm_stricmp(_surfaces[i]->_filename, filename) == 0) {
 			_surfaces[i]->_referenceCount++;
@@ -115,9 +115,9 @@ BaseSurface *BaseSurfaceStorage::addSurface(const char *filename, bool defaultCK
 			_game->LOG(0, "Missing image: '%s'", filename);
 		}
 		if (_game->_debugMode) {
-			return addSurface("invalid_debug.bmp", defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
+			return addSurface("invalid_debug.bmp", texture2D, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
 		} else {
-			return addSurface("invalid.bmp", defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
+			return addSurface("invalid.bmp", texture2D, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded);
 		}
 	}
 
@@ -128,7 +128,7 @@ BaseSurface *BaseSurfaceStorage::addSurface(const char *filename, bool defaultCK
 		return nullptr;
 	}
 
-	if (DID_FAIL(surface->create(filename, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded))) {
+	if (DID_FAIL(surface->create(filename, texture2D, defaultCK, ckRed, ckGreen, ckBlue, lifeTime, keepLoaded))) {
 		delete surface;
 		return nullptr;
 	} else {
diff --git a/engines/wintermute/base/base_surface_storage.h b/engines/wintermute/base/base_surface_storage.h
index 84cc01cdf2a..64d02847fd2 100644
--- a/engines/wintermute/base/base_surface_storage.h
+++ b/engines/wintermute/base/base_surface_storage.h
@@ -43,7 +43,7 @@ public:
 	//DECLARE_PERSISTENT(BaseSurfaceStorage, BaseClass)
 
 	bool restoreAll();
-	BaseSurface *addSurface(const char *filename, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
+	BaseSurface *addSurface(const char *filename, bool texture2D = true, bool defaultCK = true, byte ckRed = 0, byte ckGreen = 0, byte ckBlue = 0, int lifeTime = -1, bool keepLoaded = false);
 	bool removeSurface(BaseSurface *surface);
 	BaseSurfaceStorage(BaseGame *inGame);
 	~BaseSurfaceStorage() override;
diff --git a/engines/wintermute/base/gfx/base_surface.h b/engines/wintermute/base/gfx/base_surface.h
index 2a4a67d07dc..b130617950c 100644
--- a/engines/wintermute/base/gfx/base_surface.h
+++ b/engines/wintermute/base/gfx/base_surface.h
@@ -59,7 +59,7 @@ public:
 	virtual bool display(int x, int y, Common::Rect32 rect, Graphics::TSpriteBlendMode blendMode = Graphics::BLEND_NORMAL, bool mirrorX = false, bool mirrorY = false) = 0;
 	virtual bool displayTiled(int x, int y, Common::Rect32 rect, int numTimesX, int numTimesY) = 0;
 	virtual bool restore();
-	virtual bool create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) = 0;
+	virtual bool create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) = 0;
 	virtual bool create(int width, int height);
 	virtual bool setAlphaImage(const char *filename) {
 		return STATUS_FAILED;
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
index 246b8cfab42..107004cd72e 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.cpp
@@ -40,9 +40,11 @@ BaseSurfaceOpenGL3D::BaseSurfaceOpenGL3D(BaseGame *game, BaseRenderer3D *rendere
 }
 
 BaseSurfaceOpenGL3D::~BaseSurfaceOpenGL3D() {
-	glDeleteTextures(1, &_tex);
 	_renderer->invalidateTexture(this);
-	_tex = 0;
+	if (_tex) {
+		glDeleteTextures(1, &_tex);
+		_tex = 0;
+	}
 
 	if (_imageData) {
 		_imageData->free();
@@ -58,9 +60,11 @@ BaseSurfaceOpenGL3D::~BaseSurfaceOpenGL3D() {
 }
 
 bool BaseSurfaceOpenGL3D::invalidate() {
-	glDeleteTextures(1, &_tex);
 	_renderer->invalidateTexture(this);
-	_tex = 0;
+	if (_tex) {
+		glDeleteTextures(1, &_tex);
+		_tex = 0;
+	}
 
 	if (_imageData) {
 		_imageData->free();
@@ -129,7 +133,7 @@ bool BaseSurfaceOpenGL3D::displayTiled(int x, int y, Common::Rect32 rect, int nu
 	return true;
 }
 
-bool BaseSurfaceOpenGL3D::create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+bool BaseSurfaceOpenGL3D::create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	if (defaultCK) {
 		ckRed = 255;
 		ckGreen = 0;
diff --git a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
index de769a77046..0998e2cb3d5 100644
--- a/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
+++ b/engines/wintermute/base/gfx/opengl/base_surface_opengl3d.h
@@ -46,7 +46,7 @@ public:
 	bool displayTrans(int x, int y, Common::Rect32 rect, uint32 alpha = 0xFFFFFFFF, Graphics::TSpriteBlendMode blendMode = Graphics::BLEND_NORMAL, bool mirrorX = false, bool mirrorY = false, int offsetX = 0, int offsetY = 0) override;
 	bool display(int x, int y, Common::Rect32 rect, Graphics::TSpriteBlendMode blendMode = Graphics::BLEND_NORMAL, bool mirrorX = false, bool mirrorY = false) override;
 	bool displayTiled(int x, int y, Common::Rect32 rect, int numTimesX, int numTimesY) override;
-	bool create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
+	bool create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
 	bool create(int width, int height) override;
 	bool setAlphaImage(const char *filename) override;
 	bool putSurface(const Graphics::Surface &surface, bool hasAlpha = false) override;
diff --git a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
index c93d5d43c15..497c5f6513c 100644
--- a/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_surface_osystem.cpp
@@ -78,7 +78,7 @@ BaseSurfaceOSystem::~BaseSurfaceOSystem() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-bool BaseSurfaceOSystem::create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+bool BaseSurfaceOSystem::create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	if (defaultCK) {
 		ckRed   = 255;
 		ckGreen = 0;
diff --git a/engines/wintermute/base/gfx/osystem/base_surface_osystem.h b/engines/wintermute/base/gfx/osystem/base_surface_osystem.h
index 7e96ca73525..2f35d51b783 100644
--- a/engines/wintermute/base/gfx/osystem/base_surface_osystem.h
+++ b/engines/wintermute/base/gfx/osystem/base_surface_osystem.h
@@ -42,7 +42,7 @@ public:
 	BaseSurfaceOSystem(BaseGame *inGame);
 	~BaseSurfaceOSystem() override;
 
-	bool create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
+	bool create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
 	bool create(int width, int height) override;
 
 	bool setAlphaImage(const char *filename) override;
diff --git a/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.cpp b/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.cpp
index 3a4a951d3c2..98f4f0a92ff 100644
--- a/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.cpp
+++ b/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.cpp
@@ -36,12 +36,16 @@
 namespace Wintermute {
 
 BaseSurfaceTinyGL::BaseSurfaceTinyGL(BaseGame *game, BaseRenderer3D *renderer)
-: BaseSurface(game), _renderer(renderer), _imageData(nullptr), _maskData(nullptr), _pixelOpReady(false), _surfaceModified(false) {
+: BaseSurface(game), _tex(0), _renderer(renderer), _imageData(nullptr), _maskData(nullptr), _pixelOpReady(false), _surfaceModified(false), _texture2D(true) {
 	_blitImage = tglGenBlitImage();
 }
 
 BaseSurfaceTinyGL::~BaseSurfaceTinyGL() {
 	_renderer->invalidateTexture(this);
+	if (_tex) {
+		tglDeleteTextures(1, &_tex);
+		_tex = 0;
+	}
 
 	if (_imageData) {
 		_imageData->free();
@@ -60,6 +64,10 @@ BaseSurfaceTinyGL::~BaseSurfaceTinyGL() {
 
 bool BaseSurfaceTinyGL::invalidate() {
 	_renderer->invalidateTexture(this);
+	if (_tex) {
+		tglDeleteTextures(1, &_tex);
+		_tex = 0;
+	}
 
 	if (_imageData) {
 		_imageData->free();
@@ -128,13 +136,15 @@ bool BaseSurfaceTinyGL::displayTiled(int x, int y, Common::Rect32 rect, int numT
 	return true;
 }
 
-bool BaseSurfaceTinyGL::create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
+bool BaseSurfaceTinyGL::create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime, bool keepLoaded) {
 	if (defaultCK) {
 		ckRed = 255;
 		ckGreen = 0;
 		ckBlue = 255;
 	}
 
+	_texture2D = texture2D;
+
 	Common::String surfacefilename = filename;
 	BaseImage img = BaseImage();
 	if (!img.getImageInfo(surfacefilename, _width, _height)) {
@@ -259,6 +269,14 @@ bool BaseSurfaceTinyGL::create(int width, int height) {
 	_width = width;
 	_height = height;
 
+	if (!_texture2D) {
+		if (!_valid) {
+			tglGenTextures(1, &_tex);
+		}
+		tglBindTexture(TGL_TEXTURE_2D, _tex);
+		tglTexImage2D(TGL_TEXTURE_2D, 0, TGL_RGBA, _texWidth, _texHeight, 0, TGL_RGBA, TGL_UNSIGNED_BYTE, nullptr);
+		tglBindTexture(TGL_TEXTURE_2D, 0);
+	}
 	_valid = true;
 	return true;
 }
@@ -276,7 +294,22 @@ bool BaseSurfaceTinyGL::putSurface(const Graphics::Surface &surface, bool hasAlp
 	_width = surface.w;
 	_height = surface.h;
 
-	tglUploadBlitImage(_blitImage, *_imageData, 0, false);
+	if (_texture2D) {
+		tglUploadBlitImage(_blitImage, *_imageData, 0, false);
+	} else {
+		if (!_valid) {
+			tglGenTextures(1, &_tex);
+		}
+		_texWidth = Common::nextHigher2(_width);
+		_texHeight = Common::nextHigher2(_height);
+		tglBindTexture(TGL_TEXTURE_2D, _tex);
+		tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_S, TGL_REPEAT);
+		tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_WRAP_T, TGL_REPEAT);
+		tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_MIN_FILTER, TGL_LINEAR);
+		tglTexParameteri(TGL_TEXTURE_2D, TGL_TEXTURE_MAG_FILTER, TGL_LINEAR);
+		tglTexImage2D(TGL_TEXTURE_2D, 0, TGL_RGBA, _width, _height, 0, TGL_RGBA, TGL_UNSIGNED_BYTE, _imageData->getPixels());
+		tglBindTexture(TGL_TEXTURE_2D, 0);
+	}
 	_valid = true;
 
 	return true;
@@ -334,7 +367,13 @@ bool BaseSurfaceTinyGL::startPixelOp() {
 bool BaseSurfaceTinyGL::endPixelOp() {
 	_pixelOpReady = false;
 	if (_surfaceModified) {
-		tglUploadBlitImage(_blitImage, *_imageData, 0, false);
+		if (_texture2D) {
+			tglUploadBlitImage(_blitImage, *_imageData, 0, false);
+		} else {
+			tglBindTexture(TGL_TEXTURE_2D, _tex);
+			tglTexImage2D(TGL_TEXTURE_2D, 0, TGL_RGBA, _width, _height, 0, TGL_RGBA, TGL_UNSIGNED_BYTE, _imageData->getPixels());
+			tglBindTexture(TGL_TEXTURE_2D, 0);
+		}
 		_surfaceModified = false;
 	}
 	return true;
@@ -360,6 +399,10 @@ bool BaseSurfaceTinyGL::isTransparentAtLite(int x, int y) const {
 
 void BaseSurfaceTinyGL::setTexture() {
 	prepareToDraw();
+
+	if (!_texture2D) {
+		tglBindTexture(TGL_TEXTURE_2D, _tex);
+	}
 }
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.h b/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.h
index 0a47129f317..1884532c5e7 100644
--- a/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.h
+++ b/engines/wintermute/base/gfx/tinygl/base_surface_tinygl.h
@@ -46,7 +46,7 @@ public:
 	bool displayTrans(int x, int y, Common::Rect32 rect, uint32 alpha = 0xFFFFFFFF, Graphics::TSpriteBlendMode blendMode = Graphics::BLEND_NORMAL, bool mirrorX = false, bool mirrorY = false, int offsetX = 0, int offsetY = 0) override;
 	bool display(int x, int y, Common::Rect32 rect, Graphics::TSpriteBlendMode blendMode = Graphics::BLEND_NORMAL, bool mirrorX = false, bool mirrorY = false) override;
 	bool displayTiled(int x, int y, Common::Rect32 rect, int numTimesX, int numTimesY) override;
-	bool create(const char *filename, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
+	bool create(const char *filename, bool texture2D, bool defaultCK, byte ckRed, byte ckGreen, byte ckBlue, int lifeTime = -1, bool keepLoaded = false) override;
 	bool create(int width, int height) override;
 	bool setAlphaImage(const char *filename) override;
 	bool putSurface(const Graphics::Surface &surface, bool hasAlpha = false) override;
@@ -66,17 +66,29 @@ public:
 		return _height;
 	}
 
+	uint getGLTextureWidth() const {
+		return _texWidth;
+	}
+	
+	uint getGLTextureHeight() const {
+		return _texHeight;
+	}
+
 	TinyGL::BlitImage *getBlitImage() {
 		return _blitImage;
 	}
 
 private:
+	TGLuint _tex;
 	BaseRenderer3D *_renderer;
 	Graphics::Surface *_imageData;
 	Graphics::Surface *_maskData;
+	uint _texWidth;
+	uint _texHeight;
 	bool _pixelOpReady;
 	bool _surfaceModified;
 	TinyGL::BlitImage *_blitImage;
+	bool _texture2D;
 
 	bool loadImage();
 	void writeAlpha(Graphics::Surface *surface, const Graphics::Surface *mask);
diff --git a/engines/wintermute/base/gfx/xmaterial.cpp b/engines/wintermute/base/gfx/xmaterial.cpp
index a5cad4bc2ed..2cd8cd12be9 100644
--- a/engines/wintermute/base/gfx/xmaterial.cpp
+++ b/engines/wintermute/base/gfx/xmaterial.cpp
@@ -94,7 +94,7 @@ bool Material::setTexture(const char *filename, bool adoptName) {
 		_game->_surfaceStorage->removeSurface(_surface);
 	}
 
-	_surface = _game->_surfaceStorage->addSurface(_textureFilename);
+	_surface = _game->_surfaceStorage->addSurface(_textureFilename, false);
 	_ownedSurface = true;
 	_sprite = nullptr;
 




More information about the Scummvm-git-logs mailing list