質問

I'm drawing a texture quad, but the texture used is one that was bound previously, even if I'm trying to bind a new texture.

Creating the texture in GuiHandler.java

    tex = GL11.glGenTextures();
    InputStream in = null;
    try {
        in = new FileInputStream(new File("res/gui.png"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    PNGDecoder decoder = null;
    try {
        decoder = new PNGDecoder(in);
    } catch (IOException e) {
        e.printStackTrace();
    }
    ByteBuffer buffer = BufferUtils.createByteBuffer(4 * decoder.getWidth()
            * decoder.getHeight());
    try {
        decoder.decode(buffer, decoder.getWidth() * 4,
                PNGDecoder.Format.RGBA);
    } catch (IOException e) {
        e.printStackTrace();
    }
    buffer.flip();
    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);
    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0,
            GL11.GL_RGB8, decoder.getWidth(), decoder.getHeight(), 0,
            GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, buffer);

The rendering code

GL11.glPushAttrib(GL11.GL_TEXTURE_BINDING_2D);
    GL11.glLoadIdentity();
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glBindTexture(GL11.GL_TEXTURE_2D, GuiHandler.tex);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex2f(gui.getX(), gui.getY());
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex2f(gui.getX()+gui.getWidth(), gui.getY());
    GL11.glTexCoord2f(1, 1);
    GL11.glVertex2f(gui.getX()+gui.getWidth(), gui.getY()+gui.getHeight());
    GL11.glTexCoord2f(0, 1);
    GL11.glVertex2f(gui.getX(), gui.getY()+gui.getHeight());
    //GL11.glRectf(gui.getX(), gui.getY(), gui.getWidth()+gui.getWidth(), gui.getY() + gui.getHeight());
    GL11.glEnd();
    GL11.glPopAttrib();

Does anyone know why a previously bound texture is being used instead of the right one? P.S I'm using LWJGL

正しい解決策はありません

他のヒント

Your texture creation code does actually not bind the newly created texture object, but updates the one previously bound.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top