簡體   English   中英

如何在(視頻)內存中創建緩沖區以使用OpenGL進行繪制?

[英]How can I create a buffer in (video) memory to draw to using OpenGL?

OpenGL使用兩個緩沖區,一個用於顯示在屏幕上,另一個用於進行渲染。 交換它們以避免閃爍。 (雙重緩沖。)

是否可以在(我假設是視頻內存)中創建另一個“緩沖區”,以便可以在其他地方進行繪制。 我問的原因是我有多個SFML Windows,並且我希望能夠指示OpenGL為每個窗口繪制一個獨立的緩沖區。 目前,我無法控制渲染緩沖區。 有一個用於“編輯:所有(不是每個)”窗口。 調用window.Display()后,該緩沖區的內容將復制到出現在窗口內的另一個緩沖區。 (我認為就是這樣。)

您要查找的術語是“屏幕外渲染”。 使用OpenGL可以使用兩種方法。

一種是通過使用操作系統底層圖形層提供的專用屏幕外可繪制對象。 這稱為PBuffer。 PBuffer的用法非常像窗口,未映射到屏幕。 PBuffers是第一個使用OpenGL實現屏幕外渲染的健壯方法。 它們於1998年推出。由於PBuffers是功能齊全的可繪制對象,因此可以將OpenGL上下文附加到它們。

另一種方法是使用OpenGL本身而非操作系統提供的屏幕外渲染目標。 這稱為幀緩沖對象。 FBO需要功能齊全的OpenGL上下文才能工作。 但是FBO不能提供OpenGL上下文必須附加才能起作用的可繪制對象。 因此,FBO的主要用途是向它們渲染中間圖片,稍后在屏幕上顯示可見圖片時使用。 幸運的是,對於FBO來說,隱藏OpenGL上下文的可繪制對象可能是隱藏的。 因此您可以使用對用戶隱藏的常規窗口即可使用。

如果您只希望在屏幕外進行渲染,那么PBuffer仍然是一個非常可行的選擇,尤其是在GLX / X11(Linux)上,無需緩沖擴展即可立即使用它們。

如果您有第三個緩沖區,則會丟失雙緩沖的值。 雙緩沖區有效,因為您正在更改指向發送到顯示設備的像素陣列的指針。 如果包括第三個緩沖區,則必須復制到每個緩沖區中。

我已經有一段時間沒有使用OpenGL了,但是渲染成紋理(位圖)不是更好。 這使OpenGL的每種實現都可以選擇如何將位圖從內存中獲取到屏幕適當區域的視頻緩沖區中。

暫無
暫無

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

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