Example usage for org.lwjgl.opengl ARBVertexArrayObject glBindVertexArray

List of usage examples for org.lwjgl.opengl ARBVertexArrayObject glBindVertexArray

Introduction

In this page you can find the example usage for org.lwjgl.opengl ARBVertexArrayObject glBindVertexArray.

Prototype

public static void glBindVertexArray(@NativeType("GLuint") int array) 

Source Link

Document

Binds a vertex array object

Usage

From source file:jpcsp.graphics.RE.RenderingEngineLwjgl.java

License:Open Source License

@Override
public void bindVertexArray(int id) {
    ARBVertexArrayObject.glBindVertexArray(id);
}

From source file:org.lwjgl.demo.opengl.instancing.GrassDemo.java

License:Open Source License

private void render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // Render ground
    glUseProgram(groundProgram);//from w  w  w . ja  va 2  s.c o m
    glUniformMatrix4fv(groundVpMatrixUniform, false, vpMatrix.get(mat4Buffer));
    ARBVertexArrayObject.glBindVertexArray(groundVao);
    glDrawArrays(GL_TRIANGLES, 0, 6);
    ARBVertexArrayObject.glBindVertexArray(0);
    // Render grass patches
    glUseProgram(grassProgram);
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, grassTex0);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, grassTex1);
    glActiveTexture(GL_TEXTURE2);
    glBindTexture(GL_TEXTURE_2D, grassTex2);
    glActiveTexture(GL_TEXTURE3);
    glBindTexture(GL_TEXTURE_2D, grassTex3);
    glUniformMatrix4fv(grassVpMatrixUniform, false, vpMatrix.get(mat4Buffer));
    ARBVertexArrayObject.glBindVertexArray(grassVao);
    ARBDrawInstanced.glDrawArraysInstancedARB(GL_TRIANGLES, 0, 6 * NUM_FACES_PER_PATCH, NUM_GRASS_PATCHES);
    ARBVertexArrayObject.glBindVertexArray(0);
    glUseProgram(0);
    glActiveTexture(GL_TEXTURE0);
}

From source file:org.lwjgl.demo.opengl.instancing.GrassDemo.java

License:Open Source License

private void generateGroundVao() {
    FloatBuffer fb = BufferUtils.createFloatBuffer(6 * 2);
    fb.put(0).put(0);/*from w  ww  . j ava2s  . co  m*/
    fb.put(1).put(0);
    fb.put(1).put(1);
    fb.put(1).put(1);
    fb.put(0).put(1);
    fb.put(0).put(0);
    fb.flip();
    groundVao = ARBVertexArrayObject.glGenVertexArrays();
    ARBVertexArrayObject.glBindVertexArray(groundVao);
    int modelBuffer = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, modelBuffer);
    glBufferData(GL_ARRAY_BUFFER, fb, GL_STATIC_DRAW);
    glVertexAttribPointer(groundPositionAttribute, 2, GL_FLOAT, false, 0, 0L);
    glEnableVertexAttribArray(groundPositionAttribute);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    ARBVertexArrayObject.glBindVertexArray(0);
}

From source file:org.lwjgl.demo.opengl.instancing.GrassDemo.java

License:Open Source License

