簡體   English   中英

在Pyglet Windows之間共享緩沖區(VAO / VBO)

[英]Sharing Buffers (VAO/VBO) between Pyglet Windows

Pyglet的“說”緩沖區/數據(例如VAO,VBO和着色器)默認情況下在Window GL上下文之間共享,但是我已經嘗試了所有在Windows之間共享緩沖區的方法。 當一個窗口處於活動狀態時,我生成並分配數據的緩沖區無法被另一個窗口讀取(未檢測到)。

我試過只使用Pyglet.gl綁定(沒有PyOpenGL)。 在創建窗口並使用各種方法(例如,創建新的Config()解析該值時,請指定gl.current_context作為上下文參數。

順便說一句,我目前有兩個窗口,每個窗口都分配給同一屏幕(未明確說明,由於我的計算機只有一個屏幕,因此默認情況下假定為窗口),因此這些窗口使用同一GPU。

OpenGL上下文不依賴於Windows。 但是,由於遺留原因,OpenGL上下文是使用窗口(可繪制上下文)創建的。 Pyglet使您可以通過window.context屬性訪問窗口的上下文。 在創建窗口時,您可以指定一個預先存在的上下文,用於該窗口上的OpenGL操作¹。 您可以將其用於創建其他窗口的上下文。

import pyglet
win_a = pyglet.window.Window()
win_b = pyglet.window.Window(context=win_a.context)

然后, win_awin_b將使用相同的 OpenGL上下文。 請注意,這與OpenGL列表(資源)共享不同,在OpenGL列表(資源)共享中,幾個不同的OpenGL上下文共享一組通用的數據保存對象。


¹–應當指出,這是不必要的約束,因為可以自由地混合和匹配相互兼容的OpenGL上下文和可繪制對象(窗口,PBuffer等)。

我不使用pyglet,但閱讀其Windowing,Context配置文檔中的“ share”一詞有點令人困惑。

如果您對每個窗口使用唯一的相同gl背景,那么顯然,所有窗口都可以訪問相同的資源,例如VBO,紋理等。這可能是您的最佳選擇。

如果您想要不同的上下文(例如,某種多線程用法),但共享對這些資源的訪問權限,則同一文檔講述使用Config.create_context(share)方法。 但這一篇文檔告訴我們,該方法不推薦使用CanvasConfig.create_context替代。

假設您已經創建了一個窗口,或者傳遞了一個config或者讓它創建了一個默認窗口:

mywindow1 = pyglet.window.Window()

采取其配置和上下文:

config1 = mywindow1.config
context1 = mywindow1.context

使用它們來創建共享上下文:

context2 = config1.create_context(context1)

為此新上下文創建另一個窗口

window2 = pyglet.window.Window(context=context2)

我再說一遍我不認識pyglet。 因此很可能您找到了最佳方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM