Page 1 of 1
Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 8:24 pm
by blueznl
I would like a better description of what works and what doesn't when using the different subsystems. It would also be great if there would be an example included that shows smooth sprite movement when in windowed screen mode...
I'm now trying to figure it out trial and error, and that's not the right way to do things, especially when things work differently in DirectX7 and DirectX9...
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 8:50 pm
by Thorium
Hm. I have no problem with smooth sprite movement on windowed mode. I don't do anything special. Coded it initialy for fullscreen but works on windowed mode without problems.
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 9:02 pm
by Fluid Byte
Not really worth it since DX9 is the standard now anyway and you should use it whenever possible. DX7 turns of Vista Aero which is really annoying for most people. Furthermore it's not 64-Bit compatible which is a major issue. Most bugs with DX9 are already known and will hopefully fixed by the team in the near future. Apart from that you can only continue reporting bugs and problems to help improve the subsystem.
Besides, you only seem to have one specific problem here. Maybe post some example code and we can have a closer look since I don't really understand the problem.
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 9:10 pm
by djes
Fluid byte> Just try examples/sources/windowedscreen.pb example with directx9 subsystem in pb4.40b5
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Windowed Screen example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
CompilerIf Subsystem("DirectX9") = #False
MessageRequester("MessageRequester","Please use DirectX9 subsystem",#PB_MessageRequester_Ok)
End
CompilerEndIf
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open the sprite system", 0)
End
EndIf
If OpenWindow(0, 0, 0, 340, 285, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_ScreenCentered)
ButtonGadget(1, 10, 10, 100, 25, "Grab input")
ButtonGadget(2, 120, 10, 100, 25, "Button 2")
ButtonGadget(3, 230, 10, 100, 25, "Button 3")
TextGadget (4, 10, 40, 300, 30, "Press 'F1' to ungrab keyboard and mouse")
If OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0,2 )
LoadSprite(0, "Data/PureBasicLogo.bmp")
Else
MessageRequester("Error", "Can't open windowed screen!", 0)
End
EndIf
EndIf
SetFrameRate(60)
direction = 1
playerX = 1
playerY = 1
Repeat
Repeat
; Always process all the events to flush the queue at every frame
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
; Do the normal application management here
Gadget = EventGadget()
Select Gadget
Case 1
InputReleased = 0
ReleaseMouse(#False)
SetGadgetText(4, "Press 'F1' to ungrab keyboard and mouse")
Case 2, 3
SetGadgetText(4, "Button "+Str(Gadget)+" pressed.")
EndSelect
EndSelect
Until Event = 0 ; Quit the event loop only when no more events are available
If InputReleased = 0
ExamineMouse()
; do the sprite & screen management at every frame
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -3 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 280 : playerY +3 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -3 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf
If KeyboardPushed(#PB_Key_F1)
ReleaseMouse(#True)
InputReleased = 1
EndIf
EndIf
; Clear the screen and draw our sprites
ClearScreen(RGB(0,0,0))
ClipSprite(0, 0, 0, x, x/8)
DisplaySprite(0, x, 100)
DisplaySprite(0, x, x)
DisplaySprite(0, 300-x, x)
DisplaySprite(0, playerX, playerY)
x + direction
If x > 300 : direction = -1 : EndIf ; moving back to the left with negative value
If x < 0 : direction = 1 : EndIf ; moving to the right with positive value
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
Until Quit Or KeyboardPushed(#PB_Key_Escape)
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 9:30 pm
by blueznl
Well, that code runs at max speed without any synchronization on my machine, no matter what parameter I provide as flipmode...
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 10:24 pm
by Fred
The DX9 windowed synchronization has been fixed.
Re: Documentation - PureBasic and DirectX
Posted: Wed Oct 14, 2009 10:27 pm
by blueznl
Ah! So it wasn't me after all

I hope
Just FYI: I tried it with 4.40b5. If there's a new library I'm going to try it with that one.
Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 1:07 am
by nco2k
the example from djes runs awfully fast, since SetFrameRate() for dx9 is still broken. maybe thats blueznl's problem?
c ya,
nco2k
Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 11:03 am
by Trond
Yes, the frame rate isn't kept. It runs like it is trying to escape from David Hasselhoff!
Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 2:08 pm
by blueznl
THen I'll just have to wait for PB v4.40b6

Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 3:02 pm
by djes
What do you think I'm waiting for

Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 7:35 pm
by blueznl
Winning lottery tickets?
Nekkid' double D pole dancers?
A new paintjob for both your Ferrari's?

Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 8:27 pm
by djes
Tsss tsss! A date with Fred of course, or if he's not available, with Leonard Nimoy.

Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 8:42 pm
by blueznl
You aim too low

Re: Documentation - PureBasic and DirectX
Posted: Thu Oct 15, 2009 8:56 pm
by djes
Well, as Carla married Nicolas Sarkozy, and as I can't afford this splendid vehicle

, my dreams are now limited.
