Hello,
I’ve been reading this site for a few weeks now and I decided to join and ask a question.
I managed to complete a basic breakout game with 3D cubes for the ball and blocks.
I wanted to try texturing and decided to try and create a simple card game.
For the card I wanted a picture of a character with their statistics represented by numbers overlaid on top.
I created the card by creating a thin cube and managed to put a test grid texture on it.
However i’ll need a number texture to appear on top (and perhaps may need some opacity, but that will be the next step)
Within the card object I have this…
private void setUpTextures()
{
texIds[0] = this.loadPNGTexture("res/textures/grid.png", GL13.GL_TEXTURE0);
texIds[1] = this.loadPNGTexture("res/textures/7.png", GL13.GL_TEXTURE1);
GameUtils.exitOnGLError("setupTexture");
}
Which calls the loadPNGTexture where it loads a texture and runs this code
// Create a new texture object in memory and bind it
int texId = GL11.glGenTextures();
GL13.glActiveTexture(textureUnit);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texId);
// All RGB bytes are aligned to each other and each component is 1 byte
GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1);
// Upload the texture data and generate mip maps (for scaling)
GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGB, tWidth, tHeight, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buf);
GL30.glGenerateMipmap(GL11.GL_TEXTURE_2D);
// Setup the ST coordinate system
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
// Setup what to do when the texture has to be scaled
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR_MIPMAP_LINEAR);
GameUtils.exitOnGLError("loadPNGTexture");
return texId;
Then finally during render
It calls this sections, binds it to the vao, binds buffer, then draws the vertices.
GL20.glUseProgram(programId);
// Bind the texture
GL13.glActiveTexture(GL13.GL_TEXTURE0);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texIds[textureSelector]);
GL13.glActiveTexture(GL13.GL_TEXTURE1);
// GL11.glEnable(GL11.GL_TEXTURE_2D); // define the type of texture
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texIds[1]);
// GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_DECAL);
But I cannot render the texture in GL_TEXTURE1, even when disabling GL_TEXTURE0
One example I found used the lines which I have commented out but they throw “Invalid enum” error.
The second texture will render, but only if a use GL_TEXTURE0
When googling layer / multi textures I do get a lot of results regarding shaders, is this the only where to acheive the requires results?
Any help would be appreciated, thanks.