[Scummvm-cvs-logs] SF.net SVN: scummvm:[34652] residual/trunk/engine
aquadran at users.sourceforge.net
aquadran at users.sourceforge.net
Fri Sep 26 19:48:47 CEST 2008
Revision: 34652
http://scummvm.svn.sourceforge.net/scummvm/?rev=34652&view=rev
Author: aquadran
Date: 2008-09-26 17:48:46 +0000 (Fri, 26 Sep 2008)
Log Message:
-----------
calculate bounding box for each actor
Modified Paths:
--------------
residual/trunk/engine/actor.cpp
residual/trunk/engine/actor.h
residual/trunk/engine/backend/platform/sdl/driver_gl.cpp
residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp
residual/trunk/engine/model.cpp
Modified: residual/trunk/engine/actor.cpp
===================================================================
--- residual/trunk/engine/actor.cpp 2008-09-26 11:59:46 UTC (rev 34651)
+++ residual/trunk/engine/actor.cpp 2008-09-26 17:48:46 UTC (rev 34652)
@@ -41,6 +41,8 @@
#include <cmath>
#include <cstring>
+int g_winX1, g_winY1, g_winX2, g_winY2;
+
Actor::Actor(const char *name) :
_name(name), _setName(""), _talkColor(255, 255, 255), _pos(0, 0, 0),
// Some actors don't set walk and turn rates, so we default the
@@ -60,6 +62,8 @@
_talkSoundName = "";
_activeShadowSlot = -1;
_shadowArray = new Shadow[5];
+ _winX1 = _winY1 = 1000;
+ _winX2 = _winY2 = -1000;
for (int i = 0; i < 5; i++) {
_shadowArray[i].active = false;
@@ -601,6 +605,9 @@
}
void Actor::draw() {
+ g_winX1 = g_winY1 = 1000;
+ g_winX2 = g_winY2 = -1000;
+
for (std::list<Costume *>::iterator i = _costumeStack.begin(); i != _costumeStack.end(); i++)
(*i)->setupTextures();
@@ -651,8 +658,11 @@
g_driver->setShadow(NULL);
}
}
-
}
+ _winX1 = g_winX1;
+ _winX2 = g_winX2;
+ _winY1 = g_winY1;
+ _winY2 = g_winY2;
}
// "Undraw objects" (handle objects for actors that may not be on screen)
Modified: residual/trunk/engine/actor.h
===================================================================
--- residual/trunk/engine/actor.h 2008-09-26 11:59:46 UTC (rev 34651)
+++ residual/trunk/engine/actor.h 2008-09-26 17:48:46 UTC (rev 34652)
@@ -41,6 +41,8 @@
typedef std::list<Sector *> SectorListType;
+extern int g_winX1, g_winY1, g_winX2, g_winY2;
+
struct Shadow {
std::string name;
Vector3d pos;
@@ -228,6 +230,8 @@
Vector3d _lookAtVector;
float _lookAtRate;
+ int _winX1, _winY1, _winX2, _winY2;
+
friend class Engine;
};
Modified: residual/trunk/engine/backend/platform/sdl/driver_gl.cpp
===================================================================
--- residual/trunk/engine/backend/platform/sdl/driver_gl.cpp 2008-09-26 11:59:46 UTC (rev 34651)
+++ residual/trunk/engine/backend/platform/sdl/driver_gl.cpp 2008-09-26 17:48:46 UTC (rev 34652)
@@ -183,8 +183,13 @@
}
void DriverGL::getBoundingBoxPos(const Model::Mesh *model, int *x1, int *y1, int *x2, int *y2) {
- if (_currentShadowArray)
+ if (_currentShadowArray) {
+ *x1 = -1;
+ *y1 = -1;
+ *x2 = -1;
+ *y2 = -1;
return;
+ }
GLfloat top = 1000;
GLfloat right = -1000;
Modified: residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp
===================================================================
--- residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp 2008-09-26 11:59:46 UTC (rev 34651)
+++ residual/trunk/engine/backend/platform/sdl/driver_tinygl.cpp 2008-09-26 17:48:46 UTC (rev 34652)
@@ -276,8 +276,13 @@
}
void DriverTinyGL::getBoundingBoxPos(const Model::Mesh *model, int *x1, int *y1, int *x2, int *y2) {
- if (_currentShadowArray)
+ if (_currentShadowArray) {
+ *x1 = -1;
+ *y1 = -1;
+ *x2 = -1;
+ *y2 = -1;
return;
+ }
TGLfloat top = 1000;
TGLfloat right = -1000;
@@ -383,7 +388,22 @@
if (_currentShadowArray) {
tglSetShadowMaskBuf(NULL);
- }
+ }/* else {
+ uint16 *dst = (uint16 *)_zb->pbuf;
+ uint16 c = 0xffff;
+ for (int x = g_winX1; x <= g_winX2; x++) {
+ WRITE_LE_UINT16(dst + 640 * g_winY1 + x, c);
+ }
+ for (int x = g_winX1; x <= g_winX2; x++) {
+ WRITE_LE_UINT16(dst + 640 * g_winY2 + x, c);
+ }
+ for (int y = g_winY1; y <= g_winY2; y++) {
+ WRITE_LE_UINT16(dst + 640 * y + g_winX1, c);
+ }
+ for (int y = g_winY1; y <= g_winY2; y++) {
+ WRITE_LE_UINT16(dst + 640 * y + g_winX2, c);
+ }
+ }*/
}
void DriverTinyGL::drawShadowPlanes() {
Modified: residual/trunk/engine/model.cpp
===================================================================
--- residual/trunk/engine/model.cpp 2008-09-26 11:59:46 UTC (rev 34651)
+++ residual/trunk/engine/model.cpp 2008-09-26 17:48:46 UTC (rev 34652)
@@ -505,6 +505,12 @@
void Model::Mesh::draw() const {
int winX1, winY1, winX2, winY2;
g_driver->getBoundingBoxPos(this, &winX1, &winY1, &winX2, &winY2);
+ if (winX1 != -1 && winY1 != -1 && winX2 != -1 && winY2 != -1) {
+ g_winX1 = MIN(g_winX1, winX1);
+ g_winY1 = MIN(g_winY1, winY1);
+ g_winX2 = MAX(g_winX2, winX2);
+ g_winY2 = MAX(g_winY2, winY2);
+ }
for (int i = 0; i < _numFaces; i++)
_faces[i].draw(_vertices, _vertNormals, _textureVerts);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list