j'ai un probleme
pour la v8 de ma serie Paysage, je souhaite agrandir le terrain (pour avoir la même profondeur de vu que dans ma demo "montagnes")
jusqu'ici toutes les tuiles étaient contruites a l'avance
dans la v8, les tuiles sont construites en temps réel
pour éviter les temps de latences, je souhaite le faire en multithreading
hors, en opengl, la creation de mesh en multithreading ne fonctionne pas
quelqu'un à une solution ?
ci dessous un exemple de création de mesh en multithreading (compiler en opengl pour voir le plantage)
Code : Tout sélectionner
Procedure threadmesh(i)
Shared Mutex
;LockMutex(Mutex)
CreateSphere(i,10+i*2)
;UnlockMutex(Mutex)
Debug "threadmesh "+i
EndProcedure
InitEngine3D():InitSprite():InitKeyboard():InitMouse()
OpenWindow(0, 0, 0, 0,0, "test",#PB_Window_Maximize)
ex=WindowWidth (0,#PB_Window_InnerCoordinate)
ey=WindowHeight(0,#PB_Window_InnerCoordinate)
OpenWindowedScreen(WindowID(0), 0, 0, ex, ey, 0, 0, 0)
CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,0,-30):CameraLookAt(0,0,0,0)
CreateLight(0,$888888, 10000, 5000, 2000)
CameraBackColor(0,$220000)
AmbientColor($444444)
ndt=4
Mutex = CreateMutex()
Dim thread(ndt-1)
For i=0 To ndt-1
thread(i)=CreateThread(@ threadmesh(),i)
Debug ""+thread(i)+" "+i
Next
For i=0 To ndt-1:WaitThread(thread(i)):Next
Debug "ok"
CreateTexture(0,256,256):StartDrawing(TextureOutput(0)):For i=0 To 1000:Circle(Random(255),Random(255),Random(10),Random($ffffff)):Next:StopDrawing()
CreateMaterial(0,TextureID(0)):ScaleMaterial(0,0.1,0.2)
CreateEntity(0,MeshID(0),MaterialID(0))
Define.f depx,depz,mousex,mousey,dist
Repeat
WaitWindowEvent()
ExamineKeyboard()
ExamineMouse()
depx=(-Bool(KeyboardPushed(#PB_Key_Left))+Bool(KeyboardPushed(#PB_Key_Right)))*0.1
depz=(-Bool(KeyboardPushed(#PB_Key_Down))+Bool(KeyboardPushed(#PB_Key_Up )))*0.1+MouseWheel()*2
MouseX = -MouseDeltaX() * 0.05
MouseY = -MouseDeltaY() * 0.05
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
dist+(depz-dist)*0.05:MoveCamera (0, depX, 0, -dist)
RenderWorld()
FlipBuffers()
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)