multitexturing + vertex arrays
-
Hi!
Ich wollt meine Sprite-REnderfunktion Multitexturing fähig machen, zuerst ohne Vertex Arrays was mit glActiveTextureARB(...) gut klappte. Und jetzt will ich Vertex Arrays auch noch verwenden, dazu muss man ja glClientActiveTextureARB(...) verwenden, aber irgendwie funzt das nicht, hier mal der Code:void CSprite::OnRender() { if(m_Show) { int TextureStage=0; glLoadIdentity(); glPopMatrix(); glPushMatrix(); glTranslatef(vCenter.v[0], vCenter.v[1],vCenter.v[2]); glScalef(vScale.v[0], vScale.v[1], vScale.v[2]); glVertexPointer(3, GL_FLOAT, sizeof(CVector3D), &vertices[0].v[0]); glEnableClientState(GL_VERTEX_ARRAY); //Iterator auf Begin der Liste setzten pShader->Textures = pShader->Texturelist.begin(); while(pShader->Textures!=pShader->Texturelist.end()) { for (TextureStage=0; TextureStage < maxTextureUnits; ++TextureStage) { //Kein neues Unit muss aktiviert werden, weil maximale Anzahl der //Texturen schon erreicht ist if(pShader->Textures==pShader->Texturelist.end()) break; //Neues Unit aktivieren, TexCoords setzten etc. glClientActiveTextureARB(GL_TEXTURE0_ARB+TextureStage); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glTexCoordPointer(2, GL_FLOAT, sizeof(CTexcoord), &texcoords[0].t[0]); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //Aktuelle Texture auswählen (*pShader->Textures)->Texture.Bind(); //Texture um eins erhöhen ++pShader->Textures; } //Objekt zeichnen glDrawElements(TypeOfMesh, Size, GL_UNSIGNED_INT, &indices[0]); //Neuen Pass mit altem überblenden glEnable(GL_BLEND); } glClientActiveTextureARB(GL_TEXTURE1_ARB); glClientActiveTextureARB(GL_TEXTURE0_ARB); glDisable(GL_BLEND); } }
Mein Problem ist, dass trotzdem nur die letzt Textur verwendet wird...
thx im vorraus
cu
-
okay, ich habs: glClientActiveTextureARB(...) ist nur um die Texturkoordinaten zu verwenden, danach muss noch glActiveTextureARB(..) aufgerufen werden...