c - GLFW3创建窗口返回null

标签 c opengl struct code-separation

我试图将所有 GLFW3 初始化代码从主文件放到单独的文件中。 当我运行代码时,我在 glew init 函数上得到 EXC_BAD_ACCESS,因为 GLFW 无法创建窗口。在代码分离之前一切正常。是否可以在其他函数中使用 GLFW 设置代码?

这是window_manager.h

typedef struct Window_manager
{
    GLFWwindow *window;
    GLuint window_width;
    GLuint window_height;
    const char *window_title;
} Window_manager;

Window_manager *set_up_window(GLuint width, GLuint height, const char *title);

window_manager.c中的代码

Window_manager *set_up_window(GLuint width, GLuint height, const char *title)
{
    Window_manager *win_man = malloc(sizeof(Window_manager));
    // Init GLFW
    //glfwSetErrorCallback(error_fiutallback);

    if (!glfwInit())
    exit(EXIT_FAILURE);

    // Set all the required options for GLFW
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);

    win_man->window_width = width;
    win_man->window_height = height;
    win_man->window_title = title;
    win_man->window = glfwCreateWindow(win_man->window_width, win_man->window_height, win_man->window_title, NULL, NULL);
    glfwMakeContextCurrent(win_man->window);

    // Set the required callback functions
    //glfwSetKeyCallback(win_man->window, key_callback);

    return win_man;
}

在main.c中

int main(int argc, const char * argv[])
{
    Window_manager *win_man = set_up_window(800, 600, "fjut");       
    glewExperimental = GL_TRUE;
    // Initialize GLEW to setup the OpenGL Function pointers
    GLenum err = glewInit();
    if (GLEW_OK != err)
 {
    //Problem: glewInit failed, something is seriously wrong.
    printf("Error: %s\n", glewGetErrorString(err));
 }
 fprintf(stdout, "Status: Using GLEW %s\n",
 glewGetString(GLEW_VERSION));

最佳答案

无法打开窗口的原因是除了其他窗口提示之外还必须指定 GLFW_CONTEXT_VERSION_MINOR。这可以通过以下方式完成:

glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

关于c - GLFW3创建窗口返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30882229/

相关文章:

c - 从文件中读取数据到结构体数组 (C)

c - 我在接受技术面试时被要求制作这样的结构..

c++ - 如果数据已经发送,为什么 select 只将文件描述符显示为就绪?

c++ - 在 OpenGL/GLSL 中绘制镶嵌的 LineLoops

c++ - 为 OpenGL 转换 .obj 每面变量

c - 使用 strcpy 通过指针运算符将字符串复制到结构的成员

c - 0x4 在 "movl $0x2d, 0x4(%esp)"中做什么?

c++ - OpenCV::ML - 是否可以告诉 openCV 我们要将数据的哪些部分发送到哪个神经元?

opengl - 使用 GL_ARB_clear_texture 会引发访问冲突异常

c++ - `struct X typedef` 与 `typedef struct X` 的含义是什么?