OpenGL:切换多边形模式会导致段错误

时间:2016-05-09 12:27:49

标签: c++ opengl segmentation-fault

我的电脑使用英特尔显卡运行Ubuntu 16.04。我使用Mesa 11.2作为我的OpenGL配置文件。

我简陋的OpenGL程序在窗口中显示一个简单的方块。如果按下某个键,我想让程序切换进出线框模式,所以我定义了以下回调函数:

true

不幸的是,在程序运行时按m会导致段错误。奇怪的是,在我的其他计算机上(运行Ubuntu 16.04但使用的是Nvidia GPU)我没有这样的问题,程序按预期工作。

问题不在nil:我可以将其置于我的void keyCallback(GLFWwindow *window, int key, int scancode, int action, int mode) { if (key == GLFW_KEY_ESCAPE and action == GLFW_PRESS) { glfwSetWindowShouldClose(window, GL_TRUE); } if (key == GLFW_KEY_M and action == GLFW_PRESS) { // Find the rasterizing mode. GLint rastMode; glGetIntegerv(GL_POLYGON_MODE, &rastMode); // Switch modes depending on current rasterizing mode. if (rastMode == GL_FILL) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } else { glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); } } } 函数中,程序将成功切换模式。这些问题似乎与glPolygonMode有关。如果我在main函数中调用该函数(比如说,在游戏循环之外),我的方块将拒绝出现(尽管没有段错误)。

这里是完整的代码:

glGetIntegerv

1 个答案:

答案 0 :(得分:2)

文档说:

  

params返回两个值:符号常量,指示前向和后向多边形是否被栅格化为点,线或填充多边形

结束@Wyzard和我的评论:glGetIntegerv(GL_POLYGON_MODE, &rastMode);需要两个内存整数来写入。段错是由于写过rastMode int

解决方案是传递两个整数的缓冲区。