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

有帮助吗?

解决方案

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

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

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

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

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

其他提示

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top