Search code examples
lwjglvboslick2d

Try to add VBO in Slick2D


I'm trying to add VBO in slick2D. All I find on the web is how to initialize VBO in a 3D context. Anyone knows how to do it in 2D ?

My actual test (make 4 square in slick context) make this (i add corrds in black) : vbo in slick2D
(source: canardpc.com)
.

Below my init (in the init method of my GameState) :

// set up OpenGL
GL11.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
            
GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY);
GL11.glEnableClientState(GL11.GL_COLOR_ARRAY);
    
GL11.glMaterial(GL11.GL_FRONT, GL11.GL_SPECULAR, floatBuffer(1.0f, 1.0f, 1.0f, 1.0f));
GL11.glMaterialf(GL11.GL_FRONT, GL11.GL_SHININESS, 25.0f);
    
// set up the camera
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
    
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
    
// create our vertex buffer objects
IntBuffer buffer = BufferUtils.createIntBuffer(1);
GL15.glGenBuffers(buffer);
    
int vertex_buffer_id = buffer.get(0);
FloatBuffer vertex_buffer_data = BufferUtils.createFloatBuffer(vertex_data_array.length);
vertex_buffer_data.put(vertex_data_array);
vertex_buffer_data.rewind();
    
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer_data, GL15.GL_STATIC_DRAW);

And the render (in the render method of game state) :

g.setDrawMode(Graphics.MODE_ALPHA_BLEND) ;
        
// perform rotation transformations
GL11.glPushMatrix();

// render the cube
GL11.glVertexPointer(3, GL11.GL_FLOAT, 28, 0);
GL11.glColorPointer(4, GL11.GL_FLOAT, 28, 12);

GL11.glDrawArrays(GL11.GL_QUADS, 0, vertex_data_array.length / 7);

// restore the matrix to pre-transformation values
GL11.glPopMatrix();

I think something wrong because all other render disappear (text and sprites) and coords are not window size anymore.

edit : I try something like this GL11.glOrtho(0,800,600,0,-1,1); with strange result

Thanks


Solution

  • I resolv the issue by adding GL11.glOrtho(0,800,600,0,-1,1); and disabling glEnableClientState (glDisableClientState).

    But I will finally move to libgdx framework whoes do that natively.