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



我尝试了以下方法 - 1.使用Glew2.使用Glut

几乎与以下几乎相似的方式 -

 #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 GLFWn");
            return -1;
    }
    GLFWwindow* window = glfwCreateWindow(800, 600, "Triangle", NULL, NULL);
    if (window == NULL)
    {
            printf("Failed to create GLFW windown");
            glfwTerminate();
            return -1;
    }
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
            printf("Error: Failed to initialize GLEWn");
            return -1;
    }
    printf("GL version: %sn", glGetString(GL_VERSION));
    printf("GL shading language version: %sn", 
    glGetString(GL_SHADING_LANGUAGE_VERSION));
}

问题 - 可以使用创建本机窗口检查GL和GLSL版本吗?

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

根据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驱动程序还需要针对窗口(例如Backbuffer)分配资源。基于您选择的PixelforMat,可以有一个颜色缓冲区,具有某种格式,例如GL_BGRA8。可能存在或可能没有深度缓冲区。深度可能包含24位。可能有一个8位模具。可能会有一个累积缓冲区。也许您选择的PixelFormat可以进行多样化。到目前为止,还没有人引入无窗的上下文。

您必须创建一个窗口。必须选择一个PixelFormat。您必须创建一个GL上下文。您必须使GL上下文当前(Windows的WGLMakeCurrent和 *Nix的GlxMakeCurrent)。

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

最新更新