OpenGL 窗口立即关闭并出现错误 -1073740777 (0xc0000417)

Posted

技术标签:

【中文标题】OpenGL 窗口立即关闭并出现错误 -1073740777 (0xc0000417)【英文标题】:OpenGL window immediately closes with error -1073740777 (0xc0000417) 【发布时间】:2016-07-07 14:39:53 【问题描述】:

我正在使用 Visual Studio 2013 和 OpenGL 创建模拟。 理想情况下,我正在创建的窗口应该保持打开状态,以便我可以使用键进行更改,并且可以在同一窗口上查看不同的结果。 但是窗口在启动后立即关闭并显示错误代码

program.exe' 已退出,代码为 -1073740777 (0xc0000417)

我进行了一些调试并尝试对多行进行评论,发现如果我将“glutSwapBuffers()”作为评论,则窗口保持打开但为空。

有人可以解释一下吗?

void keyboard (unsigned char key, int x, int y)

 switch (key)
 
    case 'r': case 'R':
    if (filling==0)
    
        glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); 
        filling=1;
    
    else
    
        glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); 
        filling=0;
    
    break;
    case 27:
    exit(0);
    break;
 

.

void display(void)

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(-90,0.0,1.0,0.0); 
glRotatef(-90,1.0,0.0,0.0); 

rotation_x = rotation_x + (rotation_x_increment - rotation_x)/50;
rotation_y = rotation_y + (rotation_y_increment - rotation_y)/50;
rotation_z = rotation_z + rotation_z_increment;

if (rotation_x > 359) rotation_x = 0;
if (rotation_y > 359) rotation_y = 0;
if (rotation_z > 359) rotation_z = 0;

if(rotation_x_increment > 359) rotation_x_increment = 0;
if(rotation_y_increment > 359) rotation_y_increment = 0;
if(rotation_z_increment > 359) rotation_z_increment = 0;

glRotatef(rotation_x,1.0,0.0,0.0); 
glRotatef(rotation_y,0.0,1.0,0.0);
glRotatef(rotation_z,0.0,0.0,1.0);

glTranslatef(x_translate,0.0,0.0);
glTranslatef(0.0,y_translate,0.0);
glTranslatef(0,0,z_translate); 

glFlush(); // This force the execution of OpenGL commands
glutSwapBuffers(); 
glFinish();

.

int main(int argc, char **argv)

IntroDisplay();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(screen_width,screen_height);
glutInitWindowPosition(0,0);
glutCreateWindow("Ultrasonic Testing");
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc (resize);
glutKeyboardFunc (keyboard);
glutSpecialFunc (keyboard_s);
glutMouseFunc(mouse);
glutMotionFunc(mouseMove);
init();
glutMainLoop();
return 0;

【问题讨论】:

STATUS_INVALID_CRUNTIME_PARAMETER - 可能是混合 crts 之类的,从源代码重建一切 @paulm 尝试重建。尝试清洁和重建。还是没有变化。它可能与windows或glut32.dll有关吗?因为我有段时间没改代码了,突然就开​​始这样了。 您仍然有一个glEnd,但没有对应的glBegin @BDL 我删除了 glEnd。仍然没有变化。 你更新显卡驱动了吗? 【参考方案1】:

你有没有尝试编译和运行一个绝对最小的、简单的程序,除了用 GLUT 创建一个窗口,注册一个只清除和交换缓冲区的显示函数之外什么都不做。 IE。这个

#include <GL/glut.h>
static void display(void)

    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();

int main(int argc, char *argv[])

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
    glutCreateWindow("test");
    glutDisplayFunc(display);
    glutIdleFunc(glutPostRedisplay);
    glutMainLoop();
    return 0;

我对您遇到麻烦的原因的猜测是,您使用的某些库是使用与您正在使用的编译器不同的编译器构建的,并且预期运行时的差异会给您带来一些麻烦。如果上面给出的最小程序崩溃,那么这是最可能的原因。

请注意,在您的代码中,对glFinishglFlush 的调用是多余的,因为缓冲区交换暗示了刷新和完成。此外,将显示功能注册为 GLUT 空闲处理程序通常不是一个好主意;如果您需要持续显示更新,请注册 glutPostRedisplay。

【讨论】:

我试过最小的程序,它也崩溃了。你建议我做什么来修复运行时错误? @RahulK:既然您提到当调用 glutSwapBuffers 时会出现问题,那么您的 GLUT 特定版本似乎是罪魁祸首。您最好的做法是提取 FreeGLUT (prdownloads.sourceforge.net/freeglut/…) 的源代码并使用您自己的编译器自己构建它。实际上,将 FreeGLUT 简单地放入您的项目中并将其作为解决方案添加到您的 VisualStudio 项目中是很有意义的,这样它就可以与您的主程序一起构建。 我把它修好了。我重新安装了整个 Visual Studio 和所有更新。仍然不确定确切的问题是什么。非常感谢您的帮助。 :)【参考方案2】:

问题与我的驱动程序有关。我重新安装了所有东西后它工作正常。

我认为这是因为交换功能还取决于系统而不仅仅是库。我在某处读过。

【讨论】:

以上是关于OpenGL 窗口立即关闭并出现错误 -1073740777 (0xc0000417)的主要内容,如果未能解决你的问题,请参考以下文章

PyQt 窗口在打开后立即关闭

关闭一个自定义弹出窗口UIViewController并立即显示另一个自定义弹出窗口UIViewController -SWIFT

浏览器上的 GCDAsyncSocket 立即连接和断开连接,并出现“远程对等方关闭套接字”错误

PyQt:为啥新窗口在打开后立即关闭[重复]

创建一个新的打开窗口并插入图片[关闭]

如何确保菜单关闭时立即消失,而不是部分消失?