编写、编译、管理着色器是件麻烦事。写一个类可以从硬盘读取着色器,然后编译并链接它们,并对它们进行错误检测
读取、编译链接着色器(和全流程一样)——Shader(const char vertexPath, const char fragmentPath)
读取文件
编译并链接着色器
类:glShaderSource(vertex, 1, &vShaderCode, NULL);从硬件读取着色器程序文件的地址全流程:glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);常量指针
/ 2. 编译着色器unsigned int vertex, fragment;// 顶点着色器vertex = glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertex, 1, &vShaderCode, NULL);glCompileShader(vertex);checkCompileErrors(vertex, "VERTEX");// fragment Shaderfragment = glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragment, 1, &fShaderCode, NULL);glCompileShader(fragment);checkCompileErrors(fragment, "FRAGMENT");// 着色器程序ID = glCreateProgram();glAttachShader(ID, vertex);glAttachShader(ID, fragment);glLinkProgram(ID);checkCompileErrors(ID, "PROGRAM");// 删除着色器,它们已经链接到我们的程序中了,已经不再需要了glDeleteShader(vertex);glDeleteShader(fragment)
使用、定义的方法——use()、setBool(const std::string &name, bool value) const
激活程序——void use() 、 glUseProgram
uniform的setter函数,定义U属性——void setBool(const std::string &name, bool value) const——glUniform1i(glGetUniformLocation())
真正调用——三个函数方法(构造、激活、定义)
由于source来源于硬件上的着色器程序,所以需要传入程序地址再接着一系列的构造


