OpenGL深度测试在某些计算机上不起作用

问题描述

我的第一个问题在这里。在我的程序中,深度测试可以在某些计算机上正常运行,但不能在其他计算机上运行,​​位于较远位置的对象会覆盖位于较近位置的对象。我打电话给glEnable(GL_DEPTH_TEST);并尝试打电话给glDepthFunc(GL_LESS);,正如我所说,在某些计算机上一切正常,但是在其他计算机上同一个程序却无法正常工作。怎么解决

编辑:问题已解决。在调用之前添加了这些行 al_create_display();,一切正常

  al_set_new_display_option(  ALLEGRO_COLOR_SIZE,32,ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_DEPTH_SIZE,24,ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_STENCIL_SIZE,8,ALLEGRO_REQUIRE);
  al_set_new_display_option(  ALLEGRO_AUX_BUFFERS,ALLEGRO_REQUIRE);  
  al_set_new_display_option(  ALLEGRO_SAMPLES,4,ALLEGRO_SUGGEST);

解决方法

除了激活Depth TestglEnable(GL_DEPTH_TEST))之外,重要的是当前的framebuffer具有depth buffer
default framebuffer是在构造OpenGL Context时创建的。 OpenGL上下文的创建取决于操作系统和窗口库(例如GLFWSDLSFML)。默认情况下是否创建深度缓冲区通常取决于系统。通常,窗口库提供了其他选项,用于在生成OpenGL窗口时显式指定深度缓冲区:

例如: