GLSL编译中遇到的几点问题

在为NightDust编写着色器加载器时遇到了一些问题,记录下来以供参考。

着色器编译器提示Syntax Error

这个问题会表现在in、out关键字和version标签报错。如果确定代码没有语法问题的话,那就是因为没有开启OpenGL核心模式。GLFW库通过如下命令开启核心模式:

1
2
3
4
5
#define GLFW_INCLUDE_GLCOREARB //用于配制GLFW启用OpenGL3,在包含GLFW头文件之前声明此行

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

无法生成着色器ID

症状为着色器相关函数不为传入的变量写入值。原因是必须在指定了OpenGL上下文之后才可以使用着色器。可以在加载器里添加检测上下文是否存在的代码。

1
2
3
if(!glfwGetCurrentContext()){
//处理错误
}

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器