我的應用程序有兩個線程:A和B.A是主線程,B是我的視頻線程。 視頻線程有一個OpenGL函數可以正常工作的初始化OpenGL上下文。但是,當我從線程A調用OpenGL函數時,函數失敗,出現1282錯誤(GL_INVALID_OPERATION) 是否可以從我的主線程(A)調用OpenGL函數?從另一個線程調用OpenGL函數
4
A
回答
10
除非您正在做慢速內容的實際背景渲染,否則這可能不會帶來性能增量。
在Windows上,打開的gl上下文是每個線程。確保在嘗試調用打開的gl函數之前,從您的工作線程調用wglMakeCurrent。
Open GL不是線程安全的。如果您嘗試在多個線程上創建相同的上下文,它不會阻止您。它會爆炸。
+0
我有同樣的問題,glGenTexture(),因爲它是從一個不同的線程調用,未能創建一個紋理ID。現在增加了一些防守檢查。 但我注意到,雖然是glGetError()*似乎*工作;然而,它沒有明確*錯誤,並且我陷入了無限循環;而(glGetError()){...}永遠不會結束。 – 2016-10-18 09:54:25
3
GL是不線程安全的,因此,你不能從2個不同的線程調用GL功能。你將不得不用互斥體來保護每個gl部分,這會消除你期望的性能提升,加上互斥鎖的開銷以及可能需要的上下文切換。
相關問題
- 1. 從另一個線程調用Lua函數
- 2. 從另一個函數調用另一個函數C#
- 3. CoreData ContextObjectsDidChangeNotification從另一個線程調用
- 4. 從另一個類調用函數,從另一個類
- 5. 從另一個類調用變函數
- 6. 從另一個調用函數的類
- 7. 從另一個文件調用函數
- 8. 從另一個窗口調用函數
- 9. 從另一個項目調用函數
- 10. 從另一個ViewController類調用函數
- 11. 從另一個類別調用函數
- 12. 從javascript中的另一個函數調用一個函數
- 13. 從一個函數調用函數到另一個類PHP
- 14. Powershell從另一個函數調用一個函數
- 15. 線程調用另一個類中的函數
- 16. Android:線程OnFinish() - >調用另一個函數
- 17. 在另一個線程上調用非靜態類函數
- 18. 調用另一個函數從另一個頁面
- 19. 調用函數到另一個函數
- 20. 如何從另一個函數調用這個void函數?
- 21. 如何將變量從另一個函數調用到另一個函數中
- 22. 如何從另一個函數調用一個數字到一個函數中?
- 23. 調用一個函數在另一個
- 24. 使用Python從另一個函數中調用函數
- 25. 多線程DLL和鎖從第二個線程調用函數
- 26. 從另一個函數的參數調用函數
- 27. PASCAL - 從另一個函數調用程序
- 28. 從Windows上的另一個進程調用函數
- 29. 從另一個線程調用FnMut回調
- 30. 從另一個線程運行線程
我不知道你爲什麼想這麼做。請詳細說明。 – batbrat 2010-02-01 13:54:41