基于索引绘制glDrawElement

GPU:
vertex shader

uniform mediump mat4 uViewProjMatrix;

varying lowp vec4 vColor;

void main(void)
{
    gl_Position = uViewProjMatrix * vec4(aPosition.x, aPosition.y, 0.0, 1.0);
    vColor = vec4(aPosition.x * 0.5 + 0.5, aPosition.y * 0.5 + 0.5, 0.0, 1.0);
}

frag shader

#version 100
precision highp float;

varying lowp vec4 vColor;

void main(void)
{
    gl_FragColor = vColor;
}

cpu:
init()

initRendering(void) {
    NV_APP_BASE_SHARED_INIT();

    NvAssetLoaderAddSearchPath("tutorial/Basic");

    mProgram = NvGLSLProgram::createFromFiles("shaders/plain.vert", "shaders/plain.frag");

    static const float position[] = {
        -1.0f, -1.0f,
        1.0f, -1.0f,
        -1.0f, 1.0f,
        1.0f, 1.0f,
    };

    //-----------基于索引绘制
    static const GLushort plane_indices[] =
    {
        0, 1, 2, 3
    };
    glGenBuffers(1, &_index_buffer);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _index_buffer);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(plane_indices), plane_indices, GL_STATIC_DRAW);
    //--------------

    glGenBuffers(1, &_quad_vbo);
    glBindBuffer(GL_ARRAY_BUFFER, _quad_vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(position), NULL, GL_STATIC_DRAW);
    glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(position), position);

    glGenVertexArrays(1, &_vao);
    glBindVertexArray(_vao);

    GLint naPosition = mProgram->getAttribLocation("aPosition");

    glVertexAttribPointer(naPosition, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(0);

    glBindVertexArray(0);
    glDisableVertexAttribArray(0);
}

draw()

draw(void)
{
    CHECK_GL_ERROR();
    glClearColor(0.0f, 0.25f, 0.3f, 1.0f);
    glClearDepth(1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    CHECK_GL_ERROR();

    nv::matrix4f projection_matrix;
    nv::perspective(projection_matrix, 3.14f * 0.25f, m_width/(float)m_height, 0.1f, 30.0f);
    nv::matrix4f camera_matrix = projection_matrix * m_transformer->getModelViewMat();
    CHECK_GL_ERROR();

    mProgram->enable();

    mProgram->setUniformMatrix4fv("uViewProjMatrix", camera_matrix._array, 1, GL_FALSE);
    CHECK_GL_ERROR();
    //-----------------------------------------
    glBindVertexArray(_vao);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _index_buffer);
    glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_SHORT,NULL);

    glBindVertexArray(0);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    //------------------------------------------
    CHECK_GL_ERROR();

    mProgram->disable();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值