Speedtest Text <> BmpFont
Übersicht

![]() |
TravisBetreff: Speedtest Text <> BmpFont |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jupp, bei mir das selbe. | ||
![]() |
Markus Rossé |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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é |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www.blitzbase.de/tutorials/shadow_4.htm
Tipp #33, #34, #35 cu, Markus Rossé |
||
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ soli - Das funktioniert natürlich nur wenn x und y nur true oder false sein können. | ||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
![]() |
soli |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@soli ja. Im Buch Spiele programmieren mit BlitzBasic wird darauf aber hingewiesen. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group