gpt4 book ai didi

c++ - 使用空着色器程序绘制是否有效?

转载 作者:行者123 更新时间:2023-11-28 03:20:57 24 4
gpt4 key购买 nike

在我的游戏中有一个处理着色器、帧缓冲区和绘图的渲染模块。现在我想分别封装这三个任务的逻辑。我的想法是将渲染模块分成三个模块。我这样做是为了降低代码复杂性并轻松实现实时着色器重新加载,但这对我的问题并不重要。

绘图模块将使用 glCreateProgram() 创建空的着色器对象,并将它们与源文件的路径一起全局存储。着色器模块将检查它们并通过加载源文件、编译和链接来创建实际的着色器。

但在这个概念中,可能会出现渲染模块已经想要绘制但着色器模块尚未创建实际着色器的情况。所以我的问题是,用一个空的着色器程序绘制是否有效?发生这种情况时屏幕会变黑对我来说是完全可以接受的。创建着色器应该会很快准备就绪,因此延迟可能不明显。

用空着色器程序绘制是否有效?否则我如何实现在其他地方加载着色器的想法?

最佳答案

如何定义“有效”和“空”?

如果程序对象的最后一个链接不成功(或者如果它没有最后一个链接),则对其调用 glUseProgram 是一个 GL_INVALID_OPERATION 错误。这也意味着 glUseProgram 会失败,所以当前程序不会改变。所以所有glUniform calls将引用该程序而不是新程序;如果该程序为零,则会出现更多 GL_INVALID_OPERATION 错误。

如果没有当前程序(即程序为 0),则尝试渲染将产生未定义的行为。

未定义的行为对您的需求“有效”吗?如果您不打算向用户显示该帧(通过不调用交换缓冲区),那么您渲染的内容将无关紧要。 OpenGL 错误队列中的所有这些错误对您来说“有效”吗?

关于c++ - 使用空着色器程序绘制是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461877/

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