[Scummvm-git-logs] scummvm master -> 702f535557ff41ae39c499455a4e944d8e759105
neuromancer
noreply at scummvm.org
Fri May 17 08:03:35 UTC 2024
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
73468c43ad FREESCAPE: fixes for dark and improvements in the group handling
f2699fbbe2 FREESCAPE: initial implementation of the skybox in castle ega
702f535557 FREESCAPE: fixes for the tinyGL renderer
Commit: 73468c43ad233a3678820dbf8e9dd96963e6eecc
https://github.com/scummvm/scummvm/commit/73468c43ad233a3678820dbf8e9dd96963e6eecc
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-05-17T10:04:32+02:00
Commit Message:
FREESCAPE: fixes for dark and improvements in the group handling
Changed paths:
engines/freescape/games/dark/amiga.cpp
engines/freescape/games/dark/atari.cpp
engines/freescape/games/dark/cpc.cpp
engines/freescape/games/dark/dark.cpp
engines/freescape/games/dark/dos.cpp
engines/freescape/games/palettes.cpp
engines/freescape/loaders/8bitBinaryLoader.cpp
engines/freescape/objects/group.cpp
diff --git a/engines/freescape/games/dark/amiga.cpp b/engines/freescape/games/dark/amiga.cpp
index 01c8b79a62b..13f192f6816 100644
--- a/engines/freescape/games/dark/amiga.cpp
+++ b/engines/freescape/games/dark/amiga.cpp
@@ -121,12 +121,6 @@ void DarkEngine::loadAssetsAmigaFullGame() {
loadPalettes(stream, 0x2e528);
loadGlobalObjects(stream, 0x30f0 - 50, 24);
loadMessagesVariableSize(stream, 0x3d37, 66);
-
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
}
void DarkEngine::drawAmigaAtariSTUI(Graphics::Surface *surface) {
diff --git a/engines/freescape/games/dark/atari.cpp b/engines/freescape/games/dark/atari.cpp
index 6bfd23ab78a..d9bfd8d1e0d 100644
--- a/engines/freescape/games/dark/atari.cpp
+++ b/engines/freescape/games/dark/atari.cpp
@@ -39,12 +39,6 @@ void DarkEngine::loadAssetsAtariFullGame() {
loadGlobalObjects(stream, 0x32f6, 24);
loadSoundsFx(stream, 0x266e8, 11);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
-
GeometricObject *obj = nullptr;
obj = (GeometricObject *)_areaMap[15]->objectWithID(18);
assert(obj);
diff --git a/engines/freescape/games/dark/cpc.cpp b/engines/freescape/games/dark/cpc.cpp
index aad0a1930a6..d910283ec3f 100644
--- a/engines/freescape/games/dark/cpc.cpp
+++ b/engines/freescape/games/dark/cpc.cpp
@@ -65,11 +65,6 @@ void DarkEngine::loadAssetsCPCFullGame() {
loadFonts(&file, 0x60f3);
loadGlobalObjects(&file, 0x9a, 23);
load8bitBinary(&file, 0x6255, 16);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
_indicators.push_back(loadBundledImage("dark_fallen_indicator"));
_indicators.push_back(loadBundledImage("dark_crouch_indicator"));
_indicators.push_back(loadBundledImage("dark_walk_indicator"));
diff --git a/engines/freescape/games/dark/dark.cpp b/engines/freescape/games/dark/dark.cpp
index f4aff0bc823..626e02d11d0 100644
--- a/engines/freescape/games/dark/dark.cpp
+++ b/engines/freescape/games/dark/dark.cpp
@@ -194,6 +194,13 @@ void DarkEngine::initGameState() {
void DarkEngine::loadAssets() {
FreescapeEngine::loadAssets();
+ for (auto &it : _areaMap) {
+ addWalls(it._value);
+ addECDs(it._value);
+ if (it._value->getAreaID() != 255)
+ addSkanner(it._value);
+ }
+
_timeoutMessage = _messagesList[14];
_noShieldMessage = _messagesList[15];
_noEnergyMessage = _messagesList[16];
diff --git a/engines/freescape/games/dark/dos.cpp b/engines/freescape/games/dark/dos.cpp
index 84e9fb32445..046aa2649df 100644
--- a/engines/freescape/games/dark/dos.cpp
+++ b/engines/freescape/games/dark/dos.cpp
@@ -114,12 +114,6 @@ void DarkEngine::loadAssetsDOSDemo() {
_border = load8bitBinImage(&file, 0x210);
_border->setPalette((byte *)&kEGADefaultPalette, 0, 16);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
-
_indicators.push_back(loadBundledImage("dark_fallen_indicator"));
_indicators.push_back(loadBundledImage("dark_crouch_indicator"));
_indicators.push_back(loadBundledImage("dark_walk_indicator"));
@@ -149,11 +143,6 @@ void DarkEngine::loadAssetsDOSDemo() {
_border = load8bitBinImage(&file, 0x210);
_border->setPalette((byte *)&kDarkCGAPalettePinkBlue, 0, 4);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
swapPalette(1);
} else
error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
@@ -181,12 +170,6 @@ void DarkEngine::loadAssetsDOSFullGame() {
_border = load8bitBinImage(&file, 0x210);
_border->setPalette((byte *)&kEGADefaultPalette, 0, 16);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
-
_indicators.push_back(loadBundledImage("dark_fallen_indicator"));
_indicators.push_back(loadBundledImage("dark_crouch_indicator"));
_indicators.push_back(loadBundledImage("dark_walk_indicator"));
@@ -215,11 +198,6 @@ void DarkEngine::loadAssetsDOSFullGame() {
_border = load8bitBinImage(&file, 0x210);
_border->setPalette((byte *)&kDarkCGAPalettePinkBlue, 0, 4);
- for (auto &it : _areaMap) {
- addWalls(it._value);
- addECDs(it._value);
- addSkanner(it._value);
- }
swapPalette(1);
} else
error("Invalid or unsupported render mode %s for Dark Side", Common::getRenderModeDescription(_renderMode));
diff --git a/engines/freescape/games/palettes.cpp b/engines/freescape/games/palettes.cpp
index 6fc4cc75b6e..7f3d30cd395 100644
--- a/engines/freescape/games/palettes.cpp
+++ b/engines/freescape/games/palettes.cpp
@@ -165,7 +165,7 @@ void FreescapeEngine::loadPalettes(Common::SeekableReadStream *file, int offset)
void FreescapeEngine::swapPalette(uint16 levelID) {
if (isAmiga() || isAtariST()) {
// The following palette was not available in the demo, so we select another one
- if (isDemo() && levelID == 32)
+ if (isDriller() && isDemo() && levelID == 32)
levelID = 31;
_gfx->_palette = _paletteByArea[levelID];
diff --git a/engines/freescape/loaders/8bitBinaryLoader.cpp b/engines/freescape/loaders/8bitBinaryLoader.cpp
index 99a1f7cb253..e4b7e79f35c 100644
--- a/engines/freescape/loaders/8bitBinaryLoader.cpp
+++ b/engines/freescape/loaders/8bitBinaryLoader.cpp
@@ -406,15 +406,12 @@ Object *FreescapeEngine::load8bitObject(Common::SeekableReadStream *file) {
}
debugC(1, kFreescapeDebugParser, "End of object at %lx", long(file->pos()));
- if (!GeometricObject::isPolygon(objectType))
- position = 32 * position;
-
// create an object
return new GeometricObject(
objectType,
objectID,
rawFlagsAndType, // flags
- position,
+ 32 * position,
32 * v, // size
colours,
ecolours,
diff --git a/engines/freescape/objects/group.cpp b/engines/freescape/objects/group.cpp
index 0839edde65e..d326da5cf59 100644
--- a/engines/freescape/objects/group.cpp
+++ b/engines/freescape/objects/group.cpp
@@ -88,9 +88,12 @@ void Group::assemble(int index) {
GeometricObject *gobj = (GeometricObject *)_objects[index];
//gobj->makeVisible();
Math::Vector3d position = _operations[_step]->position;
-
+ Math::Vector3d offset = _origins[index] - _origins[0];
position = 32 * position / _scale;
- gobj->offsetOrigin(position + _origins[index] - _origins[0]);
+
+ debugC(1, kFreescapeDebugCode, "Group %d: Assembling object %d originally at %f, %f, %f", _objectID, gobj->getObjectID(), gobj->getOrigin().x(), gobj->getOrigin().y(), gobj->getOrigin().z());
+ gobj->offsetOrigin(position + offset);
+ debugC(1, kFreescapeDebugCode, "Group %d: Assembling object %d originally at %f, %f, %f", _objectID, gobj->getObjectID(), gobj->getOrigin().x(), gobj->getOrigin().y(), gobj->getOrigin().z());
}
void Group::run() {
@@ -98,11 +101,11 @@ void Group::run() {
return;
int opcode = _operations[_step]->opcode;
+ debugC(1, kFreescapeDebugCode, "Executing opcode 0x%x at step %d", opcode, _step);
if (opcode == 0x80 || opcode == 0xff) {
- _step = -1;
- _active = false;
- _finished = false;
+ reset();
} else if (opcode == 0x01) {
+ debugC(1, kFreescapeDebugCode, "Executing group condition %s", _operations[_step]->conditionSource.c_str());
g_freescape->executeCode(_operations[_step]->condition, false, true, false, false);
} else if (opcode == 0x6e) {
uint32 groupSize = _objects.size();
@@ -123,18 +126,18 @@ void Group::run() {
}
void Group::reset() {
- /*_step = -1;
+ _step = -1;
_active = false;
_finished = false;
uint32 groupSize = _objects.size();
for (uint32 i = 0; i < groupSize ; i++) {
GeometricObject *gobj = (GeometricObject *)_objects[i];
if (GeometricObject::isPolygon(_objects[i]->getType())) {
- //gobj->setOrigin(_origins[i]);
- //gobj->restoreOrdinates();
+ gobj->setOrigin(_origins[i]);
+ gobj->restoreOrdinates();
//gobj->makeInvisible();
}
- }*/
+ }
}
void Group::draw(Renderer *gfx, float offset) {
@@ -149,6 +152,7 @@ void Group::step() {
if (_finished)
return;
+ debugC(1, kFreescapeDebugCode, "Stepping group %d", _objectID);
if (_step < int(_operations.size() - 1))
_step++;
else {
Commit: f2699fbbe2e61b80cab739a714396bd8199f414e
https://github.com/scummvm/scummvm/commit/f2699fbbe2e61b80cab739a714396bd8199f414e
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-05-17T10:04:32+02:00
Commit Message:
FREESCAPE: initial implementation of the skybox in castle ega
Changed paths:
A devtools/create_freescape/castle_background_ega.bmp
dists/engine-data/freescape.dat
engines/freescape/freescape.cpp
engines/freescape/freescape.h
engines/freescape/games/castle/dos.cpp
engines/freescape/gfx.h
engines/freescape/gfx_opengl.cpp
engines/freescape/gfx_opengl.h
diff --git a/devtools/create_freescape/castle_background_ega.bmp b/devtools/create_freescape/castle_background_ega.bmp
new file mode 100644
index 00000000000..226c0fbb0c5
Binary files /dev/null and b/devtools/create_freescape/castle_background_ega.bmp differ
diff --git a/dists/engine-data/freescape.dat b/dists/engine-data/freescape.dat
index 98340536ccd..6ab6f6f5576 100644
Binary files a/dists/engine-data/freescape.dat and b/dists/engine-data/freescape.dat differ
diff --git a/engines/freescape/freescape.cpp b/engines/freescape/freescape.cpp
index b354c3d2094..55092698199 100644
--- a/engines/freescape/freescape.cpp
+++ b/engines/freescape/freescape.cpp
@@ -127,8 +127,10 @@ FreescapeEngine::FreescapeEngine(OSystem *syst, const ADGameDescription *gd)
_border = nullptr;
_title = nullptr;
+ _background = nullptr;
_titleTexture = nullptr;
_borderTexture = nullptr;
+ _skyTexture = nullptr;
_uiTexture = nullptr;
_fontLoaded = false;
_dataBundle = nullptr;
@@ -200,10 +202,16 @@ FreescapeEngine::~FreescapeEngine() {
delete _border;
}
+ if (_background) {
+ _background->free();
+ delete _background;
+ }
+
if (_gfx->_isAccelerated) {
delete _borderTexture;
delete _uiTexture;
delete _titleTexture;
+ delete _skyTexture;
}
for (auto &it : _areaMap) {
@@ -320,6 +328,13 @@ void FreescapeEngine::clearBackground() {
void FreescapeEngine::drawBackground() {
clearBackground();
_gfx->drawBackground(_currentArea->_skyColor);
+
+ if (isCastle()) {
+ assert(_background);
+ if (!_skyTexture)
+ _skyTexture = _gfx->createTexture(_background);
+ _gfx->drawSkybox(_skyTexture, _position);
+ }
}
void FreescapeEngine::drawFrame() {
diff --git a/engines/freescape/freescape.h b/engines/freescape/freescape.h
index 0c74167eceb..5e811aae3b5 100644
--- a/engines/freescape/freescape.h
+++ b/engines/freescape/freescape.h
@@ -154,9 +154,13 @@ public:
virtual void drawCrossair(Graphics::Surface *surface);
Graphics::ManagedSurface *_border;
Graphics::ManagedSurface *_title;
+ Graphics::Surface *_background;
+
Texture *_borderTexture;
Texture *_titleTexture;
Texture *_uiTexture;
+ Texture *_skyTexture;
+
Common::Array<Graphics::Surface *>_indicators;
Common::HashMap<uint16, Texture *> _borderCGAByArea;
Common::HashMap<uint16, byte *> _paletteCGAByArea;
diff --git a/engines/freescape/games/castle/dos.cpp b/engines/freescape/games/castle/dos.cpp
index 469f1b9b1a8..b3fa4e3e065 100644
--- a/engines/freescape/games/castle/dos.cpp
+++ b/engines/freescape/games/castle/dos.cpp
@@ -111,6 +111,10 @@ void CastleEngine::loadAssetsDOSFullGame() {
_areaMap[1]->addFloor();
_areaMap[2]->addFloor();
delete stream;
+
+ _background = loadBundledImage("castle_background");
+ assert(_background);
+ _background->convertToInPlace(_gfx->_texturePixelFormat);
} else
error("Not implemented yet");
@@ -176,6 +180,9 @@ void CastleEngine::loadAssetsDOSDemo() {
_areaMap[1]->addFloor();
_areaMap[2]->addFloor();
delete stream;
+ _background = loadBundledImage("background");
+ assert(_background);
+ _background->convertToInPlace(_gfx->_texturePixelFormat);
} else
error("Not implemented yet");
}
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index afac13cad00..1cc6db9cda0 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -101,6 +101,7 @@ public:
virtual void drawBackground(uint8 color);
void drawEclipse(uint8 color1, uint8 color2, float difference);
+ virtual void drawSkybox(Texture *texture, Math::Vector3d camera) {};
virtual void drawCelestialBody(Math::Vector3d position, float radius, uint8 color) {};
Common::Rect viewport() const;
diff --git a/engines/freescape/gfx_opengl.cpp b/engines/freescape/gfx_opengl.cpp
index 9a51ca3ed26..1ed503926cf 100644
--- a/engines/freescape/gfx_opengl.cpp
+++ b/engines/freescape/gfx_opengl.cpp
@@ -156,6 +156,41 @@ void OpenGLRenderer::drawTexturedRect2D(const Common::Rect &screenRect, const Co
glFlush();
}
+void OpenGLRenderer::drawSkybox(Texture *texture, Math::Vector3d camera) {
+ OpenGLTexture *glTexture = static_cast<OpenGLTexture *>(texture);
+
+ glDisable(GL_DEPTH_TEST);
+ glEnable(GL_TEXTURE_2D);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+
+ glBindTexture(GL_TEXTURE_2D, glTexture->_id);
+ glVertexPointer(3, GL_FLOAT, 0, _skyVertices);
+ glNormalPointer(GL_FLOAT, 0, _skyNormals);
+ glTexCoordPointer(2, GL_FLOAT, 0, _skyUvs);
+
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glEnableClientState(GL_NORMAL_ARRAY);
+
+ glPolygonMode(GL_BACK, GL_FILL);
+
+ glPushMatrix();
+ {
+ glTranslatef(camera.x(), camera.y(), camera.z());
+ glDrawArrays(GL_QUADS, 0, 16);
+ }
+ glPopMatrix();
+
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisableClientState(GL_VERTEX_ARRAY);
+
+ glBindTexture(GL_TEXTURE_2D, 0);
+ glDisable(GL_TEXTURE_2D);
+ glEnable(GL_DEPTH_TEST);
+ glFlush();
+}
+
void OpenGLRenderer::updateProjectionMatrix(float fov, float nearClipPlane, float farClipPlane) {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
diff --git a/engines/freescape/gfx_opengl.h b/engines/freescape/gfx_opengl.h
index 9ea1ddc5e29..2d3fdbe3607 100644
--- a/engines/freescape/gfx_opengl.h
+++ b/engines/freescape/gfx_opengl.h
@@ -111,8 +111,71 @@ public:
virtual void flipBuffer() override;
virtual void drawFloor(uint8 color) override;
void drawCelestialBody(Math::Vector3d position, float radius, uint8 color) override;
+ void drawSkybox(Texture *texture, Math::Vector3d camera) override;
virtual Graphics::Surface *getScreenshot() override;
+ GLfloat _skyNormals[16][3] = {
+ 0.0, 0.0, 1.0, //front //0
+ 0.0, 0.0, 1.0, //1
+ 0.0, 0.0, 1.0, //2
+ 0.0, 0.0, 1.0, //3
+ 0.0, 0.0, -1.0, //back //0
+ 0.0, 0.0, -1.0, //1
+ 0.0, 0.0, -1.0, //2
+ 0.0, 0.0, -1.0, //3
+ -1.0, 0.0, 0.0, //left
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0, //right
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0
+ };
+
+ GLfloat _skyUvs[16][3] = {
+ 0.0f, 0.0f, //1
+ 0.0f, 2.0f, //2
+ 1.0f, 2.0f, //3
+ 1.0f, 0.0f, //front //4
+
+ 1.0f, 0.0f, //1
+ 0.0f, 0.0f, //2
+ 0.0f, 2.0f, //back //3
+ 1.0f, 2.0f, //4
+
+ 0.0f, 0.0f, //left //1
+ 1.0f, 0.0f, //2
+ 1.0f, 2.0f, //3
+ 0.0f, 2.0f, //4
+
+ 1.0f, 0.0f, //right //1
+ 0.0f, 0.0f, //2
+ 0.0f, 2.0f, //3
+ 1.0f, 2.0f, //4
+ };
+
+ GLfloat _skyVertices[16][3] = {
+ -81280.0, 8128.0, 81280.0, //1 // Vertex #0 front
+ -81280.0, -8128.0, 81280.0, //2 // Vertex #1
+ 81280.0, -8128.0, 81280.0, //3 // Vertex #2
+ 81280.0, 8128.0, 81280.0, //4 // Vertex #3
+
+ 81280.0f, -8128.0f, -81280.0f, //back //1
+ -81280.0f, -8128.0f, -81280.0f, //2
+ -81280.0f, 8128.0f, -81280.0f, //3
+ 81280.0f, 8128.0f, -81280.0f, //4
+
+ -81280.0f, 8128.0f, 81280.0f, //left //1
+ -81280.0f, 8128.0f, -81280.0f, //2
+ -81280.0f, -8128.0f, -81280.0f, //3
+ -81280.0f, -8128.0f, 81280.0f, //4
+
+ 81280.0f, 8128.0f, -81280.0f, //right //1
+ 81280.0f, 8128.0f, 81280.0f, //2
+ 81280.0f, -8128.0f, 81280.0f,//3
+ 81280.0f, -8128.0f, -81280.0f,//4
+ };
};
} // End of namespace Freescape
Commit: 702f535557ff41ae39c499455a4e944d8e759105
https://github.com/scummvm/scummvm/commit/702f535557ff41ae39c499455a4e944d8e759105
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2024-05-17T10:04:32+02:00
Commit Message:
FREESCAPE: fixes for the tinyGL renderer
Changed paths:
engines/freescape/area.cpp
engines/freescape/gfx_tinygl.cpp
diff --git a/engines/freescape/area.cpp b/engines/freescape/area.cpp
index 7a4e3c87e24..ff3d584bb5b 100644
--- a/engines/freescape/area.cpp
+++ b/engines/freescape/area.cpp
@@ -228,7 +228,7 @@ void Area::draw(Freescape::Renderer *gfx, uint32 animationTicks, Math::Vector3d
ObjectArray planarObjects;
ObjectArray nonPlanarObjects;
Object *floor = nullptr;
- float offset = 0.5;
+ float offset = !gfx->_isAccelerated ? 1.0 : 0.5;
for (auto &obj : _drawableObjects) {
if (!obj->isDestroyed() && !obj->isInvisible()) {
diff --git a/engines/freescape/gfx_tinygl.cpp b/engines/freescape/gfx_tinygl.cpp
index 0384f7cb0a7..b1ce5b79280 100644
--- a/engines/freescape/gfx_tinygl.cpp
+++ b/engines/freescape/gfx_tinygl.cpp
@@ -76,6 +76,7 @@ void TinyGLRenderer::init() {
}
void TinyGLRenderer::setViewport(const Common::Rect &rect) {
+ _viewport = rect;
tglViewport(rect.left, g_system->getHeight() - rect.bottom, rect.width(), rect.height());
}
@@ -263,8 +264,50 @@ void TinyGLRenderer::useColor(uint8 r, uint8 g, uint8 b) {
}
void TinyGLRenderer::clear(uint8 r, uint8 g, uint8 b, bool ignoreViewport) {
- tglClearColor(r / 255., g / 255., b / 255., 1.0);
- tglClear(TGL_COLOR_BUFFER_BIT | TGL_DEPTH_BUFFER_BIT);
+ tglClear(TGL_DEPTH_BUFFER_BIT);
+ if (ignoreViewport) {
+ tglClearColor(r / 255., g / 255., b / 255., 1.0);
+ tglClear(TGL_COLOR_BUFFER_BIT);
+ } else {
+ // Disable viewport
+ tglViewport(0, 0, g_system->getWidth(), g_system->getHeight());
+ useColor(r, g, b);
+
+ tglMatrixMode(TGL_PROJECTION);
+ tglPushMatrix();
+ tglLoadIdentity();
+
+ tglOrtho(0, _screenW, _screenH, 0, 0, 1);
+ tglMatrixMode(TGL_MODELVIEW);
+ tglPushMatrix();
+ tglLoadIdentity();
+
+ tglDisable(TGL_DEPTH_TEST);
+ tglDepthMask(TGL_FALSE);
+
+ tglEnableClientState(TGL_VERTEX_ARRAY);
+ copyToVertexArray(0, Math::Vector3d(_viewport.left, _viewport.top, 0));
+ copyToVertexArray(1, Math::Vector3d(_viewport.left, _viewport.bottom, 0));
+ copyToVertexArray(2, Math::Vector3d(_viewport.right, _viewport.bottom, 0));
+
+ copyToVertexArray(3, Math::Vector3d(_viewport.left, _viewport.top, 0));
+ copyToVertexArray(4, Math::Vector3d(_viewport.right, _viewport.top, 0));
+ copyToVertexArray(5, Math::Vector3d(_viewport.right, _viewport.bottom, 0));
+
+ tglVertexPointer(3, TGL_FLOAT, 0, _verts);
+ tglDrawArrays(TGL_TRIANGLES, 0, 6);
+ tglDisableClientState(TGL_VERTEX_ARRAY);
+
+ tglEnable(TGL_DEPTH_TEST);
+ tglDepthMask(TGL_TRUE);
+
+ tglPopMatrix();
+ tglMatrixMode(TGL_PROJECTION);
+ tglPopMatrix();
+
+ // Restore viewport
+ tglViewport(_viewport.left, g_system->getHeight() - _viewport.bottom, _viewport.width(), _viewport.height());
+ }
}
void TinyGLRenderer::drawFloor(uint8 color) {
More information about the Scummvm-git-logs
mailing list