apres un Renderworld() alors que la version actuel GrabSprite() ne marche pas ..
Code: Select all
; "GrabSprite" doesn't work after "RenderWorld" - Sample code
; March 05 2010
; PB v4.41, Windows XP SP2, GPU intel 82915G
Procedure.l GrabSpriteEx(sprite, buffer, x, y, width, height, mode=0)
; netmaestro 2007
; Grab a Sprite from the backbuffer or visible screen
; buffer values: 0=backbuffer, 1=visible screen
If buffer
srcDC = GetDC_(ScreenID())
Else
srcDC = StartDrawing(ScreenOutput())
EndIf
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, width, height)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, width, height, srcDC, x, y, #SRCCOPY)
DeleteDC_( trgDC)
If buffer
ReleaseDC_(ScreenID(), srcDC)
Else
StopDrawing()
EndIf
result = CreateSprite(sprite, width, height, mode)
If sprite = #PB_Any
output = result
Else
output = sprite
EndIf
StartDrawing(SpriteOutput(output))
DrawImage(BMPHandle, 0, 0)
StopDrawing()
DeleteObject_(BMPHandle)
ProcedureReturn output
EndProcedure
;- Initialisation
If InitEngine3D() = 0
MessageRequester( "Error" , "Can't initialize 3D, check if engine3D.dll is available" , 0 )
End
ElseIf InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester( "Error" , "Can't find DirectX 7.0 or above" , 0 )
End
EndIf
result = MessageRequester("GrabSprite & RenderWorld","Full Screen ?",#PB_MessageRequester_YesNo)
If result = 6
FullScreen=#True
OpenScreen(800,600,32,"GrabSprite & RenderWorld")
Else
FullScreen=#False
OpenWindow(0,0, 0, 800 , 600 ,"GrabSprite & RenderWorld",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0, 800 , 600,0,0,0)
EndIf
;- Mesh
nummesh = CreateMesh(#PB_Any,100)
SetMeshData(nummesh, #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, ?PlanVertices, 4)
SetMeshData(nummesh, #PB_Mesh_Face, ?PlanFaces, 2)
;- Material
Add3DArchive(".",#PB_3DArchive_FileSystem)
CreateImage(0,32,32)
StartDrawing(ImageOutput(0))
Box(0, 0, ImageWidth(0), ImageHeight(0), $FFFFFF)
Line(0,0,32,32,$0000FF)
StopDrawing()
SaveImage(0,"temp.bmp")
FreeImage(0)
LoadTexture(0,"temp.bmp")
DeleteFile("temp.bmp")
CreateMaterial(0,TextureID(0))
;- Entity
numEntity = CreateEntity(#PB_Any,MeshID(nummesh),MaterialID(0))
EntityLocate(numEntity,0,0,0)
;- Camera
CreateCamera(0, 0, 0 , 100 , 100)
CameraBackColor(0,$FF0000)
MoveCamera(0,0,0,-5)
CameraLookAt(0,0,0,0)
;- Main loop
Repeat
If fullscreen = #False
While WindowEvent() : Wend
EndIf
; Spin entity
RotateEntity(numEntity,0,0,0.5,#PB_Relative)
; Render
RenderWorld()
; Grab the screen's center in the sprite #0
;GrabSprite(0,400,300,32,32) <= this doesn't work :(
GrabSpriteEx(0,1,400,300,32,32) ; <= this seems to work :)
; Display sprite
DisplaySprite(0,10,10)
; Flip buffers
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;- data Section
DataSection
PlanVertices:
Data.f -0.5, -0.5, 0.0
Data.f 1, 1, 1
Data.f 0, 1
Data.f 0.5, -0.5, 0.0
Data.f 1,1,1
Data.f 1, 1
Data.f 0.5, 0.5, 0.0
Data.f 1,1,1
Data.f 1, 0
Data.f -0.5, 0.5, 0.0
Data.f 1,1,1
Data.f 0,0
PlanFaces:
Data.w 2, 1, 0
Data.w 0, 3, 2
EndDataSection