|
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.
|