【问题标题】:How to find my OpenGL version in linux(Ubuntu 14.04)如何在 linux(Ubuntu 14.04) 中找到我的 OpenGL 版本
【发布时间】:2014-09-02 16:46:26
【问题描述】:

我开始阅读 OpenGL 4.0 Shading Language version 1。 在本书的开头,他们展示了找出 OpenGL 版本的代码,但它不起作用。我想知道如何确定是否设置正确。

#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <iostream>
#include <stdio.h>

int main(int argc, char** argv) {
/*
GLenum err = glewInit();
if( GLEW_OK != err ) {
    fprintf(stderr, "Error initializing GLEW: %s\n",
    glewGetErrorString(err) );
}
*/
const GLubyte *renderer = glGetString( GL_RENDERER );
const GLubyte *vendor = glGetString( GL_VENDOR );
const GLubyte *version = glGetString( GL_VERSION );
const GLubyte *glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION );
GLint major, minor;
glGetIntegerv(GL_MAJOR_VERSION, &major);
glGetIntegerv(GL_MINOR_VERSION, &minor);
printf("GL Vendor : %s\n", vendor);
printf("GL Renderer : %s\n", renderer);
printf("GL Version (string) : %s\n", version);
printf("GL Version (integer) : %d.%d\n", major, minor);
printf("GLSL Version : %s\n", glslVersion);
}

代码给了我空输出。我不认为这是正确的,因为在开始阅读本书之前,我在网上找到了在 openGL 2.0 中显示一个框的代码。

GL Vendor : (null)
GL Renderer : (null)
GL Version (string) : (null)
GL Version (integer) : 0.0
GLSL Version : (null)

我还查看了this link,它提供了有关我的显卡的信息。我认为这与我安装的开发包无关。

我需要找到一种方法来确认我已经安装了 openGL 4.0。我更喜欢终端命令或修复我的代码。

编辑: 我添加了一个关于 McLovin 提供的代码的附加问题: 我注意到我得到了一个额外的行“分段错误(核心转储)”。我有一个 7970 AMD GPU。这个输出是错误的吗?

【问题讨论】:

    标签: c++ linux ubuntu terminal opengl-4


    【解决方案1】:

    在获取任何有关 OpenGL 的数据之前,您需要创建一个 OpenGL 上下文。上下文本质上是与应用程序中使用的 OpenGL 实例相关的数据集。它通常是通过打开带有诸如 freeglut、SFML、GLFW 或 SDL 之类的库的窗口来创建的。
    以下代码使用freeglut:

    #include <stdio.h>
    #include <GL/gl.h>
    #include <GL/freeglut.h>
    
    int main(int argc, char **argv)
    {
            glutInit(&argc, argv); /* create opengl context */
            glutInitContextVersion(4, 4); /* use version 4.4 */
            /* there's no main loop, so the window will close immediately */
            glutCreateWindow("You won't see this window");
    
            /* we can now get data for the specific OpenGL instance we created */
            const GLubyte *renderer = glGetString( GL_RENDERER );
            const GLubyte *vendor = glGetString( GL_VENDOR );
            const GLubyte *version = glGetString( GL_VERSION );
            const GLubyte *glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION );
            GLint major, minor;
            glGetIntegerv(GL_MAJOR_VERSION, &major);
            glGetIntegerv(GL_MINOR_VERSION, &minor);
            printf("GL Vendor : %s\n", vendor);
            printf("GL Renderer : %s\n", renderer);
            printf("GL Version (string) : %s\n", version);
            printf("GL Version (integer) : %d.%d\n", major, minor);
            printf("GLSL Version : %s\n", glslVersion);
            return 0;
    }
    

    例如,这是它给我的输出(目前使用的是 Ubuntu 12.04)。

    GL Vendor : NVIDIA Corporation
    GL Renderer : GeForce GTX 660/PCIe/SSE2
    GL Version (string) : 4.4.0 NVIDIA 331.20
    GL Version (integer) : 4.4
    GLSL Version : 4.40 NVIDIA via Cg compiler
    

    【讨论】:

    • 该代码不起作用,但是当我在 ContextVersion 中将 4, 4 更改为 4, 3 时,它起作用了。我怎么知道我应该为我的内容版本使用什么?这link 是否显示了我的卡的能力。
    • 我注意到我得到一个额外的行“分段错误(核心转储)”。我有一个 7970 AMD GPU。这是输出错误吗?
    • 上下文版本应该是您想要支持的任何 OpenGL 版本。它看起来像 OpenGL 4.3,但您的卡应该支持 4.4。你用的是什么驱动程序?您也可以尝试删除 glutInitContextVersion 语句并查看它的默认版本。
    • 另一个问题:段错误是什么时候抛出的?
    • 我不明白。什么是段错误。我复制了你给我的代码,并得到了相同代码的额外行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2016-05-16
    • 2017-06-02
    • 2017-08-19
    相关资源
    最近更新 更多