c++ - 为什么在 OpenGL 上创建着色器后需要分离和删除着色器?

标签 c++ opengl

我正在关注 this tutorial (link) ,它说你必须在链接后从程序中分离着色器,并且你必须在之后删除它们。

与编译 C++ 并行,直觉上,我认为“链接”是实际创建程序的行为(如,生成可执行文件),- 分离意味着以某种方式删除指针着色器对象 (我想它类似于 .o),在程序 中(仍然不是很清楚 - 程序不是此时已编译可执行文件?它怎么仍然持有指向某物的指针?) - 删除就像从文件夹中实际删除那些 .o

但这些都是猜测,那么到底发生了什么?

最佳答案

来自 glDeleteShader 上的 OpenGL 文档:

If a shader object to be deleted is attached to a program object, it will be flagged for deletion, but it will not be deleted until it is no longer attached to any program object, for any rendering context (i.e., it must be detached from wherever it was attached before it will be deleted)

因此,它更像是递减引用计数器而不是实际删除。

关于c++ - 为什么在 OpenGL 上创建着色器后需要分离和删除着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18736773/

相关文章:

c++ - 如何使用 C++ STL 算法重写嵌套循环?

c++ - 如何编写用于选择函数的样板代码

c++ - 从 C++ 项目添加对 WCF 服务的 Web 引用时出错

c++ - OpenGL:为什么具有相同 X 坐标的球体在输出中不是在一条直线上?

opengl - 编译着色器失败,我需要英特尔平台上的 ubuntu 的 openGL 驱动程序吗?

math - 3D 图形、单位向量和正交矩阵

c++ - 对 scoped_ptr 的弱引用?

c++ - 将 make_unique<X> 分配给 shared_ptr<X>

ubuntu - 是否仍然可以访问已弃用/删除的 OpenGL 函数?

c++ - 跟进: Asynchronous off-screen query performance