[CODE] FullScreen Debug

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

[CODE] FullScreen Debug

Beitrag von Kaeru Gaman »

das Thema kam heute (astronomisch: gestern) auf, und mich hatte es gereizt,
deswegen hab ich schnell zwei Procs gebastelt, mit denen man auf dem FullScreen
eine Debug-Ausgabe realisieren kann.

die gewünschten Ausgaben können an jeder Stelle des Codes in die Queue gepusht werden,
und werden dann in einem Rutsch auf den Screen geDrawt.

Code: Alles auswählen

;***************************************************************
;***
;***  FullScreen Debug
;***
;***  PB 4.3x
;***
;***  by Kaeru Gaman, 2009-05-25
;***
;***************************************************************

InitSprite()
InitKeyboard()
OpenScreen( 1024, 768, 32, "ScreenDebug" )
;***************************************************************

EnableExplicit

NewList DebugLine.s()

#DebugLineStep = 16

Procedure NextDebugLine( Out.s )
  Shared DebugLine.s()
  AddElement(DebugLine())
  DebugLine() = Out
EndProcedure

Procedure DrawDebug( DBX.l, DBY.l, DBCol.l = $FFFFFF )
  Shared DebugLine.s()
  Protected LineY = 0
    DrawingMode( #PB_2DDrawing_Transparent )
    FrontColor( DBCol )
    ForEach DebugLine()
      DrawText( DBX, DBY + LineY * #DebugLineStep, DebugLine() )
      LineY +1
    Next
  ClearList( DebugLine() )
EndProcedure

DisableExplicit

;***************************************************************
PX = 512
PY = 384
Repeat
  LastTimer = Timer
  Timer = ElapsedMilliseconds()
  Duration = Timer - LastTimer
  If Duration = 0 
    Duration = 1
  EndIf
  FPS = 1000 / Duration
  ExamineKeyboard()
  If KeyboardPushed( #PB_Key_Up )
    PY -2
  EndIf
  If KeyboardPushed( #PB_Key_Down )
    PY +2
  EndIf
  NextDebugLine( "PX = "+Str(PX) )
  If KeyboardPushed( #PB_Key_Left )
    PX -2
  EndIf
  If KeyboardPushed( #PB_Key_Right )
    PX +2
  EndIf
  NextDebugLine( "PY = "+Str(PY) )
  If KeyboardPushed( #PB_Key_Escape )
    EXIT = 1
  EndIf
  NextDebugLine( "D = " + Str( Duration ) + "ms" )
  NextDebugLine( Str( FPS ) + " FpS" )
  ClearScreen( $201008 )
    StartDrawing( ScreenOutput() )
      Box( PX, PY, 32, 32, $0FF0FF )
      DrawDebug( 0,0, $FFF000 )
    StopDrawing()
  FlipBuffers()
Until EXIT
End
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Eine Variante für die 3D Engine wäre auch nett.
Da geht ja kein StartDrawing( ScreenOutput() )
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

sounds fair ... I will see what I can do.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

:allright:
Win11 x64 | PB 6.20
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Dr. Shrek hat geschrieben:Eine Variante für die 3D Engine wäre auch nett.
Da geht ja kein StartDrawing( ScreenOutput() )
UseBuffer geht mit Engine3D ja wohl auch nicht.
geht denn wenigstens Startdrawing(SpriteOutput())?

wenn nicht...
ich werd jetzt nicht den Aufwand treiben, eine SpriteFont in ein Codesnippet zu packen.
OnTheFly-Erstellung von SpriteFonts sind nur dann sinnvoll, wenn man das automatisieren kann,
also über irgendeinen Ausgabekanal ein DrawText auf ein Sprite ausführen kann.

wenn nicht, muss man ein CharSet mitliefern.
Das stellt für eigene Projekte ja kein Problem dar, sprengt aber den Rahmen für ein CodeSnippet Posting.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

An sich... gute Sache. Aber warum lässt man das Spiel immer im Vollbild Modus laufen bei der Entwicklung? :) Ich mache das immer im Fenster, vor allem ist es dann nicht so ein Drama, wenn das Spiel abkratzt wegen irgendwelchen ungültigen Speicherzugriffen.

Das ist in der Tat total ätzend. Kaum hat man eine um einiges bessere 3D Engine, wird einem die 2DDrawing Möglichkeit genommen. Naja, nichts im Leben ist umsonst... -.-°
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

soweit ich informiert bin, liegt das daran, dass DirectDraw in DX9 garnicht mehr drin ist.
irgendeinen Ersatz gibt es aber, denn man kann auch mit DX9 Texte auf den Screen bringen, nur der Zugang ist ein anderer....

bin da jetzt auch etwas überfragt zur Zeit...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Na mit DirectX9 ist das meines Wissens so, dass mittels Direct3D Fonts geladen und als Texturen erstellt werden, und somit dann mittels orthogonaler Ansicht auf dem Monitor dargestellt werden (Bitmap Fonts "builden"). Zumindest wäre das für mich das einzige was in Frage kommt. In OpenGL wird das zumindest genauso gemacht. Und viele 3D-Spiele, die ihre Fonts mitliefern, haben diese auch als Textur vorliegen und bringen sie in jener Form (bloß geclippt) auf den Bildschirm.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Antworten