summaryrefslogtreecommitdiff
path: root/common/pieceinf.cpp
diff options
context:
space:
mode:
authorleo2006-03-03 04:57:48 +0000
committerleo2006-03-03 04:57:48 +0000
commitd0c2d843884b2428cbdb72e1ba0ffe3366be86a1 (patch)
tree4c33a01e80e4adbe40a82d77d20d9d90b5063f1b /common/pieceinf.cpp
parent0e8d92ba0e35b7b5884a1c4db2a660244b4a8a08 (diff)
Delay creation of display lists until needed.
git-svn-id: http://svn.leocad.org/trunk@507 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'common/pieceinf.cpp')
-rw-r--r--common/pieceinf.cpp83
1 files changed, 45 insertions, 38 deletions
diff --git a/common/pieceinf.cpp b/common/pieceinf.cpp
index a31d414..eee37e4 100644
--- a/common/pieceinf.cpp
+++ b/common/pieceinf.cpp
@@ -217,6 +217,7 @@ void PieceInfo::LoadIndex (File& file)
m_pGroups = NULL;
m_nTextureCount = 0;
m_pTextures = NULL;
+ m_nBoxList = 0;
file.Read (m_strName, 8);
m_strName[8] = '\0';
@@ -243,7 +244,7 @@ void PieceInfo::LoadIndex (File& file)
m_fDimensions[5] = (float)sh[5]/scale;
}
-GLuint PieceInfo::AddRef()
+void PieceInfo::AddRef()
{
if (m_nRef == 0)
LoadInformation();
@@ -253,8 +254,6 @@ GLuint PieceInfo::AddRef()
if (m_pTextures[i].texture != NULL)
m_pTextures[i].texture->AddRef(false);
// TODO: get correct filter paramenter
-
- return m_nBoxList;
}
void PieceInfo::DeRef()
@@ -268,6 +267,49 @@ void PieceInfo::DeRef()
FreeInformation();
}
+void PieceInfo::CreateBoxDisplayList()
+{
+ if (m_nBoxList)
+ return;
+
+ // Create a display for the bounding box.
+ m_nBoxList = glGenLists(1);
+ glNewList(m_nBoxList, GL_COMPILE);
+ glEnableClientState(GL_VERTEX_ARRAY);
+
+ float box[24][3] =
+ {
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] },
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
+ { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
+ { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
+ { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] }
+ };
+
+ glVertexPointer(3, GL_FLOAT, 0, box);
+ glDrawArrays(GL_QUADS, 0, 24);
+ glEndList();
+}
+
void PieceInfo::LoadInformation()
{
FileDisk bin;
@@ -285,41 +327,6 @@ void PieceInfo::LoadInformation()
// We don't want memory leaks.
FreeInformation ();
- // Create a display for the bounding box.
- m_nBoxList = glGenLists(1);
- glNewList(m_nBoxList, GL_COMPILE);
- glEnableClientState(GL_VERTEX_ARRAY);
-
- float box[24][3] = {
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] },
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[5] },
- { m_fDimensions[3], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[1], m_fDimensions[2] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[2] },
- { m_fDimensions[3], m_fDimensions[4], m_fDimensions[5] },
- { m_fDimensions[0], m_fDimensions[4], m_fDimensions[5] }
- };
- glVertexPointer (3, GL_FLOAT, 0, box);
- glDrawArrays (GL_QUADS, 0, 24);
- glEndList ();
-
// Open pieces.bin and buffer the information we need.
strcpy (filename, lcGetPiecesLibrary()->GetLibraryPath());
strcat (filename, "pieces.bin");