GLEW初始化问题导致程序无法输出

问题描述 投票:0回答:1

我在尝试将 GLEW 库用于我的基本 OpenGL 程序时遇到问题,该程序是使用 GLFW (glfw3.h) 编写的。一切都编译没有错误,但是一旦我调用 glewInit(),我就根本得不到任何输出,包括任何 cout 语句,无论是在初始化之前还是之后。但是,当我删除 glewInit() 调用时,一切都会按预期工作。

我想知道为什么会发生这种情况以及如何解决它。这是我的代码的简化版本:

#define GLEW_STATIC 1 

#include "glew.h"
#include "glfw3.h"
#include <iostream>

int main()
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);
    
    //INFECTED LINE OF CODE - START
    std::cout << glGetString(GL_VERSION) << std::endl;

    glewExperimental=GL_TRUE;
    GLenum err=glewInit();
    if(err!=GLEW_OK)
    {
        //Problem: glewInit failed, something is seriously wrong.
        std::cout<<"glewInit failed, aborting."<<std::endl;
    }
     //INFECTED LINE OF CODE - END

    /* Loop until the user closes the window */
  while (!glfwWindowShouldClose(window))
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f(0.0f, 0.5f);
    glVertex2f(0.5f, -0.5f);
    glEnd();

    glfwSwapBuffers(window);
    glfwPollEvents();
}

    glfwTerminate();
    return 0;
}

我已经正确包含了 GLEW 和 GLFW,并且没有编译错误。是什么原因导致此问题?我该如何解决?感谢您的帮助!

//编辑#1 尝试使用:

(...)
 glewExperimental=GL_TRUE;
    GLenum err=glewInit();
    std::cout<<glewGetErrorString(err);
    glewGetErrorString(err);
    if(err!=GLEW_OK)
    {
        //Problem: glewInit failed, something is seriously wrong.
        std::cout<<glewGetErrorString(err);
        glewGetErrorString(err);
        std::cout<<"glewInit failed, aborting."<<std::endl;
    }
(...)

仍然No output

当我注释掉受感染的代码行并只留下这一行时:

std::cout << glGetString(GL_VERSION) << std::endl;

我得到输出:

4.6.0 - Build 26.20.100.7637
c++ opengl graphics glfw glew
1个回答
0
投票

您不能在

glGetString
之前调用
glewInit
等 OpenGL 函数。
glewInit()
负责从 GPU 驱动程序的 DLL 动态加载这些函数。

如果这样做,您可能会遇到段错误,因为

glGetString
只是一个隐藏未初始化(当时)函数指针的宏。

© www.soinside.com 2019 - 2024. All rights reserved.