Sharder从CPU获取数据
cpu给定点数据,送给GPU进行绘制,layout是布局,layout是锚点,GPU是一套锚点信息,放置数据信息。GPU通过锚点来读取数据。
Vertex Shader
layout(location =0) in vec3 aPos;
void main(){
gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);//内建变量,1.0矩阵变换
}
Fragment Shader
out vec4 FragColor;//输出一个颜色值,对每一个像素都做
void main(){
FragColor=vec4(1.0f,0.5,0.2f,1.0f);
}
VBO
1.获取vbo的index
glGenBuffer(1,&VBO);
2.绑定vbo的index
glBindBuffer(GL_ARRAY_BUFFER,VB);
3.给vbo分配显存空间,传输数据
GLBUFFERDATA(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//static,顶点不变化;
4.告诉shader的数据解析方式
glVertexAttribPointer(0(锚点,唯一),3,GL_FLOAT,GL_FALSE(是否归一化),3(跨度,读取一行)*sizeof(float), (void*)0(从哪开始读取);
5.激活锚点
glEnableVetexAttriARRAY(0);
glBindBuffer(GL_ARRAY_BUFFER,0);
着色器
vertexID=glCreateSharder(gl_vertext_SHADER);
glSharderSource(vertexID,1, &_vSharderStr,NULL);
glCompileSharder(vertexID);//编译
glGetSharderiv(vertexID,GL_COMPLIE_STATUS,&successFLAG);//获取编译状态
着色器程序
sharderProgram=glCreateProgram();
glAttachShader(sharderPropram, vertextshader);
glAttachShader(shaderProgram, fragshader);
glLinkProgram(sharderProgram);
glGetProgram(shaderProgram, GL_LINK_STATUS,&successflag);
if(!_sucessFlag)
{
glPragramInfolog(shaderProgram,NULL,_info);
}
VAO
1.获取VAO
glGenVertexArrays(1,&VAO);
glBindVertexArray(VAO);
。。。。。
glBIndVertexArray(0);解绑
VAO绑定了锚点的位置
绘图
glBindVertexArray(VAO);
glUseProgram(shaderProgram);
glDrawArrays(gl_triangles,0,3);
Uniform
glGetUniformLocation(sharderProgram,"ourColor");
glUniform4f(_location,0.0f,