是否有一种方法可以强制OpenGL标识符从1开始而不是0
Is there a way to force OpenGL identifiers to start at one instead of zero?
我将OpenGL标识符存储在GLuint
类型的变量中。但是我不知道我应该把这些变量初始化为什么值。我想将它们初始化为零,但不幸的是,这是OpenGL的有效标识符。
变量必须在存储OpenGL对象之前初始化,因为这是稍后异步完成的。所以我能强迫OpenGL开始索引1而不是0吗?或者我应该使用GLint
并初始化为-1
吗?
我想用一种干净的方式解决这个问题。当然,我可以存储一对变量和一个布尔标志,或者类似的东西。但那就太差劲了。你是如何处理这个问题的?
我想将它们初始化为零,但不幸的是,这是OpenGL的有效标识符。
不,它不是。对于大多数OpenGL对象类型,0表示"不是对象"。唯一具有有效0对象的是fbo(其中0表示默认Framebuffer),转换反馈对象和纹理(您应该将视为如果它们不是对象)。
用0。使用0调用任何glDelete*
都是合法的,并且不会发生任何事情,即使0是该类型的有效对象。
当然,我可以存储一对变量和一个布尔标志或类似的东西。但那就太差劲了。你是如何处理这个问题的?
使用boost::optional
,这是您所描述的基于模板的实现。看到这里。
你可以这样做:
boost::optional<GLuint> foo; // Uninitialised
if (foo) // foo evaluates to false
{
Bar(*foo); // Doesn't execute
}
*foo = 3; // Initialised
if (foo) // foo evaluates to true
{
Bar(*foo); // Executes
}
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 了解 GLM- openGL 中的相机转换
- #ifdef和未声明的标识符
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- f2、f3、f4标识符未找到
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- OpenGL - 'glTexSubImage3D':找不到标识符
- OpenGL在Visual C++2010学习版中运行-找不到标识符
- 是否有一种方法可以强制OpenGL标识符从1开始而不是0
- 在用qt和opengl编译c++项目时,标识符未发现错误