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.