OpenGl Gadget Spieletauglich?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

hallo,

hab da mal ne fundamentale Frage:
ist das opengl gadget spieletauglich?

unter windows benutze ich ein api-fenster , welches man halt mit dmscreensettings auch
zum fullscreen machen kann
bei einem tool benutze ich ein imagegadget und missbrauche das image als opengl anzeige
und unter linux benutze ich einen sdl screen , entweder fenster oder fullscreen

aber ich bin es nun irgendwie leid, für jedes ding andere mouse und tastaturabfragen und somit
einen riesen code zu haben.
ich wünsch es mir halt einheitlich und eben jetzt auch auf beiden systemen auf purebasic v6 umsteigen.

darum die frage, ist das opengl gadget spieletauglich, ist die framebremse zuverlässig?

(das beste wäre, man könnte openscreen und openwindowed screen als openglausgabe benutzen)
amiga rulez...
Rebirth Software
Benubi
Beiträge: 187
Registriert: 22.10.2004 17:51
Wohnort: Berlin, Wedding

Re: OpenGl Gadget Spieletauglich?

Beitrag von Benubi »

Tja, wenn man sich so weit rauswagt ist man manchmal der erste Erkunder einer Sache.

Was meinst Du mit Framebremse, ScreenOutput() bzw. WindowOutput() ? Meinst Du mit SDL den integrierten PB Layer oder einen selbst-eingebundenen? Ich bin mir nämlich nicht mehr sicher ob es noch Teil von PB ist... ich interessiere mich ein wenig für SDL2 weil da ja auch ein bisschen mehr mit Sound geht, aber wohl nicht auf PB :/

Du könntest auch die Abfragen abstrahieren und wrappen, aber ich glaube das weisst Du schon.

Code: Alles auswählen

Prototype _MouseX(*udata) ; *udata = #NULL, Window Handle oder sowas...

Declare opengl_Mousex(*udata)
Declare sdl_MouseX(*udata)
Declare d3d_MouseX(*udata)

Global _MouseX._MouseX ; = init
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

mit "framebremse" meinte ich
AddWindowTimer(0, 1, 16) ; about 60 fps

mein problem ist, dass ich eben nicht mehr für jedes system nen anderen code will
seh ich jetzt grad bei meinem spiel bei den mouse und tastatur abfragen

hier muss ich den halben gameloop umschreiben

leider kann man mit opengl nicht direkt auf einen screen malen, also bleibt nur
noch openglgadget
amiga rulez...
Rebirth Software
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

...und fullscreen, also ich weiss nicht ob die meisten heute noch
gespannt vorm pc sitzen und nen offlinespiel fullscreen zocken
wohl meist im fenster um nebenbei noch was zu machen oder so

den fullscreen würd ich halt faken: rahmenloses fenster erstellen, gadget erstellen
fenster auf desktop maximieren, gadgetinhalt wird gestretched
amiga rulez...
Rebirth Software
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: OpenGl Gadget Spieletauglich?

Beitrag von mk-soft »

Ich bin kein Spiele Programmierer, aber OpenGL Gadget ist schon rechts schnell.
Solltest aber kein Window Menu verwenden, da dieser denn EventLoop anhält.

Bin aber der Meinung doch besser die OpenWindowedScreen zu verwenden und die Gadgets da rum zu platzieren.
Um auf den Screen zu malen ist es besser vorher alles in Sprites zu malen und diese dann bei bedarf einblenden.
Sollte somit mega schnell sein.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

das problem ist, habs eben nochmal getestet, man kann nicht mit opengl in einen screen oder windowed screen reinzeichnen
..ausser bildschirm löschen :)
aber danke für den tip mit dem windowmenü
amiga rulez...
Rebirth Software
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von TroaX »

xperience2003 hat geschrieben: 19.12.2022 18:41mit "framebremse" meinte ich
AddWindowTimer(0, 1, 16) ; about 60 fps
Wieso bremst du das überhaupt? Ich würde einfach eine Delta-Time verwenden, die man mit allen Bewegungen multipliziert. Dadurch erhälst du eine gleichbleibende Geschwindigkeit trotz schwankender Framerate. Bremsen tut dann VSync oder ein Framelimiter (z.B. vom GPU-Treiber). Ich würde niemals davon ausgehen, das jeder Rechner 60 FPS schafft, noch würde ich einem Monitor mit mehr als 60 Hz das Tearing zumuten wollen, welches die Differenz zwischen Hz und FPS mit sich bringen kann.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: OpenGl Gadget Spieletauglich?

Beitrag von mk-soft »

