我尝试了以下方法 - 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
。我与之合作过的所有其他窗口系统都有类似的概念,可以设置窗口的可见性。