Java 类org.lwjgl.opengl.ARBVertexArrayObject 实例源码

项目:LWJGL-OpenGL-Utils    文件:Mesh.java   
public void render() {
    if(HAS_VAO)
        glBindVertexArray(vao);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(vao);
    else
        ARBVertexArrayObject.glBindVertexArray(vao);

    for(RenderCommand r : renderCommands)
        r.render();

    if(HAS_VAO)
        glBindVertexArray(0);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(0);
    else
        ARBVertexArrayObject.glBindVertexArray(0);
}
项目:debug    文件:DebugIT.java   
@Test
public void testNoVertexAttribPointerInOtherVAOViaExtension() {
    window = glfwCreateWindow(800, 600, "", 0L, 0L);
    glfwMakeContextCurrent(window);
    createCapabilities();
    ARBVertexShader.glEnableVertexAttribArrayARB(0);
    int vao = ARBVertexArrayObject.glGenVertexArrays();
    ARBVertexArrayObject.glBindVertexArray(vao);
    glDrawArrays(GL_POINTS, 0, 1); // <--- MUST NOT THROW
    ARBVertexArrayObject.glDeleteVertexArrays(new int[] { vao });
}
项目:PhET    文件:LwjglRenderer.java   
public void updateVertexArray(Mesh mesh) {
    int id = mesh.getId();
    if (id == -1) {
        IntBuffer temp = intBuf1;
        ARBVertexArrayObject.glGenVertexArrays(temp);
        id = temp.get(0);
        mesh.setId(id);
    }

    if (context.boundVertexArray != id) {
        ARBVertexArrayObject.glBindVertexArray(id);
        context.boundVertexArray = id;
    }

    VertexBuffer interleavedData = mesh.getBuffer(Type.InterleavedData);
    if (interleavedData != null && interleavedData.isUpdateNeeded()) {
        updateBufferData(interleavedData);
    }

    IntMap<VertexBuffer> buffers = mesh.getBuffers();
    for (Entry<VertexBuffer> entry : buffers) {
        VertexBuffer vb = entry.getValue();

        if (vb.getBufferType() == Type.InterleavedData
                || vb.getUsage() == Usage.CpuOnly // ignore cpu-only buffers
                || vb.getBufferType() == Type.Index) {
            continue;
        }

        if (vb.getStride() == 0) {
            // not interleaved
            setVertexAttrib(vb);
        } else {
            // interleaved
            setVertexAttrib(vb, interleavedData);
        }
    }
}
项目:PhET    文件:LwjglRenderer.java   
private void renderMeshVertexArray(Mesh mesh, int lod, int count) {
        if (mesh.getId() == -1){
            updateVertexArray(mesh);
        }else{
            // TODO: Check if it was updated
        }

        if (context.boundVertexArray != mesh.getId()) {
            ARBVertexArrayObject.glBindVertexArray(mesh.getId());
            context.boundVertexArray = mesh.getId();
        }

//        IntMap<VertexBuffer> buffers = mesh.getBuffers();
        VertexBuffer indices = null;
        if (mesh.getNumLodLevels() > 0) {
            indices = mesh.getLodLevel(lod);
        } else {
            indices = mesh.getBuffer(Type.Index);
        }
        if (indices != null) {
            drawTriangleList(indices, mesh, count);
        } else {
            drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
        }
        clearVertexAttribs();
        clearTextureUnits();
    }
