Seite 1 von 1

[CODE] FullScreen Debug

Verfasst: 26.05.2009 01:34
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

Verfasst: 26.05.2009 07:16
von DrShrek
Eine Variante für die 3D Engine wäre auch nett.
Da geht ja kein StartDrawing( ScreenOutput() )

Verfasst: 26.05.2009 14:12
von Kaeru Gaman
sounds fair ... I will see what I can do.

Verfasst: 02.06.2009 18:23
von Andesdaf
:allright:

Verfasst: 16.06.2009 01:01
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.

Verfasst: 16.06.2009 11:10
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... -.-°

Verfasst: 16.06.2009 11:52
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...

Verfasst: 16.06.2009 12:05
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.