1. shader define:
先简单的介绍shader,shader其实是显卡的功能,就是利用显卡的GPU去做图像处理的工作,而不是CPU,这样可以在一些复杂的大程序中释放CPU空间而提高效率。
2. shader type
1>.vertext shader:顶点着色器
2>.TEST Control shader
3>.TEST Evaluation shader
4>.Geometry Shader
5>.Fragment Shader:片段着色器
顶点:
uniform float CoolestTemp;
attribute float VertexTemp;
varying float Temperature; 写
片段:
uniform vec3 HottestColor;
varying float Temperature; 只读
application:
修改 attribute 值
获取 int a_vertex = renderHelper->getAttribLocation("VertexTemp");
glEnableVertexAttribArray(a_vertex) //允许设置
glVertexAttrib1f(a_vertex) 修改单个顶点设置 //glVertexAttribPointer(a_vertex)修改顶点数组设置
glDrawArrays(GL_TRIANGLES, 0, 3); //三角形
修改 uniform 值:
int u_index = renderHelper->getUniformLocation("CoolestTemp");
glUniform1f(u_color, 20.0); //修改
shader:
//init shader
shaderId = _api->glCreateShader(shaderType);
_api->glShaderSource(shaderId, 1, &s, NULL);
_program = _api->glCreateProgram();
_api->glAttachShader(_program, _vertexShader); //shaderId
_api->glAttachShader(_program, _fragmentShader);
_api->glGetShaderiv(handle, GL_COMPILE_STATUS, &success); //compile shader
_api->glLinkProgram(_program); //link shader to program
//render
api->glGetAttribLocation();
api->getUniformLocation("u_color");
api->glUseProgram(_program); //use program
api->glBindFramebuffer(GL_FRAMEBUFFER, _framebuffer);
api->glViewport(0, 0, renderHelper->getWidth(), renderHelper->getHeight());
api->glDisable(GL_DEPTH_TEST);
api->glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
api->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
api->glUniform3iv()
api->glEnableVertexAttribArray(_aloc_position);
api->glVertexAttribPointer(_aloc_position, 3, GL_FLOAT, GL_FALSE, 0, vertices);
api->glDrawArrays(GL_TRIANGLES, 0, 6);
api->glFlush(); //缓冲区数据
api->glReadPixels(0, 0, renderHelper->getWidth(), renderHelper->getHeight(), renderHelper->getFormat(), GL_UNSIGNED_BYTE, output); //read flush pixel