开发者

Attribute Parameter in Vertex shader

开发者 https://www.devze.com 2023-03-15 22:49 出处:网络
I am doing work on Opengl-es 2.0 in ubuntu 10.10 with pvrsdk . In my code i am taking the vertices of triangle to render but when i have to use the Attribute parameter in vertex shader . how does it c

I am doing work on Opengl-es 2.0 in ubuntu 10.10 with pvrsdk . In my code i am taking the vertices of triangle to render but when i have to use the Attribute parameter in vertex shader . how does it change

I see that in examples they are using myVertex . what is meant by that.

like this:

const char* pszVertShader = "\
    attribute highp vec4    myVertex;\
    uniform mediump mat4    projmatrix;\
    invariant gl_Position;\
    void main(void)\
    {\
        gl_Position = projmatrix * myVertex;\
    }";


===============================render======================
glBindAttribLocation(uiProgramObject, VERTEX_ARRAY, "myVertex");

So i just wanna know that 开发者_StackOverflow社区I am taking vertices from text file will it affect the myVertex attribute.

if you need another information I can provide you and I have already posted my whole code in previous question here


OpenGL 3/OpenGL-ES 2 are abandoned the concept of predefined vertex attributes "position", "normal", "texcoord", …, that are supplied through glVertexPointer, glNormalPointer, glTexCoordPointer, …

Instead in your shaders you introduce custom varyings/in attribute identifiers. Those identifiers are referred to by a so called attribute location, a numeric index. glBindAttribLocation allows one to assign attribute identifiers to specific locations. In the case of above code fragment there seems to exists a global constant VERTEX_ARRAY – introduced by the program code(!), i.e. not predefined by OpenGL or something like that – that is universally used for the myVertex varying/in attribute in the shader.

So that particular vertex attribute can be supplied with data by glVertexAttribPointer through a common token VERTEX_ARRAY in a statement similar to this:

glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, false, 0, isVBO ? (char*)vertex.offset : (char*)vertex.data + vertex.offset);

Of course the exact semantics of the glVertexAttribPointer calls depends on the particular program that does them.

Instead of a (global) constant VERTEX_ARRAY you could as well use a variable shader.attrib.vertex, which you set per shader using

shader.attrib.vertex = glGetAttribLocation(shader.program_object, "myVertex");

and use that variable in the calls to glVertexAttribPointer

glVertexAttribPointer(shader.attrib.vertex, …)
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号