gpt4 book ai didi

OpenGL 程序/着色器未初始化

转载 作者:行者123 更新时间:2023-12-02 08:45:04 25 4
gpt4 key购买 nike

执行此操作的正确方法是什么?

我正在执行以下步骤:

  1. 创建着色器
  2. 编译着色器
  3. 创建程序
  4. 将着色器附加到程序
  5. 链接程序
  6. 删除着色器

http://www.opengl.org/wiki/GLSL_Object它说:即使在链接程序之后,您也不必显式分离着色器对象。但是,最好在链接完成后执行此操作,否则当您尝试删除附加的着色器对象时,程序对象将使其保持事件状态。

也来自Proper way to delete GLSL shader?说如果我不删除着色器,它会增加内存。

所以检查http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml ,它表示如果着色器已通过调用 glDeleteShader 被标记为删除,并且它未附加到任何其他程序对象,则在分离后它将被删除。

所以我的 #6 是没有用的,除非我在正确之后将其分离?

我应该在程序正确编译后分离并删除(以节省内存)还是应该仅在我的应用程序关闭时分离/删除?

最佳答案

So my #6 is useless unless I detach it after right?

是的。 GL 所做的基本上就是引用计数。只要其他对象引用该着色器对象,它就会保持事件状态。如果删除该对象,实际删除将推迟到最后一个引用被删除为止。

Should I detach and delete after the Program has been compiled correctly (to save the memory) or should I detach/delete only when my application is closing down?

这取决于你。一旦您不再需要它,可以将其删除。如果您不打算重新链接该着色器,则可以在初始链接操作后立即销毁所有附加的着色器对象。然而,着色器对象毕竟不会消耗太多内存(并且不会进入 GPU 内存,只有最终的程序才会),如果您稍后删除它们,或者甚至不删除它们,通常也没什么大不了的。 all,因为当GL上下文被销毁时(包括应用程序退出的情况),所有的GL资源都会被销毁。当然,如果您在运行时动态创建着色器,您还应该动态删除旧的和未使用的对象,以避免积累大量未使用的对象并有效泄漏内存/对象名称等。

关于OpenGL 程序/着色器未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18516798/

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