我有一个未定义的显示上下文数,每个都会显示一个纹理。当我调用glGenTextures时,我会在所有显示上下文中返回相同的名称。这会有用吗?即使它们具有相同的名称,它们仍会存储和显示不同的纹理吗?如果不是应该做些什么来解决这个问题?
答案 0 :(得分:2)
纹理不是(默认情况下)跨上下文共享 - 您必须明确启用它,但是如何执行此操作是特定于平台的。
在win32上,它是wglShareLists
,并且在大多数其他平台上,它是在您创建上下文时指定的(例如,在OS-X上使用share
参数到aglCreateContext
。
答案 1 :(得分:2)
从glGenTexture获取相同的名称并显示相同的纹理并不是一回事。
纹理名称只是上下文自行决定的整数,通常从1开始,并随每个glGenTexture递增,但不一定如此。一个实现不需要这样工作(尽管大多数都这样)。但是,理论上你也可以获得或多或少的“随机”数字,例如一个为任何类型的对象(即不仅仅是纹理,还有缓冲区和着色器)递增的整数,或者甚至是32位指针地址。司机的地址空间,或其他一些其他的东西。不要求名称必须是特定的名称。
在传统的OpenGL中,您甚至可以自己编写名称而不是使用glGenTexture,但现在已经不再合法了。我不确定他们在允许的时候会怎么想,但无论如何......:)
不同上下文中的相同数字(名称)通常是不同的纹理,或者可能根本没有纹理。因此,如果您确实在具有相同纹理名称的不同上下文中看到相同的纹理,那么您要么具有共享上下文,要么驱动程序是错误的。
请注意,如果使用wglCreateContextAttribsARB,则第二个参数是已存在上下文的句柄(或null)。如果您在此处提供上下文句柄,则即使没有显式调用glShareLists,您也将拥有共享上下文。也许这就是偶然发生的事情。
答案 2 :(得分:1)
据我所知,我没有启用任何纹理共享。但是,所有显示上下文都显示相同的纹理。