簡體   English   中英

OpenGL多線程/共享上下文和glGenBuffers

[英]OpenGL multithreading/shared context and glGenBuffers

如果我計划在OpenGL中使用多線程,我應該為每個上下文分別使用緩沖區(來自glGenBuffers)嗎?

我對OpenGL多線程還不太了解(現在我在“單一”線程中工作)。 我需要知道我是否可以共享已經推送到Video Memory的緩沖區(使用glBufferData / glBufferSubData),或者我必須保留另一個線程的緩沖區副本。

您不希望在多個線程中使用多個上下文。 你真的沒有。

雖然這聽起來是個好主意,但在實踐中,muli-context-multi-thread在驅動程序端是復雜,麻煩和嚴重支持的,並且它只是略微改善(甚至可能降低!)性能。

真正想要的是只有一個線程與OpenGL交談(顯然有一個上下文),映射緩沖區,並將內存指針傳遞給另一個線程,最好使用3個緩沖區(3個大小緩沖區的3個子緩沖區)和不可變存儲和持久映射 (如果可用)。
那,並進行間接渲染調用,其中第二個線程提供間接調用讀取的緩沖區。

關於持久映射主題的更多信息:特別參見本GDC2014演示文稿的幻燈片22-25,這基本上是Cass Everitt 2013年SIGGRAPH演講的翻版。
另見Everitt最初的演講: 超越移植

Vaos不是共享的,因此您需要為每個上下文生成每個對象的新vao,否則在刪除/創建新行為時行為將變得不可預測且不正確。 這可能是錯誤的主要來源 可以共享Vbos,因此每個對象只需要一個vbo。

暫無
暫無

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

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