Nic*_*mot 3 opengl uniqueidentifier
OpenGL的传统是让用户使用unsigned int句柄操作OpenGL对象.为什么不直接给指针?唯一ID比指针有什么优势?
TL; DR:OpenGL ID不会双射地映射到内存位置.单个OpenGL ID可以同时引用多个存储器位置.此外,OpenGL也被设计用于分布式渲染架构(如X11),并且在不同机器上运行的间接上下文程序可以使用相同的OpenGL上下文.
OpenGL被设计为架构和显示系统无关的API.当OpenGL首次开发时,这是根据客户端 - 服务器显示架构(如X11)发生的.如果你研究一下OpenGL规范,即使是现代的OpenGL-4,也指的是客户端和服务器.
但是在客户端/服务器架构中,指针毫无意义.例如,客户端无法访问服务器的地址空间而不会跳过一些环节.即使您设置了共享内存映射,对象的地址也不同于客户端和服务器.除此之外,在X11等体系结构上,多个客户端可以使用单个间接OpenGL上下文,甚至可以在不同的计算机上运行.指针根本不起作用.
最后但并非最不重要的是,OpenGL对象模型是高度抽象的,OpenGL绘图模型是异步的.假设我执行以下操作:
id = glGenTextures(1)
glBindTexture(id)
glTexStorage(…)
glTexSubImage(image_a)
draw_something()
glTexSubImage(image_b)
draw_someting_b()
Run Code Online (Sandbox Code Playgroud)
当这个小片段的结尾已经达到了,其实什么都可能被抽然而,因为没有同步点已经到达(glfinish在,glReadPixels,缓冲交换).注意两次调用glTexSubImage,它发生在同一个id上.当像素最终被放到帧缓冲区时,有两个不同的图像来自单个纹理ID,因为OpenGL可以保证,事物看起来好像是同步绘制的.因此,在绘图批次结束时,单个对象ID可以指代在存储器中具有不同位置的不同数据集的整个集合.