From d0c2d843884b2428cbdb72e1ba0ffe3366be86a1 Mon Sep 17 00:00:00 2001 From: leo Date: Fri, 3 Mar 2006 04:57:48 +0000 Subject: Delay creation of display lists until needed. git-svn-id: http://svn.leocad.org/trunk@507 c7d43263-9d01-0410-8a33-9dba5d9f93d6 --- common/pieceinf.cpp | 83 +++++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 38 deletions(-) (limited to 'common/pieceinf.cpp') 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"); -- cgit v1.2.3