Login  Register

Re: Texture NPOT

Posted by paolofuse on Sep 14, 2015; 1:32pm
URL: https://forum.jogamp.org/Texture-NPOT-tp4035280p4035303.html

private Texture texture;
private int[] vexVBO, texVBO;

public void init(GLAutoDrawable drawable)
{
       GL2 gl = drawable.getGL().getGL2();

       try
                {
                        // enable GL_TEXTURE_RECTANGLE_ARB
                        gl.glEnable(GL2.GL_TEXTURE_RECTANGLE_ARB);

                        texture = TextureIO.newTexture(new File(filename), true);
                       
                        FloatBuffer vex = Buffers.newDirectFloatBuffer(new float[]{
                            0.0f, 0.0f, 0.0f,
                            texture.getWidth(), 0.0f, 0.0f,
                            texture.getWidth(), texture.getHeight(), 0.0f,
                            0.0f, texture.getHeight(), 0.0f
                        });
                        FloatBuffer tex = Buffers.newDirectFloatBuffer(new float[]{
                            0.0f, 0.0f,
                            1.0f, 0.0f,
                            1.0f, 1.0f,
                            0.0f, 1.0f
                        });
                       
                        vexVBO = new int[1];
                        gl.glGenBuffers(1, vexVBO, 0);
                        gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vexVBO[0]);
                        gl.glBufferData(GL2.GL_ARRAY_BUFFER, numVex * 3 * Buffers.SIZEOF_FLOAT, vex, GL2.GL_STATIC_DRAW);
                       
                        texVBO = new int[1];
                        gl.glGenBuffers(1, texVBO, 0);
                        gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, texVBO[0]);
                        gl.glBufferData(GL2.GL_ARRAY_BUFFER, numVex * 2 * Buffers.SIZEOF_FLOAT, tex, GL2.GL_STATIC_DRAW);
                }
                catch (Exception e)
                {
                        e.printStackTrace();
                }
}

public void display(GLAutoDrawable drawable)
{
        GL2 gl = drawable.getGL().getGL2();
        gl.glClearColor(1f, 1f, 1f, 1f);
        gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);

        texture.enable(gl);
        texture.bind(gl);
        gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
        gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, vexVBO[0]);
        gl.glVertexPointer(3, GL2.GL_FLOAT, 0, 0l);
        gl.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY);
        gl.glBindBuffer(GL2.GL_ARRAY_BUFFER, texVBO[0]);
        gl.glTexCoordPointer(2, GL2.GL_FLOAT, 0, 0l);
        gl.glDrawArrays(GL2.GL_TRIANGLE_FAN, 0, 4);
        texture.disable(gl);
}

Enabling GL_TEXTURE_RECTANGLE_ARB makes no work both POT and NPOT textures.