private void generateGrassPatchVao() {
    int n = NUM_FACES_PER_PATCH;
    // Generate the model attributes of a single grass patch
    FloatBuffer fb = BufferUtils.createFloatBuffer(NUM_FACES_PER_PATCH * 6 * (3 + 2));
    for (int i = 0; i < n; i++) {
        float x0 = (float) (Math.cos((double) i / n * Math.PI)) * 0.5f;
        float z0 = (float) (Math.sin((double) i / n * Math.PI)) * 0.5f;
        float x1 = (float) (Math.cos((double) i / n * Math.PI + Math.PI)) * 0.5f;
        float z1 = (float) (Math.sin((double) i / n * Math.PI + Math.PI)) * 0.5f;
        fb.put(x0).put(0.0f).put(z0).put(0).put(1);
        fb.put(x1).put(0.0f).put(z1).put(1).put(1);
        fb.put(x1).put(1.0f).put(z1).put(1).put(0);
        fb.put(x1).put(1.0f).put(z1).put(1).put(0);
        fb.put(x0).put(1.0f).put(z0).put(0).put(0);
        fb.put(x0).put(0.0f).put(z0).put(0).put(1);
    }//from   w  w w . j a va  2s.  c o  m
    fb.flip();
    // Generate the world-space positions of each patch
    final FloatBuffer pb = BufferUtils.createFloatBuffer(NUM_GRASS_PATCHES * 4);
    new BestCandidateSampling.Quad(0L, NUM_GRASS_PATCHES, 20, new Callback2d() {
        final Random rnd = new Random(0L);
        int index = 0;

        public void onNewSample(float x, float y) {
            float px = x * MEADOW_SIZE;
            float py = y * MEADOW_SIZE;
            grassPatchPositions[index++] = new Vector2f(px, py);
            pb.put(x * MEADOW_SIZE).put(y * MEADOW_SIZE).put(rnd.nextFloat() * 0.2f + 0.9f)
                    .put((SimplexNoise.noise(x * 2.342f, y * 2.0352f) + 1.0f) * 0.5f);
        }
    });
    pb.flip();
    // Generate the random rotations for each grass patch
    FloatBuffer rb = BufferUtils.createFloatBuffer(NUM_GRASS_PATCHES * 4);
    Random rnd = new Random();
    Matrix3x2f m = new Matrix3x2f();
    for (int i = 0; i < NUM_GRASS_PATCHES; i++) {
        float angle = 2.0f * (float) Math.PI * rnd.nextFloat();
        m.rotation(angle);
        rb.put(m.m00).put(m.m01).put(m.m10).put(m.m11);
    }
    rb.flip();
    grassVao = ARBVertexArrayObject.glGenVertexArrays();
    ARBVertexArrayObject.glBindVertexArray(grassVao);
    int modelBuffer = glGenBuffers();
    int grassBladesPositionsVbo = glGenBuffers();
    grassDisplacementVbo = glGenBuffers();
    int grassRotationVbo = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, modelBuffer);
    glBufferData(GL_ARRAY_BUFFER, fb, GL_STATIC_DRAW);
    glVertexAttribPointer(grassPositionAttribute, 3, GL_FLOAT, false, 4 * (3 + 2), 0L);
    glVertexAttribPointer(grassTexCoordAttribute, 2, GL_FLOAT, false, 4 * (3 + 2), 4 * 3L);
    glEnableVertexAttribArray(grassPositionAttribute);
    glEnableVertexAttribArray(grassTexCoordAttribute);
    glBindBuffer(GL_ARRAY_BUFFER, grassBladesPositionsVbo);
    glBufferData(GL_ARRAY_BUFFER, pb, GL_STATIC_DRAW);
    glVertexAttribPointer(grassWorldPositionAttribute, 4, GL_FLOAT, false, 0, 0L);
    ARBInstancedArrays.glVertexAttribDivisorARB(grassWorldPositionAttribute, 1);
    glEnableVertexAttribArray(grassWorldPositionAttribute);
    glBindBuffer(GL_ARRAY_BUFFER, grassDisplacementVbo);
    glBufferData(GL_ARRAY_BUFFER, 4 * 2 * NUM_GRASS_PATCHES, GL_STATIC_DRAW);
    glVertexAttribPointer(grassDisplacementAttribute, 2, GL_FLOAT, false, 0, 0L);
    ARBInstancedArrays.glVertexAttribDivisorARB(grassDisplacementAttribute, 1);
    glEnableVertexAttribArray(grassDisplacementAttribute);
    glBindBuffer(GL_ARRAY_BUFFER, grassRotationVbo);
    glBufferData(GL_ARRAY_BUFFER, rb, GL_STATIC_DRAW);
    glVertexAttribPointer(grassRotationAttribute, 4, GL_FLOAT, false, 0, 0L);
    ARBInstancedArrays.glVertexAttribDivisorARB(grassRotationAttribute, 1);
    glEnableVertexAttribArray(grassRotationAttribute);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    ARBVertexArrayObject.glBindVertexArray(0);
}