如何使用OpenGL着色器修改現有的紋理/幀緩衝區而不使用第二個紋理或幀緩衝區?這甚至有可能嗎?運行OpenGL着色器修改現有的紋理/幀緩衝區
4
A
回答
5
起初: 這在技術上是可行且安全的讀取和使用this extension在同一通寫 - 但是我不建議這一點,尤其是對學生,因爲擴展緊緊有限,可能不支持在每個硬件上。
話雖這麼說:
所以它不可能使用相同的紋理作爲採樣和幀緩衝?
您可以使用紋理作爲一個幀緩衝材質附着相同,渲染它,作爲一個紋理採樣器查找值在着色器,但不在同一通。這意味着,如果您有兩個紋理,您可以從A讀取並寫入B,然後切換紋理並從B中讀取並寫入A.但是從來沒有A-> A或B-> B(沒有提及的擴展名)。
作爲一個技術細節,當前被用作目標的紋理也可以同時綁定到採樣器着色器變量,但是您不能使用它。
所以我們假設我想模糊紋理的一小部分。我必須通過着色器運行到第二個紋理,然後將該紋理複製回第一個紋理/幀緩衝區?
第二個紋理是。但出於效率原因,請勿複製紋理數據。只需刪除源紋理並使用將來渲染的目標紋理即可。如果必須經常這樣做,請將源紋理保留爲渲染目標,以備將來使用,以提高性能。如果你不得不這樣做,那麼每一幀都只是在每一幀交換紋理。開銷很小。
+0
或者如果你有多個通行證你需要做,那麼只是在同一幀中來回渲染。 –
相關問題
- 1. OpenGL的 - 緩衝區,着色
- 2. OpenGL/OpenGL ES中的幀緩衝區,紋理和glColor行爲
- 3. OpenGL - 幀緩衝區深度紋理與顏色深度紋理有所不同
- 4. OpenGL渲染到幀緩衝區導致白色矩形紋理
- 5. 計算着色器,緩衝區或紋理
- 6. 獲取WebGL紋理/緩衝區/着色器計數
- 7. 着色紋理沒有頂點緩衝區漫反射
- 8. OpenGL ES 2.0:將較小的紋理附加到幀緩衝區
- 9. OpenGL:讀取幀緩衝區的深度紋理
- 10. OpenGL - 將幀緩衝區紋理設置爲完全透明
- 11. 幀緩衝區/顏色緩衝區?
- 12. 紋理中的OpenGL片段着色器
- 13. 的OpenGL ES着色器多紋理
- 14. opengl - 黑色紋理,如何在緩衝區上使用glm :: vec *?
- 15. 在OpenGL中修改緩衝區
- 16. 快速修改OpenGL VAO緩衝區
- 17. 無法呈現到綁定到幀緩衝區的紋理
- 18. OpenGL計算着色器中的深度緩衝區示例
- 19. 着色器存儲緩衝區中的OpenGL頂點
- 20. OpenGL着色器 - 重疊多個紋理
- 21. OpenGL着色器忽略紋理
- 22. OpenGl碎片着色器紋理速度
- 23. THREE.js中的着色器材質和GL幀緩衝區
- 24. 如何處理OpenGL索引緩衝區數組中的多個紋理以用於數據着色器?
- 25. OpenGL ES多色緩衝區
- 26. 深度緩衝區似乎不起作用 - OpenGL着色器
- 27. 從opengl計算着色器寫入深度緩衝區
- 28. 渲染緩衝區或片段着色器後的紋理對象?
- 29. Open gl計算着色器和幀緩衝區
- 30. 修改Three.js中的現有着色器
不,你需要一個單獨的緩衝區來保持舊的,而你正在寫新的,你只是無法繞過。 –
因此,使用與採樣器和幀緩衝區相同的紋理是不可能的? – jjxtra
想一想,如果片段着色器對先前調用已寫入的像素進行採樣,OpenGL可以防止程序員犯這個錯誤 –