我正在尝试在VS13中编译此应用程序。我以这种方式链接了所有库: 来自glew-1.10.0 \ lib \ Release \ Win32的glew32.lib 将glew32.dll放在与Debug相同的文件夹中 链接glfw3
当我运行此代码时,它会在glTexImage3D处抛出异常;它说“访问冲突执行位置0x00000000。”
#include <GL/glew.h>
#include <GL/glfw3.h>
#include <cstdlib>
#include <iostream>
GLenum volumeTexture;
int main() {
// Initialize GLFW
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW! I'm out!" << std::endl;
exit(-1);
}
glewExperimental = GL_TRUE;
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
}
// Use red to clear the screen
glClearColor(1, 0, 0, 1);
glGenTextures(1, &volumeTexture);
glBindTexture(GL_TEXTURE_3D, volumeTexture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 256, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
我注意到如果我添加
错误就会解决glTexImage3D = (PFNGLTEXIMAGE3DPROC) wglGetProcAddress("glTexImage3D");
但是后来我在运行glGenFramebuffers时得到了同样的异常(即使我评论了glTexImage3D行,我也明白了) 我是以错误的方式链接某些东西吗?
答案 0 :(得分:3)
您的排序错误。
glewInit()
需要当前的GL上下文来完成它的工作。如果没有当前上下文,它就无法在GL中查询入口点,并将其所有函数指针(例如glTexImage3D()
)设置为NULL。
glfwInit()
不会创建一个GL上下文,也不会创建一个当前。
您需要glfwCreateWindow()
和glfwMakeContextCurrent()
。