我在Ubuntu上,使用OpenGL,GLEW和GLFW编写应用程序。我使用Eclipse作为我的IDE,并且在尝试使用 glGenRenderbuffer 等功能时遇到问题。我在Windows下设置了一个非常相似的结构,但无法在Linux上运行它。
我正在链接到库 glfw 和 GLEW 。我能够编译和运行部分应用程序,并可以初始化GLFW和GLEW。从这些测试开始,我学到以下内容:
OpenGL version: 4.2.0 NVIDIA 304.64
Using GLEW 1.6.0
但是,我无法编译函数 glGenRenderbuffer (或其他帧缓冲函数)。我已经尝试将EXT和ARB添加到名称中,以及在没有运气的情况下玩glex.h。据我所知,GLEW的目的是处理所有扩展问题,对吗?
源文件( VolumeRenderer.cpp )包含如下所示:
#include <glm/gtc/matrix_transform.hpp>
#include <VolumeRenderer.h>
#include <GL/glew.h>
#include <GL/glfw.h>
再往下,我正在尝试使用这样的函数(当然只有部分完成的函数):
bool VolumeRenderer::InitFramebuffers()
{
glGenRenderbuffers(1, &renderBufferObject_);
return true;
}
我得到的只是“功能'glGenRenderBuffers'无法解决”。
查看我所包含的GL / glew.h标题,我发现了以下几行:
#define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers)
#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT)
但编译器仍无法找到该功能。有什么我忘记的,或者我可以运行一些测试和检查以查看发生了什么?
答案 0 :(得分:1)
好吧,所以我通过基本上将我的Eclipse项目文件按文件复制到一个新的空项目中来实现它。但是,之前我还做了一些其他的事情。首先,我按照有用的评论中的建议移动了包含。我也删除了像glm这样的东西。没有成功!然后我在Eclipse中用一个.cpp文件创建了一个简单的项目,并链接到glfw和GLEW:
#include <GL/glew.h>
#include <GL/glfw.h>
#include <iostream>
#include <cstdlib>
int main()
{
if (glfwInit() != GL_TRUE) {
std::cout << "glfwInit() failed\n";
exit(1);
}
if (!glfwOpenWindow(800, 600, 8 , 8, 8, 8, 8, 8, GLFW_WINDOW)) {
std::cout << "glfwOpenWindow() failed\n";
exit(1);
}
char *glVersion = (char*)glGetString(GL_VERSION);
if (glVersion) {
std::cout << "OpenGL version: " << glVersion << "\n";
}
GLenum err = glewInit();
if (err != GLEW_OK) {
std::cout << "GLEW init failed: " << glewGetErrorString(err) << "\n";
exit(1);
} else {
std::cout << "Using GLEW " << glewGetString(GLEW_VERSION) << "\n";
}
GLuint buf;
glGenRenderbuffers(1, &buf);
exit(0);
}
这就像一个魅力。然后,我试图通过创建具有类似文件和包含结构的另一个项目来重新创建我的旧问题,它似乎也正常工作。然后我开始了第三个空的项目,我只是简单地制作了原本给我带来麻烦的文件的精确副本。现在我有一个原始项目的精确副本(现在已经更改了包含顺序),并且链接到它的完全相同的库,它可以工作。我仍然不知道发生了什么,但我怀疑我的项目在某种程度上搞砸了,即使我做了一些改动也没有恢复。