项目:LWJGL-OpenGL-Utils    文件:RenderUtils.java   
public static void glBindVertexArray(int vao) {
    if(GL_VERSION >= 30) {
        GL30.glBindVertexArray(vao);
    }
    else if(IS_MAC) {
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(vao);
    }
    else if(GLContext.getCapabilities().GL_ARB_vertex_array_object) {
        ARBVertexArrayObject.glBindVertexArray(vao);
    }
    else {
        throw new UnsupportedOperationException("VAOs not supported on this system.");
    }
}
项目:LWJGL-OpenGL-Utils    文件:RenderUtils.java   
public static int glGenVertexArrays() {
    if(GL_VERSION >= 30) {
        return GL30.glGenVertexArrays();
    }
    else if(IS_MAC) {
        return APPLEVertexArrayObject.glGenVertexArraysAPPLE();
    }
    else if(GLContext.getCapabilities().GL_ARB_vertex_array_object) {
        return ARBVertexArrayObject.glGenVertexArrays();
    }
    else {
        throw new UnsupportedOperationException("VAOs not supported on this system.");
    }
}
项目:OpenGL-Worlds    文件:Fractal.java   
public CubeRenderer() {
    buffer = BufferUtils.createFloatBuffer((int)((Math.pow(2, MAX_DEPTH + 1) - 1) * 4 * 6 * 3));

    dataVBO = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, dataVBO);
    glBufferData(GL_ARRAY_BUFFER, buffer.capacity() * 4, GL_STREAM_DRAW);

    cubeVAO = HAS_VAO ? glGenVertexArrays() : (IS_MAC ? APPLEVertexArrayObject.glGenVertexArraysAPPLE() : ARBVertexArrayObject.glGenVertexArrays());
    if(HAS_VAO)
        glBindVertexArray(cubeVAO);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(cubeVAO);
    else
        ARBVertexArrayObject.glBindVertexArray(cubeVAO);

    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, false, 6 * 4, 0);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 3, GL_FLOAT, false, 6 * 4, 3 * 4);

    if(HAS_VAO)
        glBindVertexArray(0);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(0);
    else
        ARBVertexArrayObject.glBindVertexArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, 0);
}
项目:OpenGL-Worlds    文件:Fractal.java   
public void render(MatrixStack matrixStack) {
    matrixStack.getTop().translate(0, -20, Math.min(-40 * getDepth() - 40 * change * timePassed / SPLIT_TIME, -40));

    buffer.clear();

    float angle = (float)Math.toRadians((getDepth() + change * timePassed / SPLIT_TIME) * 45f / MAX_DEPTH);
    render(matrixStack, angle, 0, buffer);

    buffer.flip();

    glBindBuffer(GL_ARRAY_BUFFER, dataVBO);
    glBufferSubData(GL_ARRAY_BUFFER, 0, buffer);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    if(HAS_VAO)
        glBindVertexArray(cubeVAO);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(cubeVAO);
    else
        ARBVertexArrayObject.glBindVertexArray(cubeVAO);

    glDrawArrays(GL_TRIANGLES, 0, buffer.limit() / 6);

    if(HAS_VAO)
        glBindVertexArray(0);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(0);
    else
        ARBVertexArrayObject.glBindVertexArray(0);
}
项目:MikuMikuStudio    文件:LwjglRenderer.java   
public void updateVertexArray(Mesh mesh) {
    int id = mesh.getId();
    if (id == -1) {
        IntBuffer temp = intBuf1;
        ARBVertexArrayObject.glGenVertexArrays(temp);
        id = temp.get(0);
        mesh.setId(id);
    }

    if (context.boundVertexArray != id) {
        ARBVertexArrayObject.glBindVertexArray(id);
        context.boundVertexArray = id;
    }

    VertexBuffer interleavedData = mesh.getBuffer(Type.InterleavedData);
    if (interleavedData != null && interleavedData.isUpdateNeeded()) {
        updateBufferData(interleavedData);
    }

    IntMap<VertexBuffer> buffers = mesh.getBuffers();
    for (Entry<VertexBuffer> entry : buffers) {
        VertexBuffer vb = entry.getValue();

        if (vb.getBufferType() == Type.InterleavedData
                || vb.getUsage() == Usage.CpuOnly // ignore cpu-only buffers
                || vb.getBufferType() == Type.Index) {
            continue;
        }

        if (vb.getStride() == 0) {
            // not interleaved
            setVertexAttrib(vb);
        } else {
            // interleaved
            setVertexAttrib(vb, interleavedData);
        }
    }
}
项目:MikuMikuStudio    文件:LwjglRenderer.java   
private void renderMeshVertexArray(Mesh mesh, int lod, int count) {
        if (mesh.getId() == -1){
            updateVertexArray(mesh);
        }else{
            // TODO: Check if it was updated
        }

        if (context.boundVertexArray != mesh.getId()) {
            ARBVertexArrayObject.glBindVertexArray(mesh.getId());
            context.boundVertexArray = mesh.getId();
        }

//        IntMap<VertexBuffer> buffers = mesh.getBuffers();
        VertexBuffer indices = null;
        if (mesh.getNumLodLevels() > 0) {
            indices = mesh.getLodLevel(lod);
        } else {
            indices = mesh.getBuffer(Type.Index);
        }
        if (indices != null) {
            drawTriangleList(indices, mesh, count);
        } else {
            drawTriangleArray(mesh.getMode(), count, mesh.getVertexCount());
        }
        clearVertexAttribs();
        clearTextureUnits();
    }
项目:LWJGL-OpenGL-Utils    文件:Mesh.java   
public Mesh(ByteBuffer data, ArrayList<Attribute> attributes, ArrayList<RenderCommand> renderCommands, ByteBuffer indices) {
    if(indices == null)
        for(RenderCommand r : renderCommands)
            if(r.isIndexedCmd)
                throw new IllegalArgumentException("One of the render commands requires indices when none is supplied.");

    this.renderCommands = renderCommands;

    int vbo1 = glGenBuffers();
    glBindBuffer(GL_ARRAY_BUFFER, vbo1);
    glBufferData(GL_ARRAY_BUFFER, data, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    int vbo2 = -1;
    if(indices != null) {
        vbo2 = glGenBuffers();

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo2);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices, GL_STATIC_DRAW);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    }

    vao = HAS_VAO ? glGenVertexArrays() : (IS_MAC ? APPLEVertexArrayObject.glGenVertexArraysAPPLE() : ARBVertexArrayObject.glGenVertexArrays());
    if(HAS_VAO)
        glBindVertexArray(vao);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(vao);
    else
        ARBVertexArrayObject.glBindVertexArray(vao);

    glBindBuffer(GL_ARRAY_BUFFER, vbo1);
    for(Attribute attrib : attributes) {
        glEnableVertexAttribArray(attrib.index);
        glVertexAttribPointer(attrib.index, attrib.size, attrib.type.dataType, attrib.type.normalized, 0, attrib.offset);
    }

    if(vbo2 > -1)
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo2);

    if(HAS_VAO)
        glBindVertexArray(0);
    else if(IS_MAC)
        APPLEVertexArrayObject.glBindVertexArrayAPPLE(0);
    else
        ARBVertexArrayObject.glBindVertexArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
项目:OpenModsLib    文件:ArraysHelper.java   
@Override
public int glGenVertexArrays() {
    return ARBVertexArrayObject.glGenVertexArrays();
}
项目:OpenModsLib    文件:ArraysHelper.java   
@Override
public void glBindVertexArray(int array) {
    ARBVertexArrayObject.glBindVertexArray(array);
}