簡體   English   中英

如何在不創建窗口的情況下檢查OpenGL和GLSL版本?

[英]How to check OpenGL and GLSL Version without creating a window?

我嘗試了以下方法 - 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上下文,這通常通過創建一個窗口來完成,請告訴我替代方案而不創建窗口。

根據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位模板。 可能存在累積緩沖區。 也許您選擇的像素格式可以進行多重采樣。 到目前為止,還沒有人引入無窗口環境。

您必須創建一個窗口。 您必須選擇pixelformat。 您必須創建GL上下文。 您必須使GL上下文為當前(Windows為wglMakeCurrent,* nix為glXMakeCurrent)。

也就是說,如果您只是想避免彈出臨時窗口,請創建一個不可見的窗口,這樣最終用戶就不會知道您正在創建窗口。 在GLFW中,您可以通過在創建窗口之前使用glfwWindowHint將窗口提示GLFW_VISIBLE設置為false來執行此操作。 我使用的所有其他窗口系統都有類似的設置窗口可見性的概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM