八 shader中数据传递
来源:互联网 发布:手机淘宝收藏店铺在哪 编辑:程序博客网 时间:2024/05/01 13:28
shader的使用流程
- 编写vertex Shader和fragment shader源码。
- 创建两个shader 实例:GLuint glCreateShader(GLenum type); [gl.createShader]
- 给Shader实例指定源码。 glShaderSource [gl.shaderSource]
- 编译shaer源码 void glCompileShader(GLuint shader) [gl.compileShader]
- 创建shader program – GLuint glCreateProgram(void) [gl.createProgram]
- 绑定shader到program 。 void glAttachShader(GLuint program, GLuint shader)。每个program必须绑定一个vertex shader 和一个fragment shader。 [gl.attachShader]
- 链接program 。 void glLinkProgram(GLuint program) [gl.linkProgram]
- 使用porgram 。 void glUseProgram(GLuint program) [gl.useProgram]
attribute变量
attribute是顶点属性,每个顶点都会有,但只存在于vertex Shader中,由应用程序传入其值。
因为在链接program之前,attribute变量是还没有分配内存的,为了给shader中的attribute变量传值,首先需要将其绑定到program上,并指定他的位置attr_pos,链接program之后,可以通过这个位置attr_pos来给这个变量传值。加入shader中有一个
GLuint porgram = glCreateProgram()glAttachShader(porgram, shader);glBindAttribLocation(porgram, attr_pos, "attr_name");glLinkProgram(porgram);
这样就将attr_name(字符串)绑定到了attr_pos(无符号值)位置。
glGenBuffers(1, &_vbo);glBindBuffer(GL_ARRAY_BUFFER, _vbo);glBufferData(GL_ARRAY_BUFFER, sizeof(vert_data), vert_data, GL_STATIC_DRAW);glEnableVertexAttribArray(attr_pos);glVertexAttribPointer(attr_pos, 3, GL_FLOAT, GL_FALSE, 0, NULL);
这样就把vert_data传递给了attribute变量attr_name。
因为每个顶点属性的数据都依托在一个VBO中了,因此要想给一个attrbute变量传递数据,需要先把把数据交给一个VBO对象。
如果我们再链接program之前并没有指定他的位置,我们还可以去查找这个变量。
attr_pos = glGetAttribLocation(porgram, "attr_name");
uniform变量
uniform变量在shader中时只读,随不同图元变化的全局变量,其值也由应用程序传入。
GLint unif_pos = glGetUniformLocation(porgram, "unif_name");glUniform1f(unif_pos, float_value);
这样就可以给unif_pos设置1个浮点数的值,除glUniform1f之外,还可以使用如下方法:
glUniform1fglUniform1fv glUniform1iglUniform1iv glUniform2fglUniform2fv glUniform2iglUniform2iv glUniform3fglUniform3fv glUniform3iglUniform3iv glUniform4fglUniform4fv glUniform4iglUniform4iv glUniformMatrix2fvglUniformMatrix3fvglUniformMatrix4fv
可以看到,根据参数个数和类型不同,需要使用不同的方法设置。
varying变量
shader之间传递值用的变量类型了。在编写vertex shader 中写入,在fragment shader中只读出。
0 0
- 八 shader中数据传递
- 向Shader中传递数据
- 向Shader中传递数据
- 向Shader中传递数据
- 【OpenGL】向Shader中传递数据
- Shader历程——数据传递
- OGLES Shader间数据传递修饰符
- WebGL之旅(二)向shader中传递数据(attribute和uniform)
- 在OpenGL中向shader传递信息
- anroid OpenGL ES之 向shader传递数据
- shader总结八
- 【GLSL教程】在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- GLSL 在OpenGL中向shader传递信息
- 顺序查找
- Linux发展编年表
- android笔记-02 程序启动和Launcher
- 通过局域网安装centos6.4
- leetcode.374. Guess Number Higher or Lower
- 八 shader中数据传递
- cloudera-manager 5.4.10的安装
- 背景色#888888
- ACM暑期集训——专题一[优先队列]
- java基础:Map三两事
- js实现动态时间显示
- [Ubuntu] 编辑器Sublime
- android图表框架 MPAndroidChart 学习记录
- 网络安全-tomcat配置https