我在fork中使用各種GL操作時遇到了錯誤(它們在主線程中工作正常)。例如與createProgram
我越來越:forkOS似乎無法保留線程的本地存儲
用戶錯誤(未知OpenGL擴展進入glCreateProgram,檢查的OpenGL 3.1)
我打電話是我初始化我的環境(4.3內核之後), 當然。
問題是我在使用forkOS
時遇到了這個錯誤,但它仍然失敗(就好像我在不知道GL上下文的TLS中一樣)。
發生了什麼事?
module Main where
import Graphics.UI.GLUT
import Control.Concurrent
import Control.Monad
main :: IO()
main = do
getArgsAndInitialize
initialDisplayMode $= [RGBMode, DoubleBuffered]
initialContextVersion $= (4,3)
initialContextProfile $= [CoreProfile]
initialContextFlags $= [DebugContext, ForwardCompatibleContext]
createWindow "GL Window"
createProgram -- Works
forkOS $ void createProgram -- Fails (user error)
displayCallback $= do
clearColor $= Color4 0.2 0.2 1 1
clear [ColorBuffer]
flush >> swapBuffers
mainLoop
似乎GL上下文仍然綁定到您最初創建它的(OS)線程。 – derhass 2014-10-10 18:10:07
@derhass是的,它是必然的。這就是爲什麼我希望'forkOS'能夠成功地進行這些調用,但是它失敗了,正如你所看到的。 – MasterMastic 2014-10-10 19:13:02
你可以發佈一個簡短的示例程序來演示這個問題嗎?很難在沒有看到你在做什麼的情況下進行調試(儘管我懷疑你沒有在一個'forkOS'線程中執行*所有* OpenGL調用)。 – 2014-10-11 08:54:49