我试过以下方法 - 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上下文,这通常是通过创建一个窗口来完成的。请告诉我替代方案而不创建窗口。
答案 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
设置为false
并glfwWindowHint
来执行此操作。我使用过的所有其他窗口系统都有类似的设置窗口可见性的概念。