C++ OpenGL纹理ID的范围是什么?

C++ OpenGL纹理ID的范围是什么?,c++,visual-c++,opengl,graphics,textures,C++,Visual C++,Opengl,Graphics,Textures,我有一个拥有属性Texture\u ID的对象。我需要在构造函数中初始化Texture\u ID的值,因此我希望OpenGL未使用的一些值表示纹理尚未设置 我不知道零(0)是否是一个好值?如果有一个OpenGL应用于纹理ID的范围,我想要一个超出该范围的值。有什么想法吗?我宁愿在构造函数中初始化纹理。这样,您就不会使对象处于无效状态。0是您要查找的值(表示未设置的纹理ID/未创建的纹理),因为0从来都不是有效的纹理ID。0是OpenGL用于其自身默认纹理的值。它不会将该值返回给您,您可以使用该值

我有一个拥有属性Texture\u ID的对象。我需要在构造函数中初始化Texture\u ID的值,因此我希望OpenGL未使用的一些值表示纹理尚未设置


我不知道零(0)是否是一个好值?如果有一个OpenGL应用于纹理ID的范围,我想要一个超出该范围的值。有什么想法吗?

我宁愿在构造函数中初始化纹理。这样,您就不会使对象处于无效状态。

0是您要查找的值(表示未设置的纹理ID/未创建的纹理),因为0从来都不是有效的纹理ID。

0
是OpenGL用于其自身默认纹理的值。它不会将该值返回给您,您可以使用该值进行错误检查


尽管我建议使用
-1

+1请参见“保留值0以表示每个纹理目标的默认纹理。”@Paul:您创建的任何纹理对象都将具有非零值。如果这就是你打算如何使用这个类,那么零是完全可以的。@Paul他似乎是对的。但对于OpenGL参考,“默认纹理”只是“无纹理”或“无应用程序创建的纹理对象”的另一个术语。因此,将0传递给
glBindTexture
不会导致错误,但也不会产生任何效果(或未定义的效果、黑色纹理或其他)。因此,0非常适合表示单位化/无效的纹理。实际上,整个“默认纹理”是OpenGL-1.0的一个错误,在OpenGL-1.0中还没有纹理对象。要拥有多个纹理,可以在绘制要纹理的几何体之前使用glTexImage,或者使用显示列表封装其中的纹理图像;这也是为什么共享显示列表将在现代OpenGL中共享纹理的原因。由于没有纹理对象,只有一个纹理单元,OpenGL-1.1引入了术语“默认纹理”,作为传统(当时已经)OpenGL-1.1程序的故障保护。我的意思是“…传统OpenGL-1.0程序”。当然。延迟编辑该注释。纹理ID为GLuint,意思是“unsigned int”,我认为使用
0xffffffff
时“-1”无效。对你来说仍然是
-1
!但是在我的项目中,当对象还没有纹理时,它就被初始化了。只是项目的一个限制。例如:我必须用颜色显示一个立方体,然后打开一个图像文件以获取纹理在立方体上绘制,因此在这种情况下,当在构造函数中,纹理未知时,可以在存在有效的OpenGL上下文之前调用构造函数,这将导致几个问题。@DatenWalf:如果我有一个表示OpenGL纹理对象的对象,那么如果没有OpenGL上下文,该对象将毫无意义。@R.Martinho Fernandes:在这种情况下,一个好的OOP设计将确保按照约定有一个OpenGL上下文(或上下文封装引用)必须传递给纹理对象构造函数。好的库设计可以通过很难以错误的方式使用库来识别。@datenwolf:是的,我完全同意。