Code: Alles auswählen


Procedure FrameDelay(Frames = 30)
  Static time
  Protected diff_time, delay_time
  If time
    diff_time = ElapsedMilliseconds() - time
    delay_time = (1000 / Frames) - diff_time
    If delay_time > 0
      Delay(delay_time)
    EndIf
  EndIf
  time = ElapsedMilliseconds()
  ProcedureReturn delay_time
EndProcedure

Global ExitApplication

If OpenWindow(0, 100, 200, 600, 400, "Test", #PB_Window_SystemMenu)
  CanvasGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), #PB_Canvas_Border)
  
  Repeat
    Repeat
      ; Dispatch Window Evnts
      Select WindowEvent()
        Case #PB_Event_CloseWindow
          ExitApplication = #True
          
        Case #PB_Event_Gadget
          
        Case #Null
          Break
          
      EndSelect
    ForEver
    
    ; Drawing an Display
    If StartDrawing(CanvasOutput(0))
      Box(0, 0, WindowWidth(0), WindowHeight(0), #Gray)
      x + 4
      y + 1
      If x > WindowWidth(0)
        x = 0
      EndIf
      If y > WindowHeight(0)
        y = 0
      EndIf
      
      Box(x, y, 16, 16, #Blue)
      StopDrawing()
    EndIf
    
    FrameDelay(30)
    
  Until ExitApplication
  
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

danke für das beispiel.
ich benutze sowas ähnliches.

die numer mit der deltatime und alles multiplizieren hatte ich mir mal abgewöhnt,
wenn hunderte extra multiplikationen der grund sind, dass es erst ruckelt =)
..warn spass

mir ging es hier lediglich nur um die brauchbarkeit des opengl gadgets und die verlässlichkeit des timers
es scheint beides meinen ansprüchen zu dienen

meine games sind lowlevel gl, die laufen auch auf nen 10 jahre alten rechner flüssig
und ich will einfach nur einen einheitlichen code, der überall gleich läuft
und das tut es anscheinend

ich habe hier einen alten rechner mit windows7 und ubuntu fürs inet
ich kann nun mit beiden system auf den projektordner zugreifen
und nebenbei weiterprogrammieren und am ende für
beide systeme kompilieren
amiga rulez...
Rebirth Software
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Re: OpenGl Gadget Spieletauglich?

Beitrag von xperience2003 »

tastaturabfrage im opengl gadget unter linux scheint ein problem zu haben

Code: Alles auswählen

    Repeat
      Event = WindowEvent()
      Select Event
     
      Case #PB_Event_Gadget 
           If EventGadget()=0 ;das glgadget
                  
            Select EventType() 
              Case #PB_EventType_RightClick       
                GameInput_RightFireClick=1  ;funktioniert
                
              Case #PB_EventType_LeftButtonDown   
                GameInput_LeftFireDown=1   ;funktioniert
                
              Case #PB_EventType_LeftClick   
                GameInput_LeftFireHit=1       ;funktioniert
                
              Case #PB_EventType_RightButtonUp 
                GameInput_RightFireClick=0 ;funktioniert
                
              Case #PB_EventType_LeftButtonUp
                GameInput_LeftFireDown=0
                GameInput_LeftFireHit=0
                
                Case #PB_EventType_KeyDown     ;keydown ansich funktioniert    
                  
                ; Debug GetGadgetAttribute(0,#PB_OpenGL_Key)
                  
                Select  GetGadgetAttribute(0,#PB_OpenGL_Key)
                    Case #PB_Key_Space
                      gameclose=1
                      
                    Case   65470;#PB_Key_F1
                      cameramode=0
                    Case   65471;#PB_Key_F2
                        cameramode=1
                    Case   65472;#PB_Key_F3
                      cameramode=2
                    Case   65473;#PB_Key_F4
                      cameramode=3  
                    
                EndSelect
               
              Case #PB_EventType_MouseMove       
                
                mousex=GetGadgetAttribute(0, #PB_OpenGL_MouseX)
                mousey=GetGadgetAttribute(0, #PB_OpenGL_MouseY)
            EndSelect
     
       EndIf
            
       EndSelect
       Until Event=0
die eventabfrage funktioniert, die tasten auch
allerdings nur #pb_key_space

mit Debug GetGadgetAttribute(0,#PB_OpenGL_Key)
hab ich mir die konstanten anzeigen lassen, sie scheinen mit
den #PB_Key_irgendwas nicht überein zu stimmen..nur space

was stimmt da nicht?
amiga rulez...
Rebirth Software
Antworten