【问题标题】:How to tell about vertex attributes to shaders?如何告诉着色器的顶点属性?
【发布时间】:2014-05-22 05:39:06
【问题描述】:

我想在着色器程序运行时之间切换,使用固定的 VBO 数组。

我认为我只需要以下具有固定顶点属性索引的函数(我想要 0 表示位置,1 表示纹理坐标)

glEnableVertexAttribArray
glVertexAttribPointer
glGetAttribLocation
glBindAttribLocation

我已经把所有东西都连接好了,但没有任何东西吸引到 FBO。 如果我使用从程序中找到的顶点属性索引(在 glVertexAttribPointer 中),那么它工作正常,但我不能将它与固定属性索引一起使用。

谁能给我看一个简短的示例代码,向我展示上述函数的正确使用/执行顺序?

有没有遗漏的步骤?

【问题讨论】:

  • -1:“有人可以给我看一个简短的示例代码,告诉我上述函数的正确使用/执行顺序吗?”这是一个可怕的问题。您不知道这些函数的顺序的唯一方法是您不知道它们做什么。所以你需要问问这些函数是如何工作的;否则,你只是复制和粘贴编码。
  • @Nicol:像这样的事情 - opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml - 非常好,但没有告诉我有关执行顺序的任何信息。
  • 我真的知道 glBindAttribLocation 是做什么的,但是当它因为我在链接我的程序后使用它而不起作用时,我不知道该去哪里。
  • 好的,为你 +1,我在文档中找到了。 :) 发布了另一个答案。

标签: iphone opengl-es shader vertex


【解决方案1】:

重点是:链接程序前必须调用glBindAttribLocation。

glBindAttribLocation(program, ATTRIBUTE_POSITION, "position");
glBindAttribLocation(program, ATTRIBUTE_TEXTURE_COORDINATES, "textureCoordinates");      
glLinkProgram(program);

然后你可以使用具有固定索引的属性数组函数,例如:

glEnableVertexAttribArray(ATTRIBUTE_POSITION);
glEnableVertexAttribArray(ATTRIBUTE_TEXTURE_COORDINATES);    
glVertexAttribPointer(ATTRIBUTE_POSITION, 2, GL_FLOAT, GL_FALSE, _positionStride, (void*)0);    
glVertexAttribPointer(ATTRIBUTE_TEXTURE_COORDINATES, 2, GL_FLOAT, GL_FALSE, _positionStride, (void*)_textureCoordinatesOffset);  

索引只是简单的整数,如:

//Vertex attributes.
enum 
{
    ATTRIBUTE_POSITION,            //0
    ATTRIBUTE_TEXTURE_COORDINATES  //1
};

现在可以了。所以我不必在每次绘制调用之前调用 glVertexAttribPointer。

【讨论】:

【解决方案2】:

正如文档所说 (http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml):

属性变量名称到通用属性索引的绑定 程序对象可以随时通过调用显式分配 glBindAttribLocation。属性绑定直到 glLinkProgram 被调用。链接程序对象后 成功地,通用属性的索引值保持固定 (并且可以查询它们的值)直到下一个链接命令发生。

不允许应用程序绑定任何标准的 OpenGL 顶点 使用此命令的属性,因为它们是自动绑定的 需要。 在程序对象具有之后发生的任何属性绑定 被链接的将不会生效,直到下一次程序 对象已链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 2020-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多