c++ - 如何在 linux (Ubuntu 14.04) 中找到我的 OpenGL 版本

标签 c++ linux ubuntu terminal opengl-4

我开始阅读 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 提供的代码的附加问题: 我注意到我得到了额外的一行“Segmentation fault (core dumped)”。我有一个 7970 AMD GPU。这个输出是错误的吗?

最佳答案

在获取有关 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

关于c++ - 如何在 linux (Ubuntu 14.04) 中找到我的 OpenGL 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24708231/

相关文章:

c++ - 在 C++ 中存储结果 int*long 的最佳数据类型是什么

c++ - 删除字符串 vector 中的重复字符串

php - 如何将动态子域别名与 apache 服务器上的子文件夹匹配

Linux命令做通配符匹配

php - Mysqli错误2002 : no such file or directory

java - 未安装 Oracle JDK 8。已安装的子进程安装后脚本返回错误退出状态 1

c# - 将一些移位代码从 C++ 复制到 C#

c++ - lua5.3 dll 文件中缺少名称

linux - 为什么 PyQt5 QFileDialog.getExistingDirectory 看不到 ~/.config/subdirectory?

ubuntu - 预期 5.43.0 和 tclsh 8.4 的段错误