如何在不创建窗口的情况下检查OpenGL和GLSL版本?

时间:2017-09-20 12:35:19

标签: opengl glsl

我试过以下方法 - 1.使用glew 2.使用过剩

两种几乎相似的方式如下 -

 #include <stdio.h>
 #include <stdlib.h>
 #include <GL/glew.h>
 #include <GLFW/glfw3.h>

 int main(int agrc, char **argv)
 {
    //do windowing related stuff here

    if ( !glfwInit())
    {
            printf("Error: Failed to initialize GLFW\n");
            return -1;
    }

    GLFWwindow* window = glfwCreateWindow(800, 600, "Triangle", NULL, NULL);
    if (window == NULL)
    {
            printf("Failed to create GLFW window\n");
            glfwTerminate();
            return -1;
    }
    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
            printf("Error: Failed to initialize GLEW\n");
            return -1;
    }

    printf("GL version: %s\n", glGetString(GL_VERSION));
    printf("GL shading language version: %s\n", 
    glGetString(GL_SHADING_LANGUAGE_VERSION));
}

问题 - 是否可以通过创建本机窗口来检查GL和GLSL版本?

根据我的理解,有必要创建GL上下文,这通常是通过创建一个窗口来完成的。请告诉我替代方案而不创建窗口。

1 个答案:

答案 0 :(得分:1)

根据OpenGL Wiki FAQ(强调我的)。

  

您必须创建GL上下文才能使GL函数调用有意义。你不能只写一个最小的程序,如:

int main(int argc, char **argv)
{
    char *GL_version=(char *)glGetString(GL_VERSION);
    char *GL_vendor=(char *)glGetString(GL_VENDOR);
    char *GL_renderer=(char *)glGetString(GL_RENDERER);
    return 0;
}
  

在上面,程序员只是想获得有关这个系统的信息(没有渲染任何内容),但它只是因为没有与GL驱动程序建立通信而无法工作。 GL驱动程序还需要相对于窗口分配资源,例如后备缓冲区。根据您选择的pixelformat,可以使用某种格式的颜色缓冲区,例如GL_BGRA8。可能有也可能没有深度缓冲区。深度可能包含24位。可能有8位模板。可能存在累积缓冲区。也许您选择的像素格式可以进行多重采样。到目前为止,还没有人引入无窗口环境。

     

您必须创建一个窗口。您必须选择一个像素格式。您必须创建GL上下文。您必须使GL上下文成为当前状态(Windows为wglMakeCurrent,* nix为glXMakeCurrent)。

也就是说,如果您只是想避免临时窗口弹出,请创建一个不可见的窗口,这样最终用户就不会知道您正在创建窗口。在GLFW中,您可以通过在创建窗口之前将窗口提示GLFW_VISIBLE设置为falseglfwWindowHint来执行此操作。我使用过的所有其他窗口系统都有类似的设置窗口可见性的概念。