美文网首页openGL ES
为什么需要glEnableVertexAttribArray

为什么需要glEnableVertexAttribArray

作者: 勤奋happyfire | 来源:发表于2019-04-28 11:49 被阅读0次

先看一种情况,如果我们创建了一个vertex buffer object:

function createVBO(gl, vertices){
    var vbo = gl.createBuffer();
    if(!vbo){
        console.log('Failed to create the buffer object');
        return -1;
    }

    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
    gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
    gl.bindBuffer(gl.ARRAY_BUFFER, null);
    return vbo;
}

并且设定了当前的shader program。当前shader中有个attribute需要从vbo中获取顶点数据。
但是如果我们并没有将vbo指向这个attribute,即在下面的代码中没有调用gl.vertexAttribPointer。


function drawVBO(gl, vbo, apos){
    gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
    //gl.vertexAttribPointer(apos, 2, gl.FLOAT, false, 0, 0);
    //gl.enableVertexAttribArray(apos);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
    //gl.disableVertexAttribArray(apos);
}

此时直接调用drawArrays,并不会报错。为什么?
因为vertex attribute的默认状态是disabled。
如果我们通过调用glEnableVertexAttribArray将vertex attribute状态enable,然后仍然不调用glVertexAttribPointer,并直接调用drawArray,WebGL就会报错:

INVALID_OPERATION: drawArrays: no buffer is bound to enabled attribute

所以从这种情况说,默认状态disabled是安全的,所以当一切都准备好后需要主动调用glEnableVertexAttribArray将状态enable。

参考:https://www.gamedev.net/forums/topic/655785-is-glenablevertexattribarray-redundant/

相关文章

  • 为什么需要glEnableVertexAttribArray

    先看一种情况,如果我们创建了一个vertex buffer object: 并且设定了当前的shader prog...

  • OpenGL ES 3.0 glEnableVertexAttr

    本文档讨论glEnableVertexAttribArray的作用及调用位置问题。 对于OpenGL ES 3.0...

  • 7.opengl光照-颜色/基础光照

    glEnableVertexAttribArray的作用解释:默认情况下,出于性能考虑,所有顶点着色器的属性(At...

  • 《我们为什么需要仪式》听书笔记

    《我们为什么需要仪式》- 我们为什么需要仪式 01.我们为什么需要仪式 今天为你解读的书是《我们为什么需要仪式》。...

  • 为什么需要叙事,为什么需要小说

    我们为什么需要小说,我们为什么需要故事。因为小说可以消解我们在现世存在的状态,它可以重新解构我们的人生,又重新营造...

  • 为什么

    为什么需要被爱,为什么想要爱? 为什么需要价值感? 为什么需要安全感? 为什么想要活明白? 朝闻道,夕死可矣? 为...

  • 161 山城之恋(三十九)

    为什么(一) 为什么?为什么 天空布满星斗,江河行驶行船 生活需要阳光…… 而人类,需要健康向上 为什么...

  • 软件测试笔记——1. 定义,类型,方法

    为什么我们需要软件测试? 可能有些人会有这样的疑问:“为什么我们需要软件测试”或者“为什么需要测试”或者“为什么需...

  • 阿里为什么成功? 满足了人们需要。 腾讯为什么成功? 创造了人们需要。 京东为什么成功? 服务于人们需要。 拼多多...

  • WHY Tablet

    为什么需要Tablet和为什么DML需要经过Tablet是两个问题 首先说为什么需要Tablet,换句话说Tabl...

网友评论

    本文标题:为什么需要glEnableVertexAttribArray

    本文链接:https://www.haomeiwen.com/subject/fbqdnqtx.html