From: <axl...@us...> - 2009-08-23 12:42:43
|
Revision: 520 http://hgengine.svn.sourceforge.net/hgengine/?rev=520&view=rev Author: axlecrusher Date: 2009-08-23 12:42:36 +0000 (Sun, 23 Aug 2009) Log Message: ----------- Fix bug where texture could only be used in one active texture location at a time. Modified Paths: -------------- Mercury2/src/Texture.cpp Mercury2/src/Texture.h Modified: Mercury2/src/Texture.cpp =================================================================== --- Mercury2/src/Texture.cpp 2009-08-23 12:12:13 UTC (rev 519) +++ Mercury2/src/Texture.cpp 2009-08-23 12:42:36 UTC (rev 520) @@ -40,7 +40,7 @@ { if (m_lastBound[i] == this) { - Deactivate(); + Deactivate(GL_TEXTURE0 + i); m_lastBound[i] = 0; } } @@ -55,6 +55,7 @@ // m_raw = raw; GLenum byteType = ToGLColorType( m_raw->m_ColorByteType ); + GLCALL( glPushAttrib( GL_TEXTURE_BIT ) ); GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); /* glTexImage2D(GL_TEXTURE_2D, @@ -79,6 +80,9 @@ // GLCALL( gluBuild2DMipmaps( GL_TEXTURE_2D, 3, m_raw->m_width, m_raw->m_height, ByteType, GL_UNSIGNED_BYTE, m_raw->m_data ) ); SAFE_DELETE(m_raw); + + GLCALL( glPopAttrib() ); + }; void Texture::Render(const MercuryNode* node) @@ -116,15 +120,13 @@ if (m_numActiveTextures >= m_maxActiveTextures) return; - m_textureResource = GL_TEXTURE0+m_numActiveTextures; - -// if (m_lastBound[m_numActiveTextures] != this) + if (m_lastBound[m_numActiveTextures] != this) { // We don't really even have to disable old spots // if ( m_lastBound[m_numActiveTextures] != NULL) // m_lastBound[m_numActiveTextures]->Deactivate(); - Activate(); + Activate(GL_TEXTURE0 + m_numActiveTextures); GLCALL( glBindTexture(GL_TEXTURE_2D, m_textureID) ); @@ -148,34 +150,26 @@ void Texture::UnbindTexture() { - /* - GLCALL( glActiveTexture( m_textureResource ) ); - GLCALL( glClientActiveTextureARB(m_textureResource) ); - GLCALL( glDisableClientState(GL_TEXTURE_COORD_ARRAY) ); - GLCALL( glDisable( GL_TEXTURE_2D ) ); - GLERRORCHECK; - */ +// Deactivate(m_textureResource); - Deactivate(); - Shader::RemoveAttribute( ssprintf("HG_Texture%d", m_numActiveTextures) ); m_activeTextures.pop_back(); --m_numActiveTextures; } -void Texture::Activate() +void Texture::Activate(uint32_t textureResource) { - GLCALL( glActiveTexture( m_textureResource ) ); - GLCALL( glClientActiveTextureARB(m_textureResource) ); + GLCALL( glActiveTexture( textureResource ) ); + GLCALL( glClientActiveTextureARB(textureResource) ); GLCALL( glEnableClientState(GL_TEXTURE_COORD_ARRAY) ); GLCALL( glEnable( GL_TEXTURE_2D ) ); } -void Texture::Deactivate() +void Texture::Deactivate(uint32_t textureResource) { - GLCALL( glActiveTexture( m_textureResource ) ); - GLCALL( glClientActiveTextureARB(m_textureResource) ); + GLCALL( glActiveTexture( textureResource ) ); + GLCALL( glClientActiveTextureARB(textureResource) ); GLCALL( glDisableClientState(GL_TEXTURE_COORD_ARRAY) ); GLCALL( glDisable( GL_TEXTURE_2D ) ); GLERRORCHECK; @@ -190,7 +184,7 @@ GLCALL( glTexCoordPointer(2, GL_FLOAT, stride, BUFFER_OFFSET(sizeof(float)*0)) ); } -// Texture::DisableUnusedTextures(); + Texture::DisableUnusedTextures(); } void Texture::DisableUnusedTextures() @@ -199,7 +193,7 @@ { if (m_lastBound[m_numActiveTextures] != NULL) { - m_lastBound[m_numActiveTextures]->Deactivate(); + m_lastBound[m_numActiveTextures]->Deactivate(GL_TEXTURE0 + i); m_lastBound[m_numActiveTextures] = NULL; } } Modified: Mercury2/src/Texture.h =================================================================== --- Mercury2/src/Texture.h 2009-08-23 12:12:13 UTC (rev 519) +++ Mercury2/src/Texture.h 2009-08-23 12:42:36 UTC (rev 520) @@ -40,14 +40,13 @@ void BindTexture(); void UnbindTexture(); - void Activate(); - void Deactivate(); + void Activate(uint32_t textureResource); + void Deactivate(uint32_t textureResource); void InitiateBindCache(); const RawImageData* m_raw; uint32_t m_textureID; - uint32_t m_textureResource; static bool m_initTextureSuccess; static uint8_t m_numActiveTextures; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |