OpenGL纹理与多个显示上下文

5

我有许多显示上下文,每个上下文都会显示一个纹理。当我调用glGenTextures时,所有显示上下文都返回相同的名称。这样行得通吗?即使它们具有相同的名称,它们仍然会存储和显示不同的纹理吗?如果不行,该怎么办才能避免这种情况?

3个回答

2
从glGenTexture中获取相同的名称并显示相同的纹理并不是同一件事。
纹理名称只是上下文自行决定的整数,通常从1开始,并随着每个glGenTexture而递增,但不一定如此。实现不需要按照这种方式工作(尽管大多数都是如此)。但是,你也可以在理论上获得任何更多或更少“随机”的数字,例如为任何类型的对象(即不仅仅是纹理,还包括缓冲区和着色器)递增的整数,甚至是驱动程序地址空间中的32位指针地址或其他神秘的东西。没有要求名称必须是特定的内容。
在传统的OpenGL中,你甚至可以编写自己的名称而不使用glGenTexture,但现在这已经不合法了。我不确定他们当时允许这样做的原因,但无论如何... :)
在不同的上下文中,相同的数字(名称)通常会是不同的纹理,或者可能根本没有纹理。因此,如果你在具有相同纹理名称的不同上下文中看到相同的纹理,则你要么具有共享上下文,要么驱动程序存在错误。
请注意,如果你使用wglCreateContextAttribsARB,第二个参数是已经存在的上下文的句柄(或null)。如果你在这里提供上下文句柄,即使没有明确调用glShareLists,你也将具有共享上下文。也许这是意外发生的。

2

纹理默认情况下不会在不同上下文之间共享 - 您必须明确启用此功能,但是如何启用则因平台而异。

在 win32 上,使用 wglShareLists,而在大多数其他平台上,则在创建上下文时指定(例如,在 OS-X 上使用 aglCreateContextshare 参数)。


1
据我所知,我没有启用任何纹理共享。然而,相同的纹理正在所有显示上下文中显示。

你是如何创建图形上下文的?你使用的平台是什么? - Menkboy
我有完全相同的问题。我正在使用PyQt5。平台:Linux(Ubuntu16),英特尔显卡。 - El Sampsa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接