OpenGL 着色器编译

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:存储错误信息的容器

posted @ 2021-12-03 16:35  blahhhh  阅读(108)  评论(0)    收藏  举报