glTexImage3D抛出异常

4
我正在尝试在VS13中编译此应用程序。 我以以下方式链接了所有库: glew32.lib来自 glew-1.10.0\lib\Release\Win32 将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的代码)。这是我链接方式有问题吗?


GL是一个C API,它不会抛出异常。如果您尝试调用表示为“NULL”指针的函数,则您的操作系统可能会引发异常,但这是另一回事。 - Andon M. Coleman
1个回答

3
您的顺序有误。 glewInit()需要当前的GL上下文才能正常工作。没有当前的上下文,它无法查询GL入口点,并将其所有函数指针(例如glTexImage3D())设置为NULL。 glfwInit()不会创建GL上下文或使其当前。
您需要使用glfwCreateWindow()glfwMakeContextCurrent()来完成这个操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接