OpenGL 着色器编译
编译着色器
暂时将着色器硬编码在 C 风格字符串中
const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\0";
创建着色器对象
对于着色器对象,我们依旧是通过 ID 来引用,通过glCreateShader 创建着色器,由于我们需要的是顶点着色器,因此传入的参数为 GL_VERTEX_SHADER
unsigned int vertexShader;
vertexShader = glCreateShader(GL_VERTEX_SHADER);
将着色器源码附加到着色器对象上,并编译它
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
// 第一个参数:着色器对象
// 源码字符串数量
// 着色器真正的源码
// 暂时设为NULL
glCompileShader(vertexShader);
编译成功的检测
int success;
char infoLog[512];
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
if(!success)
{
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
}
-
success:表示是否成功编译 -
infoLog:存储错误信息的容器

浙公网安备 33010602011771号