OpenGL glGetIntegerv GL_MAX_VERTEX_ATTRIBS 分段错误

Posted

技术标签:

【中文标题】OpenGL glGetIntegerv GL_MAX_VERTEX_ATTRIBS 分段错误【英文标题】:OpenGL glGetIntegerv GL_MAX_VERTEX_ATTRIBS Segmentation fault 【发布时间】:2018-04-22 16:56:53 【问题描述】:

我正在学习 OpenGL,遇到了这个问题:

源代码:

#include <iostream>
#include <glad/glad.h>

int nrAttributes;

int main()

    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);

    std::cout << "max vertex: " << nrAttributes << std::endl;

    return 0;

我用这个命令编译我的代码:

g++ main.cpp --std=c++11 -o main.o src/glad.c -I include -lglfw -lGL -lX11 -lpthread -lXrandr -lXi -ldl

我使用的是 linux mint 18.04 x64

总帐信息:glxinfo | grep OpenGL

OpenGL vendor string: X.Org
OpenGL renderer string: AMD TURKS (DRM 2.50.0 / 4.13.0-38-generic, LLVM 5.0.0)
OpenGL core profile version string: 3.3 (Core Profile) Mesa 17.2.8
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 17.2.8
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 17.2.8
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions:

当我运行代码时,我得到以下输出:

Segmentation fault (core dumped)

谁能解释一下为什么会这样?

【问题讨论】:

您需要一个有效且当前的OpenGL Context 来调用任何OpenGL 指令。另见OpenGL Loading Library 和Creating an OpenGL Context @Rabbid76 哦,是的,你是对的。谢谢你指出。愚蠢的错误对不起:|配置上下文并且它工作。 :) 我应该从堆栈中删除问题吗?因为这是我的愚蠢错误 【参考方案1】:

正如@Rabbid76 指出的那样,我需要一个有效的上下文来调用 opengl 函数。

这是工作代码,希望对其他人有所帮助。

#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>

int main()

    glfwInit();
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
    glfwMakeContextCurrent(window);
    gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);

    int nrAttributes;
    glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
    std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl;

    return 0;

【讨论】:

以上是关于OpenGL glGetIntegerv GL_MAX_VERTEX_ATTRIBS 分段错误的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL-保存BMP图片

OpenGL中的顶点限制

opengl 通过射线鼠标拾取怎么都得不到准确数据

Android 上的 Opengl ES:如何使用 gluUnProject?

openGL之API学习(二零五)GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_IMAGE_UNITS_ARB GL_MAX_COMBINED_TEXTURE_IM纹理单元数

iOS上的OpenGL ES 1.1:没有剪裁平面?