具有多个显示上下文的OpenGL纹理

Dan*_*gel 5 opengl textures

我有一个未定义的显示上下文数,每个都会显示一个纹理.当我调用glGenTextures时,我会在所有显示上下文中返回相同的名称.这会有用吗?即使它们具有相同的名称,它们仍会存储和显示不同的纹理吗?如果不是应该做些什么来解决这个问题?

Dam*_*mon 2

从 glGenTexture 获取相同的名称和显示相同的纹理不是一回事。

纹理名称只是由上下文自行决定的整数,通常从 1 开始,并随着每个 glGenTexture 递增,但不一定如此。实现并不需要像这样工作(尽管大多数都是这样)。然而,理论上你也可以得到更多或更少的“随机”数字,例如一个为任何类型的对象递增的整数(即不仅是纹理,还包括缓冲区和着色器),甚至是 32 位指针地址驱动程序的地址空间,或者其他一些神秘的东西。没有要求名称必须是特定的。

在旧版 OpenGL 中,您甚至可以编写自己的名称,而不是使用 glGenTexture,但现在这不再合法。我不确定当允许时他们会怎么想,但无论如何......:)

不同上下文中的相同数字(名称)通常会是不同的纹理,或者可能根本没有纹理。因此,如果您确实在不同上下文中看到具有相同纹理名称的相同纹理,那么您要么具有共享上下文,要么驱动程序有问题。

请注意,如果您使用 wglCreateContextAttribsARB,则第二个参数是已存在上下文的句柄(或 null)。如果您在此处提供上下文句柄,即使没有显式调用 glShareLists,您也将拥有共享上下文。也许这就是偶然发生的事情。