Speedtest Text <> BmpFont

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Travis

Betreff: Speedtest Text <> BmpFont

BeitragMi, Jan 26, 2005 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Es heisst ja immer BmpFonts seien schneller als der Textbefehl. Bevor ich das nun in mein Programm einbauen wollte um die Leistung etwas zu steigern habe ich mal einen Test durchgeführt und bin zu einem anderen Ergebnis gekommen.

Der Textbefehl ist schneller, als jeden einzelnen Buchstaben als Bild anzuzeigen.

BMP-FONT: 456ms
Text-Befehl: 378ms

Ich werfe das jetzt einfach mal so in den Raum:

Code: [AUSKLAPPEN]

Type BmpFont
 Field font[256]
End Type

Font1 = LoadFont("Verdana",14,0,0,0)
BmpFnt1 = CreateBmpFont(Font1)


SetBuffer FrontBuffer()
  Cls
   
   Text 5,5, "Bitte warten sie kurz...

   start = MilliSecs()
   For i = 0 To 1000
    BmpFont(5,30,"DIESER TEXT WURDE 1000 MAL DARGESTELLT!",BmpFnt1)
   Next

   Text 5,50, "Benötigte Zeit: " + (MilliSecs()-start) + "ms  Methode: BMP-FONT"

   start = MilliSecs()
   For i = 0 To 1000
    Text 5,80,"DIESER TEXT WURDE 1000 MAL DARGESTELLT!"
   Next

   Text 5,100, "Benötigte Zeit: " + (MilliSecs()-start) + "ms  Methode: TEXT"

 WaitKey()
End


Function CreateBMPFont(Font)
 b.bmpfont = New bmpfont

 SetFont Font

 For i = 0 To 255
  a$ = Chr$(i)
  w = StringWidth(a$)
  h = StringHeight(a$)
  b\font[i] = CreateImage(w,h)
  SetBuffer ImageBuffer(b\font[i])
  MaskImage b\font[i], 255,0,255
  Color 255,0,255
  Rect 0,0,w,h,1
  Color 255,255,255
  Text 0,0, a$
 Next

 Return Handle(b)
End Function


Function BMPFONT(x,y,value$,Font)
 b.bmpfont = Object.bmpfont(font)
 
 For i = 1 To Len(value$)
  a$ = Mid(value$,i,1)
  DrawImage b\font[Asc(a$)], x, y
  x = x + ImageWidth(b\font[Asc(a$)])
 Next
End Function
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

DC

Sieger des B2D Retro Wettbewerb / Aug 04

BeitragMi, Jan 26, 2005 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne mir den Code anzugucken mal ein Kommentar dazu:
Bei sehr vielen Leuten ist der Textbefehl SEHR SEHR SEHR langsam. Das ist Grafikkarten und Treiber abhänging und was weiß ich noch alles. Mit Bitmapfont ist man definitiv besser unterwegs.
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com |
www.CarnageContest.com | www.Stranded3.com

Ebola33

BeitragMi, Jan 26, 2005 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir 280 bei bmp und 179 bei Text.
Habe seit ca. 1 Woche bb3d und mir ist aufgefallen daß im 3d modus der textbefehl arschlangsam ist.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Travis

BeitragMi, Jan 26, 2005 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf einem anderen System braucht der BMP-Font sogar 984ms im Gegensatz zum Textbefehl mit nur 350ms.

Verschiedene Grafikmodi machen da auch keinen großen Unterschied.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Spikespine

BeitragMi, Jan 26, 2005 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Jupp, bei mir das selbe.

Markus Rossé

BeitragMi, Jan 26, 2005 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mache den Test mit meiner eigenen Fontengine

http://markus.art-fx.org/blitz...ontengine/

Einmal mit dynamischer Zeichenlänge und einmal mit 8px Abstand:

Code: [AUSKLAPPEN]

(bei 1000 mal, zuerst aber 5sec wartezeit zwischen den Tests)

BmpFont dynamisch------>Vollbild:337ms --->Windowed:327ms
BmpFont 8px------------>Vollbild:329ms --->Windowed:317ms
Text------------------->Vollbild:319ms --->Windowed:319ms


Im Vollbild ist Text bei mir schneller. Hingegen im Windowed Modus habe ich 8pxBmp+Text gleich schnell und dynamischTxt rund 10ms langsamer.

Aber mal ehrlich.. wen interessierts? Ausserdem kommt es sehr darauf an, wie man programmiert..

cu, Markus Rossé

Travis

BeitragMi, Jan 26, 2005 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich dachte nur, dass diese Methode vielleicht schneller wäre. Momentan bastle ich an einer kleinen GUI und da musste ich noch einige Speedoptimierungen vornehmen.

Bis auf die Textausgabe habe ich jetzt alle Grafikausgaben mit Images gemacht, das bring schon ziemlich viel mehr Leistung. Vorher hatte ich alles immer direkt mit Line & Rect gezeichnet...

Ich habe übrigens noch einen anderen interessanten Test durchgeführt. Und zwar habe ich 50000 blaue Quadrate gezeichnet. Einmal mit dem Rect-Befehl und einmal mit einem Image. Jetzt ratet mal was schneller war.

Der Unterschied war zwar nicht groß, aber immerhin eindeutig! Das gibt einem irgendwie zu denken.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.

Markus Rossé

BeitragMi, Jan 26, 2005 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbase.de/tutorials/shadow_4.htm

Tipp #33, #34, #35

cu, Markus Rossé

soli

BeitragDo, Jan 27, 2005 3:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist zwar OffTopic,
aber da wir gerade bei der Seite sind.

http://www.blitzbase.de/tutorials/shadow_4.htm
Zitat:
#22 - Bedingungen vereinfachen
Manchmal lassen sich die If-Then-Bedingungen vereinfachen. Dies kann so erfolgen:

IF x=1 and y=1 THEN...

das ist schneller:

IF x+y=2 THEN...


x=1
y=1
--> alles Supi

x=2
y=0
--> Crash

oder wäre es für mich jetzt besser schlafen zu gehen?
solitaire
 

Jake

BeitragDo, Jan 27, 2005 10:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@Travis:

So wie ich das bis jetzt verstehe, ist es die Mischung aus 2D und 3D, die bei vielen Karten/Treibern die FPS in den Keller ziehen. Wenn du statt der Standardtextausgabe 2D-Bitmapfunktionen verwendest, hast du nichts gewonnen, das Problem bleibt bestehen.

Deinem Beispiel konnte ich nicht entnehmen, ob dein Proggi 2D oder 3D ist (oder ich habs überlesen), aber wenn du in 3D arbeitest, leg dir eine Font-Textur an und erzeug für jeden Buchstaben ein Quad (2 Tris) auf EINER Surface. Dann kannste nochmal die Geschwindigkeit vergleichen und wirst staunen.

Ebola33

BeitragDo, Jan 27, 2005 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@ soli - Das funktioniert natürlich nur wenn x und y nur true oder false sein können.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

soli

BeitragDo, Jan 27, 2005 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
@ soli - Das funktioniert natürlich nur wenn x und y nur true oder false sein können.

Klar, nur steht das dort nicht.
solitaire

Spikespine

BeitragDo, Jan 27, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
@soli ja. Im Buch Spiele programmieren mit BlitzBasic wird darauf aber hingewiesen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group