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

时间:2008-10-24 02:12:52

标签: opengl textures

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

3 个答案:

答案 0 :(得分:2)

纹理不是(默认情况下)跨上下文共享 - 您必须明确启用它,但是如何执行此操作是特定于平台的。

在win32上,它是wglShareLists,并且在大多数其他平台上,它是在您创建上下文时指定的(例如,在OS-X上使用share参数到aglCreateContext

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:1)

据我所知,我没有启用任何纹理共享。但是,所有显示上下文都显示相同的纹理。