OpenGL 在已绑定时绑定
OpenGL bind when already bound
我正在用OpenGL 3.2+编写一个引擎。可渲染对象具有一个网格(又名 VAO)和几个材质(又名着色器和程序)。所有可渲染对象都存储在渲染队列中,该队列对材质和网格的渲染过程进行排序,从而需要最少的 OpenGL 绑定调用。
但是,有时它会绑定已经绑定的对象,我的问题是:OpenGL 是否会自动检测您尝试绑定已绑定的对象,并且是否跳过所有昂贵的操作,或者您是否必须实现一个系统来检测对象是否已经绑定自己?
如果 OpenGL 没有检测到这一点,那么通过 glGet* 获取对象名称并与你尝试绑定的对象进行比较,还是只跟踪当前绑定的对象会更快?
我不认为规范需要执行这样的检查,但每个主要的实现都需要。但是,如果您决定自己做 - 为什么不自己存储值呢?glGet在这里没有特别的兴趣。顺便说一句,材质和着色器不是一回事。
通常,当您启用某些内容时,您需要在不需要它后禁用它。因此,答案是:您必须跟踪程序中完成的操作。
我能想到的最简单的例子是:
glEnable(GL_TEXTURE_2D);
glBindTexture( 0, id );
// render
glDisable(GL_TEXTURE_2D);
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- OpenGL 在已绑定时绑定