LWJGL Textures not rendering

I am trying to figure out why I can't get any textures to render with LWJGL 3. I've tried multiple ways to load (PNGDecoder, STB, BufferedImage) and to render textures. But the result is always a white quad.

Main Class:

public static void main(String[] args)
{
    glfwInit();
    window = glfwCreateWindow(640, 480, "TEST", 0, 0);
    glfwShowWindow(window);
    glfwMakeContextCurrent(window);
    GL.createCapabilities();

    GL11.glEnable(GL11.GL_TEXTURE_2D);

    Loader loader = new Loader();
    TestRenderer renderer = new TestRenderer();
    ModelTexture texture = new ModelTexture(loader.loadTextureManual("blue"));
    while(!glfwWindowShouldClose(window))
    {
        glfwPollEvents();
        renderer.prepare();
        renderer.renderWithFixedFunctions(texture);
        glfwSwapBuffers(window);
        clearErrorBuffer(true);
    }
    loader.cleanUp();
}

Loading Method:

    public int loadTextureManual(String fileName)
{
    String imagePath = "./res/" + fileName + ".png";
    try {
        System.out.println("Trying to load texture ""+imagePath+""");

        BufferedImage bi = ImageIO.read(new File(imagePath));
        int width = bi.getWidth();
        int height = bi.getHeight();

        int[] pixels_raw = new int[width*height];
        pixels_raw = bi.getRGB(0, 0, width, height, null, 0, width);

        ByteBuffer pixels = BufferUtils.createByteBuffer(width*height*4);

        for(int i = 0; i < width; i++)
        {
            for(int j = 0; j < height; j++)
            {
                int pixel = pixels_raw[i*width+j];
                pixels.put((byte) ((pixel >> 16) & 0xFF));  //RED
                pixels.put((byte) ((pixel >> 8) & 0xFF));   //GREEN
                pixels.put((byte) ((pixel) & 0xFF));        //BLUE
                pixels.put((byte) ((pixel >> 24) & 0xFF));  //ALPHA
            }
        }

        pixels.flip();

        byte[] info = new byte[pixels.capacity()];
        pixels.get(info);

        int textureID = GL11.glGenTextures();

        if(GL.getCapabilities().GL_EXT_texture_filter_anisotropic)
        {
            float amount = Math.min(ANISOTROPIC_FILTERING_AMOUNT, GL11.glGetFloat(EXTTextureFilterAnisotropic.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT));
            GL11.glTexParameterf(GL11.GL_TEXTURE_2D, EXTTextureFilterAnisotropic.GL_TEXTURE_MAX_ANISOTROPY_EXT, amount);
        }
        else
        {
            System.out.println("Anisotropic filtering not supported!");
        }

        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, width, height, 0,
                GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, pixels);

        GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureID);

        return textureID;
    }
    catch (Exception e)
    {
        e.printStackTrace();
        System.err.println("Couldn'l load texture ""+imagePath+""");
        System.exit(-1);
    }
    return 0;
}

Rendering Method:

public void renderWithFixedFunctions(ModelTexture texture)
{
    glBindTexture(GL_TEXTURE_2D, texture.getID());
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(-0.5f, 0.5f);

    glTexCoord2f(0, 1);
    glVertex2f(0.5f, 0.5f);

    glTexCoord2f(1, 1);
    glVertex2f(0.5f, -0.5f);

    glTexCoord2f(1, 0);
    glVertex2f(-0.5f, -0.5f);
    glEnd();
}

The ModelTexture class just stores some info that is not used right now and the blue.png is 16x16 png file.

This is the output that I get when starting the program:

截图


Looks like an incomplete texture.

Set GL_TEXTURE_MIN_FILTER to GL_NEAREST or GL_LINEAR (default is GL_NEAREST_MIPMAP_LINEAR ) or upload a complete mipmap chain.

链接地址: http://www.djcxy.com/p/34042.html

上一篇: OpenGL(LWJGL):渲染到纹理不起作用

下一篇: LWJGL纹理不渲染