不能在OpenGL中获得GLSL着色器
Can't get GLSL Shaders in OpenGL
我在这台机器上开发opengl已经有一段时间了,突然,GLEW报告我没有让opengl glsl运行所需的扩展,即使它在其他项目中工作。有趣的是,我甚至得到
OpenGL Vendor: NVIDIA Corporation
OpenGL Renderer: GeForce 610M/PCIe/SSE2
OpenGL Version: 3.3.0
OpenGL 2.0 is available!
[FAILED] OpenGL Shading Language is not available...
我使用glsllib 0.9.4来加载扩展,而扩展又使用GLEW。我的代码如下:
bool Jogo::init() {
if(glfwInit() != GL_TRUE) return false;
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
if(glfwOpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, GLFW_WINDOW) != GL_TRUE) return false;
glewExperimental = true;
if(initGLExtensions() != true) return false;
glm::mat4 matrizModel = glm::mat4(1.0f);
glm::mat4 matrizView = glm::lookAt(glm::vec3(0, 0, 3), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
glm::mat4 matrizProjecao = glm::perspective(45.0f, 9.0f/16.0f, -1.0f, 1.0f);
m_matrizMVP = matrizProjecao * matrizView * matrizModel;
m_shader = m_gerenciadorShader.loadfromFile("vshader.glsl", "fshader.glsl");
char *x = m_shader->getLinkerLog();
m_shader->setUniformMatrix4fv("mvp", 1, GL_FALSE, &(m_matrizMVP[0][0]));
m_world = new World();
glClearColor(0.0f, 0.2f, 0.5f, 0.0f);
glClearDepth(0.0f);
return true;
}
glsllib加载扩展的代码如下:
bool GLSLAPI initGLExtensions(void) {
if (extensions_init) return true;
extensions_init = true;
GLenum err = glewInit();
if (GLEW_OK != err) {
cout << "Error:" << glewGetErrorString(err) << endl;
extensions_init = false;
return false;
}
cout << "OpenGL Vendor: " << (char*) glGetString(GL_VENDOR) << "n";
cout << "OpenGL Renderer: " << (char*) glGetString(GL_RENDERER) << "n";
cout << "OpenGL Version: " << (char*) glGetString(GL_VERSION) << "nn";
checkGLSL();
return true;
}
CheckGLSL查找glewGetExtension("GL_ARB_fragment_shader")
和glewGetExtension("GL_ARB_vertex_shader")
以查看是否支持GLSL。
注:如果我删除glewExperimental,代码在glGenVertexArrays
上崩溃
不幸的是,GLEW并不能真正与当前的OpenGL开发相匹配,特别是涉及核心上下文或显式版本配置文件时。直到最近我才遇到同样的问题,也是与GLFW有关。忽略设置OpenGL版本窗口提示确实为我解决了这个问题。即禁用或删除这两个调用:
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
相关文章:
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- imageLoad glsl 在计算着色器 OpenGL 4.3 中始终返回 0
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- OpenGL GLSL 片段着色器中的随机数
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL,GLSL片段着色器无法读取Sampler2D纹理
- 即使 OpenGL、SDL 和 GLSL 都没有抛出错误,也没有绘制多边形
- 深度检查OpenGL(GLSL)
- 使用 OpenGL/GLSL 1.2 更改纹理色调
- 从 .glsl 文件中读取 OpenGL 着色器语言
- Opengl-glsl 單虛擬光
- 与GLSL相关的OpenGL应用程序代码
- Opengl 3.3 不会绘制任何东西。使用 GLSL 330 内核
- OpenGL 纹理不通过 GLSL 渲染
- OpenGL纹理缓冲区-GLSL语法
- OpenGL和GLSL:灰度纹理不显示
- Opengl/glsl 尝试编写用于绘制四边形的着色器,但不确定如何处理屏幕纵横比的变化
- GLSL OpenGL 多边形未渲染
- 着色器GLSL OpenGL上的投影矩阵问题