OpenGL ES 2.0使用多个program

本文展示了一个使用OpenGL ES进行2D绘图的示例代码。通过实例详细介绍了如何设置顶点位置和纹理坐标,以及如何使用uniform变量传递模型视图投影矩阵。此示例适用于学习OpenGL ES基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在切换program时需要重新 bind() ,也就是glUseProgram(programId),然后重新为各个着色器变量赋值,附代码如下

void Table::paint()
{
    static GLfloat vertices[] =
    {
        0, 0, .5f, .5f,
        -.5f, -.8f, 0, .9f,
        .5f, -.8f, 1, .9f,
        .5f, .8f, 1, .1f,
        -.5f, .8f, 0, .1f,
        -.5f, -.8f, 0, .9f
    };
    m_shaderProgram.bind();
    // position
    static int aPositionLocation = m_shaderProgram.attributeLocation("a_Position");
    m_shaderProgram.setAttributeArray(aPositionLocation, GL_FLOAT, vertices, 2, 4*sizeof(GLfloat));
    m_shaderProgram.enableAttributeArray(aPositionLocation);
    // texture
    static int aTextureCoordinate = m_shaderProgram.attributeLocation("a_TextureCoordinate");
    m_shaderProgram.setAttributeArray(aTextureCoordinate, GL_FLOAT, vertices + 2, 2, 4*sizeof(GLfloat));
    m_shaderProgram.enableAttributeArray(aTextureCoordinate);
    m_shaderProgram.setUniformValue("u_MvpMat", m_mvpMat);
    glDrawArrays(GL_TRIANGLE_FAN, 0, 6);
}

转载于:https://my.oschina.net/foohao/blog/683706

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值