Page 1 of 1

Newbie Question regarding "Screen3DRequester.pb"

Posted: Tue May 29, 2007 6:32 pm
by lodger
Hello there,

I just registered and downloaded the Linux version of Purebasic 4.01. Of course, I was curious about all that 3D stuff, so I picked the camera.pb demo and wanted to run it. Unfortunately, the compiler complains about not being able to find "Screen3DRequester.pb". The file is not in the archive I downloaded thus it is not in the examples folder. Can someone help me setting everything up properly?! I'm using Ubuntu Linux 7.04 with SDL, Ogre 1.0.6 and everything installed (including the *-dev packages provided through APT).

P.S.:

Posted: Tue May 29, 2007 7:09 pm
by Trond
Here it is:

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
    

Posted: Tue May 29, 2007 7:19 pm
by lodger
Thank you for replying so quick! :)