[英]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.