gpt4 book ai didi

opengl - 如何判断计算机是否支持 OpenGL 2.0? (我想写着色器)

转载 作者:行者123 更新时间:2023-12-04 17:30:34 25 4
gpt4 key购买 nike

我对编写 OpenGL 着色器很感兴趣,但不确定我的显卡是否足以支持这一点,或者我的系统是否正确配置为使用替代软件 (Mesa)。如何判断我的计算机是否支持 OpenGL 着色器? (我使用 Ubuntu 10.04)到目前为止我已经尝试了三个测试,每个测试都得到了相互矛盾的答案:

1) 我从位于 here 的 OpenGL A Primer 3rd Edition 中的示例代码下载、编译并成功运行了一个 OpenGL 着色器程序。 .但是,同一章节中实现其他 OpenGL 着色器的一些其他代码示例无法运行。其中一些甚至导致我的计算机崩溃或输出窗口以闪烁的颜色做有趣的事情,非常奇怪。

2)我运行了以下命令并得到:

$ glxinfo | grep "OpenGL version"
OpenGL version string: 1.5 Mesa 7.7.1

这似乎表明我正在运行 OpenGL 1.5,但 Mesa 版本(据我所知,它是 OpenGL 2.0 的软件实现。速度不快,但功能与硬件中的实际交易相同)似乎足够好运行 OpenGL 2.0。我如何知道我的代码使用的是哪个驱动器,OpenGL 1.5 还是 Mesa 7.7.1?

3)我写了一些代码在电脑上输出OpenGL的版本,得到如下输出:
$ ./version
OpenGL Version major=1, minor=5
GLSL Version major=0, minor=0

这并没有说明 Mesa,并且会让我相信我正在运行 OpenGL 1.5。请帮助我了解我正在运行的版本,以便我知道我是否需要跑到商店购买新显卡,然后才能确信着色器会运行。谢谢!

附注这是代码:
#include <GL/glut.h>
#include <stdio.h>
#include <string.h>

void getGlVersion(int *major, int *minor)
{
const char *verstr = (const char *) glGetString(GL_VERSION);
if ((verstr == NULL) || (sscanf(verstr,"%d.%d", major, minor) != 2))
{
*major = *minor = 0;
fprintf(stderr, "Invalid GL_VERSION format!!!\n");
}
}

void getGlslVersion(int *major, int *minor)
{
int gl_major, gl_minor;
getGlVersion(&gl_major, &gl_minor);
*major = *minor = 0;
if(gl_major == 1)
{
/* GL v1.x can provide GLSL v1.00 only as an extension */
const char *extstr = (const char *) glGetString(GL_EXTENSIONS);
if ((extstr != NULL) &&
(strstr(extstr, "GL_ARB_shading_language_100") != NULL))
{
*major = 1;
*minor = 0;
}
}
else if (gl_major >= 2)
{
/* GL v2.0 and greater must parse the version string */
const char *verstr =
(const char *) glGetString(GL_SHADING_LANGUAGE_VERSION);
if((verstr == NULL) ||
(sscanf(verstr, "%d.%d", major, minor) != 2))
{
*major = *minor = 0;
fprintf(stderr,
"Invalid GL_SHADING_LANGUAGE_VERSION format!!!\n");
}
}
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glEnd();

glFlush();

int major, minor;
getGlVersion(&major, &minor);
fprintf(stderr, "OpenGL Version major=%i, minor=%i\n", major, minor);

getGlslVersion(&major, &minor);
fprintf(stderr, "GLSL Version major=%i, minor=%i\n", major, minor);
}

void init() {}

int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(0,0);
glutCreateWindow("simple");
glutDisplayFunc(display);
init();
glutMainLoop();
}

最佳答案

获取 GL 版本的唯一“GL 批准”方式是使用 glGetString(GL_VERSION),这会报告驱动程序支持的 GL 版本。

Mesa 可以实现任何版本的 OpenGL,即使它是在软件或硬件中实现的,在您的情况下,您有 MESA 7.7.1 实现的 OpenGL 1.5,这是 OpenGL 实现。

了解某个硬件支持某个 GL 版本的唯一可靠方法是检查制造商规范,因为驱动程序可能已经过时并支持旧的 GL 版本。一个例子是 GeForce 8 卡,它们最初最多支持 OpenGL 2.1,当 OpenGL 3.x 出现时,它们也支持它,但只使用更新的驱动程序。

关于opengl - 如何判断计算机是否支持 OpenGL 2.0? (我想写着色器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5741302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com