当前位置: 首页 > 知识库问答 >
问题:

启用深度测试时GL错误1280

杭柏
2023-03-14

我有一些问题与我写的一个opengl应用程序。

GLenum err = 0;
glEnable( GL_DEPTH_TEST );
err = glGetError();
if ( err != GL_NO_ERROR )
    printf( "Error: %s\n",glewGetErrorString( err ) );

上面的代码将未知错误打印到控制台,当我单步执行时,我得到1280代码。我已经在khronos页面上查看了glEnable,并且有enum,那么这为什么会引起问题呢?我查过错误代码,它是一个无效的枚举,但这怎么可能呢?

共有3个答案

郎建章
2023-03-14

我不认为这个错误来自glEnable(GL_DEPTH_TEST)

code1280表示GL_INVALID_ENUM

我以前遇到过这个错误。在我的情况下,我错误地将一个renderer_程序传递给glEnable方法。将正确的枚举传递给该方法后,OpenGL不会告诉任何错误。

所以,也许你需要关注代码的其他部分。

祁远
2023-03-14

您确定错误来自glEnable(GL_DEPTH_TEST);调用吗?

你可以试试这个:

PrintErrors();               // Test for previous error
glEnable(GL_DEPTH_TEST);
PrintErrors();

...

void PrintError() {
    GLenum err;
    for(;;) {
        err = glGetError();
        if (err == GL_NO_ERROR) break;
        printf("Error: %s\n", glewGetErrorString(err));
    }
}
郎项禹
2023-03-14

错误0x500/1280表示GL_INVALID_ENUM,这意味着函数调用中不允许有一个枚举数。显然,这不应该发生在GL_DEPTH_TEST中,自从OpenGL 1.0以来,glEnable中就允许这种情况。以下是发生这种情况的所有可能原因:

  1. 错误来自其他函数。在进行此调用之前,请确保您已从队列中删除所有错误。你说你已经尝试过了;我只是全面考虑。
  2. 您的OpenGL加载库有错误。也许它给了GL_DEPTH_TEST错误的值。GL_DEPTH_TEST的值应该是0x0B71。或者,它可能在glEnable中放置了错误的函数。为了测试这一点,您可以调试库的初始化函数,或者您可以使用glIntercept或类似的工具来准确查看正在调用的函数。
  3. 驱动程序错误。要测试这一点,请尝试将此启用(带有错误检查)放在代码中的不同位置。它在哪里出错,在哪里不出错?
 类似资料:
  • 在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了

  • 大家都知道立方体的顶点数据经过顶点着色器、光栅、片元着色器等渲染管线单元处理后会得到立方体每个面的片元数据, 每个片元不仅包含RGB像素值,还有透明度分量A,片元的深度值Z,屏幕坐标(X,Y)等数据。 屏幕坐标(X,Y) 屏幕坐标指的是每一个片元的像素值在显示器canvas画布上的显示位置,如果一个网页上有多个canvas画布,或者打开多个包含canvas画布的网页窗口, 每一个引入WebGL的c

  • 我正在使用Qt/openGL,激活深度缓冲区时遇到了一些问题。 在每一帧,我激活以下状态:glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); 另外,我检查了我的深度缓冲区的大小不是空的(glGetIntegerv(GL_DEPTH_BITS)给我24,这是预期的值),但是深度测试不起作用,一些应该通过深度测试丢弃的片段不起作用。 知道吗?

  • jasmine:在jasmine指定的超时内没有调用异步回调。DEFAULT_TIMEOUT_INTERVAL 测试window.post消息指令 用Jasmine async测试postMessage不起作用 我有下面的代码,我正在接收下面的输出。 在jasmine.DEFAULT\u timeout\u INTERVAL指定的超时内未调用异步回调 myService在父描述函数中定义。正如我所

  • 👥面试题目 java多线程的线程状态,多线程用什么库比较多 考察的知识点: Java多线程基础:理解Java线程生命周期的状态及其转换。 多线程编程技术:熟悉Java中用于实现多线程编程的技术栈。 并发工具类:掌握java.util.concurrent包中提供的高级并发工具类。 线程安全性和效率:了解如何在保证线程安全性的同时提高程序效率。 需要从哪些方面来作答: 线程状态:解释Java线程的