Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Common 3D functions
;
; (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;
#WINDOW_Screen3DRequester = 0
#GADGET_FullScreen = 1
#GADGET_Windowed = 2
#GADGET_ScreenModesLabel = 3
#GADGET_WindowedModes = 4
#GADGET_Launch = 5
#GADGET_Cancel = 6
#GADGET_Logo = 7
#GADGET_Frame = 8
#GADGET_ScreenModes = 9
Global Screen3DRequester_FullScreen, Screen3DRequester_ShowStats
Procedure Screen3DRequester()
OpenPreferences("Demos3D.prefs")
FullScreen = ReadPreferenceLong ("FullScreen" , 1)
FullScreenMode$ = ReadPreferenceString("FullScreenMode" , "640 x 480")
WindowedScreenMode$ = ReadPreferenceString("WindowedScreenMode", "512 x 384")
If OpenWindow(#WINDOW_Screen3DRequester, 0, 0, 396, 205, "PureBasic - 3D Demos", #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_Invisible)
If CreateGadgetList(WindowID(#WINDOW_Screen3DRequester))
Top = 6
ImageGadget (#GADGET_Logo, 6, Top, 0, 0, LoadImage(0,"Data\PureBasicLogo.bmp"), #PB_Image_Border) : Top+76
Frame3DGadget(#GADGET_Frame, 6, Top, 384, 80, "", 0) : Top+20
OptionGadget(#GADGET_FullScreen, 70, Top, 100, 20, "Fullscreen") : Top+25
OptionGadget(#GADGET_Windowed , 70, Top, 100, 20, "Windowed") : Top-25
ComboBoxGadget (#GADGET_ScreenModes , 190, Top, 150, 200) : Top+25
ComboBoxGadget (#GADGET_WindowedModes, 190, Top, 150, 200) : Top+45
ButtonGadget (#GADGET_Launch, 6, Top, 180, 25, "Launch", #PB_Button_Default)
ButtonGadget (#GADGET_Cancel, 200, Top, 190, 25, "Cancel")
If ExamineScreenModes()
While NextScreenMode()
Width = ScreenModeWidth()
Height = ScreenModeHeight()
If Width <> PreviousWidth Or Height <> PreviousHeight
If Depth <> 8
AddGadgetItem(#GADGET_ScreenModes, -1, Str(Width)+" x "+Str(Height))
EndIf
EndIf
PreviousWidth = Width
PreviousHeight = Height
Wend
EndIf
DesktopWidth = 1024 ; GetSystemMetrics_(#SM_CXSCREEN)
DesktopHeight = 768 ; GetSystemMetrics_(#SM_CYSCREEN)
NbScreenModes = 7
Restore WindowedScreenDimensions
Repeat
Read CurrentWidth
Read CurrentHeight
If CurrentWidth < DesktopWidth And CurrentHeight < DesktopHeight
AddGadgetItem(#GADGET_WindowedModes, -1, Str(CurrentWidth)+ " x "+Str(CurrentHeight))
NbScreenModes - 1
Else
NbScreenModes = 0
EndIf
Until NbScreenModes = 0
SetGadgetState(#GADGET_FullScreen, FullScreen)
SetGadgetState(#GADGET_Windowed , 1-FullScreen)
SetGadgetText (#GADGET_ScreenModes , FullScreenMode$)
SetGadgetText (#GADGET_WindowedModes, WindowedScreenMode$)
DisableGadget (#GADGET_ScreenModes , 1-FullScreen)
DisableGadget (#GADGET_WindowedModes, FullScreen)
HideWindow(#WINDOW_Screen3DRequester, 0)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #GADGET_Launch
Quit = 2
Case #GADGET_Cancel
Quit = 1
Case #GADGET_FullScreen
DisableGadget(#GADGET_ScreenModes , 0)
DisableGadget(#GADGET_WindowedModes, 1)
Case #GADGET_Windowed
DisableGadget(#GADGET_ScreenModes , 1)
DisableGadget(#GADGET_WindowedModes, 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit > 0
FullScreen = GetGadgetState(#GADGET_FullScreen)
FullScreenMode$ = GetGadgetText (#GADGET_ScreenModes)
WindowedScreenMode$ = GetGadgetText (#GADGET_WindowedModes)
CloseWindow(#WINDOW_Screen3DRequester)
EndIf
EndIf
If Quit = 2 ; Launch button has been pressed
CreatePreferences("Demos3D.prefs")
WritePreferenceLong ("FullScreen" , FullScreen)
WritePreferenceString("FullScreenMode" , FullScreenMode$)
WritePreferenceString("WindowedScreenMode", WindowedScreenMode$)
If FullScreen
ScreenMode$ = FullScreenMode$
Else
ScreenMode$ = WindowedScreenMode$
EndIf
ScreenWidth = Val(StringField(ScreenMode$, 1, " "))
ScreenHeight = Val(Right(ScreenMode$, Len(ScreenMode$)-FindString(ScreenMode$, "x", 1)-1))
Screen3DRequester_FullScreen = FullScreen ; Global variable, for the Screen3DEvents
If FullScreen
Result = OpenScreen(ScreenWidth, ScreenHeight, 16, "3D Demos")
Else
If OpenWindow(0, 0, 0, ScreenWidth, ScreenHeight+MenuHeight(), "PureBasic - 3D Demos", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateMenu(0, WindowID(#WINDOW_Screen3DRequester))
MenuTitle("Project")
MenuItem(0, "Quit")
MenuTitle("About")
MenuItem(1, "About...")
Result = OpenWindowedScreen(WindowID(#WINDOW_Screen3DRequester), 0, 0, ScreenWidth, ScreenHeight, 0, 0, 0)
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure Screen3DEvents()
If Screen3DRequester_FullScreen = 0 ; Handle all the events relatives to the window..
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_Menu
Select EventMenu()
Case 0
Quit = 1
Case 2
MessageRequester("Info", "Windowed 3D in PureBasic !", 0)
EndSelect
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
If Quit = 1 : End : EndIf ; Quit the app immediately
Until Event = 0
EndIf
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_F1)
Screen3DRequester_ShowStats = 1-Screen3DRequester_ShowStats ; Switch the ShowStats on/off
EndIf
EndIf
EndProcedure
Procedure Screen3DStats()
If Screen3DRequester_ShowStats
If StartDrawing(ScreenOutput())
FrontColor(RGB(255, 255, 255))
DrawingMode(1)
DrawText(0, 0, StrF(Engine3DFrameRate(0),1)+" FPS")
DrawText(0, 20, Str(CountRenderedTriangles())+" Triangles")
StopDrawing()
EndIf
EndIf
EndProcedure
DataSection
WindowedScreenDimensions:
Data.l 320, 240
Data.l 512, 384
Data.l 640, 480
Data.l 800, 600
Data.l 1024, 768
Data.l 1280, 1024
Data.l 1600, 1200
EndDataSection