好吧我有一個程序與多個線程(在運行時從DLL加載)。每個線程都有獨立的OpenGL渲染上下文。我想要做的是,從主線程中,能夠繪製每個opengl上下文的幀緩衝區,並在主窗口中選擇的位置繪製它們(如果這是有意義的)。我設置了多線程,因爲當單線程「運行時進程」(只是榮耀的函數)時,在加載資源(運行時進程,可以隨時創建和終止)時使得程序掛起。基本上,我希望能夠「哄騙」opengl將其繪製到隨機緩衝區中,取出該緩衝區並在主線程中將其轉化爲opengl紋理並將其繪製到需要的位置(位置也在運行時確定)可調整的)。我的問題是,有沒有辦法讓渲染上下文繪製到一些分配的內存,而不是在窗口中繪製它?還有什麼方法可以從該上下文中獲取幀緩衝區。如果是這樣,我只需調用「glTexImage2D」,並在「字節」參數中指向內存。不要擔心線程同步的,我已經得到了相當不錯的吧......OpenGL在一個窗口中的多個渲染上下文
0
A
回答
1
我的問題是,有沒有什麼辦法讓渲染上下文得出一些分配的內存,而不在一個窗口中繪製了嗎?
是的。那些離屏區域被稱爲幀緩衝區對象(FBO)。
還有什麼辦法從該上下文中獲取幀緩衝區。如果是這樣,我只需調用「glTexImage2D」,並在「字節」參數中指向內存。
實際上使用宗教組織可以直接渲染到紋理。然後,您可以使用紋理繪製到常規窗口。
我建議你不要使用多個OpenGL渲染線程。主要原因是,GPU是一個共享資源,並且有多個OpenGL上下文/線程同時訪問它會損害性能。依次執行效果圖。您可以爲此使用單個共享上下文。
多個OpenGL的上下文可以共享他們的數據對象(紋理,頂點緩衝對象,像素緩衝器的對象);用於此的確切API取決於操作系統。在Windows上,您使用wglShareLists
進行連接。抽象狀態載體對象(FBO,VAO)不能被共享;作爲一個經驗法則,您可以上傳大容量數據,並在上下文之間共享。
0
相關問題
- 1. 在OpenGL中重新渲染vim窗口
- 2. 在opengl中渲染1000多個圖形
- 3. 在OpenGL中渲染多個對象
- 4. OGRE - 多個窗口 - 渲染窗口和菜單窗口
- 5. 在OpenGL中渲染一個立方體
- 6. 在渲染的另一個線程中初始化OpenGL上下文
- 7. OpenGL窗口大小渲染問題
- 8. QT Webkit和OpenGL渲染上下文
- 9. OpenGL創建渲染上下文失敗
- 10. OpenGL Viewer控制和渲染上下文
- 11. opengl/pyopengl - 在多個視口渲染完全相同的幀?
- 12. OpenGL不渲染到Framebuffer而是渲染到窗口
- 13. 添加窗口選項到我的OpenGL渲染器窗口
- 14. 如何在C中使用DirectX 9渲染多個窗口?
- 15. 多個線程渲染到單獨的OpenGL上下文線程安全嗎?
- 16. 設置OpenGL多個渲染目標
- 17. 多個OpenGL ES 2 Android渲染
- 18. 用OpenGL ES 2.0渲染多個對象
- 19. OpenGL ES 2.0渲染爲多個紋理
- 20. OpenGL的一個像素渲染過
- 21. 您可以同時創建多少個OpenGL渲染上下文有限制嗎?
- 22. 在OpenGL渲染上下文中疊加圖形
- 23. 如何在OpenGL上下文中渲染/顯示網頁?
- 24. OpenGL渲染一個GL_POINTS列表
- 25. XNA 4.0 - 如何在第二個窗口中渲染視口
- 26. SDL2:在多個窗口之間共享渲染器
- 27. 在rails中渲染多個erb文件
- 28. 如何在同一屏幕上將OpenGL窗口分成多個窗口?
- 29. OpenGL上的多個視口
- 30. OpenGL中分層渲染和多個渲染目標之間的混淆
好的,我明白gpu是一個共享資源,但我更喜歡這樣做。因爲所有的繪圖都是二維的(該項目是一個GUI),我最先做的是有一個指向32位整數數組的指針,並從子線程直接繪製到該「緩衝區」,然後將其轉換爲紋理需要刷新屏幕的時間。即使使用50個200x200,幀率仍然超過750 fps。我只想要一個更簡單的方法來在這些線程中執行高級圖形。我不想分享上下文。非常感謝您的幫助! – user1433205