gpt4 book ai didi

c++ - glEnable(GL_ALPHA_TEST) 给出了无效的枚举(似乎被折旧了——虽然代码有效——但为什么呢?)

转载 作者:行者123 更新时间:2023-12-05 02:32:53 24 4
gpt4 key购买 nike

快速提问 - 标题说明了一切:

在我的 OpenGL 代码 (3.3) 中,我使用了这条线

glEnable(GL_ALPHA_TEST);

我已经使用我的代码好几个星期了,从来没有检查过错误(通过 glGetError()),因为它工作得很好。现在我做了(因为其他东西不起作用),这一行给我一个无效的枚举错误。 Google 透露 glEnable(GL_ALPHA_TEST) 自 OpenGL 3(核心配置文件?)以来似乎已贬值,我想这就是错误的原因。

但是那部分代码仍然完全符合我的要求。更多代码:

glDisable(GL_CULL_FACE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_ALPHA_TEST);
// buffer-stuff
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 9, NumParticles);

那么,我是不是在里面放了一些多余的东西?我在屏幕上绘制粒子(实例化),每个三角形使用 2 个三角形(给出一个四边形),在粒子颜色的 alpha channel 中,我基本上设置了一个圆(如果在圆中则为 1.0f,否则为 0.0 F)。深度测试当然是为了不从前面的粒子的后面和前面绘制粒子,而 glBlendFunc() (据我所知是 glEnabled(GL_ALPHA_TEST) )用于移除不在圆圈中的位。我仍在学习 OpenGL 并试图理解为什么该代码实际上有效(一次)以及为什么我显然不需要 glEnable(GL_ALPHA_TEST)...

最佳答案

Yes, I'm using discard in the fragment shader. Otherwise, I just used to code above, so I guess, only one depth value (standard?).

discardglEnable(GL_ALPHA_TEST); 的替代品。

So, did I put something redundant in there?

是的 discardglEnable(GL_ALPHA_TEST); 将是多余的,如果你使用 glEnable(GL_ALPHA_TEST); 仍然存在的配置文件并且如果您对每个具有 alpha 的片段使用 discard,而 glAlphaFunc 会丢弃该片段。

由于您处于 glEnable(GL_ALPHA_TEST); 不再存在的配置文件中,因此 glEnable(GL_ALPHA_TEST); 对您的代码没有影响,并且可以被删除。

关于c++ - glEnable(GL_ALPHA_TEST) 给出了无效的枚举(似乎被折旧了——虽然代码有效——但为什么呢?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71114091/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com