Archived

This topic is now archived and is closed to further replies.

Help with Texture Manager

This topic is 5093 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm having a trouble finding what's wrong with the following code, it's supposed to render a textured tilemap that's loaded in memory. It loads the map and renders the quads correctly, but the quads aren't textured. NOTE: Whenever I read in the textures from the map file I put them into a class (CTexture) and push them into a vector. The constructor for the CTexture class generates a texname (OGL) and stores it in the class. I'm sure I've done something stupid somewhere. Anyways here's the code: Map Rendering code:
    int dataIndex = 0;
    int Data;

    for (int rowIndex = 0; rowIndex < Maps[0].getRows(); rowIndex++) {
        for (int colIndex = 0; colIndex < Maps[0].getCols(); colIndex++) {          
            Data = Maps[0].getData(dataIndex);  
            Render->drawQuad(QUAD_ISO, Maps[0].getTexture(Data));
            Render->setRenderPosition(1.0, -0.5, 0.0);
            dataIndex++;
        }
        Render->setRenderPosition((float)(((Maps[0].getCols())*-1.0)-1), (float)(((Maps[0].getCols())*0.5)-0.5), 0.0);
  }
Map Functions:
         
CTexture *CMap::getTexture(int ID) {
    for (int texIndex = 0; texIndex < texNum; texIndex++) {
        if (Textures[texIndex].getID()) { return(&Textures[texIndex]); }
    }

    return(&Textures[0]);
}

int CMap::getData(int Cell) {    
    return(Data[Cell]);
}
Quad Rendering:
         
void CRender::drawQuad(int Type, CTexture *Texture) {
    glBindTexture(GL_TEXTURE_2D, Texture->getGID());
    switch (Type) {
        case QUAD_TILE:
            glBegin(GL_QUADS);
                glTexCoord2f(0.0, 0.0f); glVertex3f(0.0f, 0.0f,  0.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.0f,  0.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f,  0.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 1.0f,  0.0f);
            glEnd();
            break;
        case QUAD_ISO:
            glBegin(GL_QUADS);
                glTexCoord2f(0.0, 0.0f); glVertex3f(1.0f, 0.0f,  0.0f);
                glTexCoord2f(1.0f, 0.0f); glVertex3f(2.0f, 0.5f,  0.0f);
                glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f,  0.0f);
                glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 0.5f,  0.0f);
            glEnd();
            break;
        default:break;
    }
}
Maps is a vector of CMap classes Textures is a member of CMap and is vector of CTexture classes Data is a member of CMap, and is vector of integers [edited by - Dustino on January 5, 2004 11:46:47 AM]

Share this post


Link to post
Share on other sites
Well, don't shoot me for this, but this code is not very readable:


for (int colIndex = 0; colIndex < Maps[0].getCols(); colIndex++) {
Render->drawQuad(QUAD_ISO, Maps[0].getTexture(Maps[0].getData(dataIndex)));
Render->setRenderPosition(1.0, -0.5, 0.0); dataIndex++;
}
Render->setRenderPosition((float)(((Maps[0].getCols())*-1.0)-1), (float)(((Maps[0].getCols())*0.5)-0.5), 0.0);
}


I can't see what the error is, but here's a list of common mistakes:
- Textures are not sized 2^n
- Texturing is not enabled
- Lighting is incorrect (texture appears black)
- glTexEnv is not set correct

Are you sure your texture pointers aren't NULL?

Edo

[edited by - edotorpedo on January 5, 2004 6:29:31 AM]

Share this post


Link to post
Share on other sites