Auf Textur zeichnen zu langsam

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Edlothiol

Betreff: Auf Textur zeichnen zu langsam

BeitragFr, Jul 30, 2004 20:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte eine Tilemap auf eine Textur (512x512) zeichnen, die jedes Frame aktualisiert wird. Nur ist das leider total langsam, so hab ich nur noch etwa 4 FPS. Die Map ist mit dem Universal Mapeditor erstellt. Wenn ich sie auf den Bildschirm zeichne, dauert das normalerweise nicht so lange Confused Ich hab auch schon versucht, erst in ein Image zu zeichnen und das dann per CopyRect in die Textur zu verschieben, das beschleunigt das ganze ein bisschen, aber nicht genug. Warum ist das Zeichnen auf eine Textur so langsam? Ist das normal? Oder liegt das an meiner Grafikkarte?

Ausserdem scheint er keine transparente Farbe (bei DrawImage) zu unterstützen, es sieht aus wie mit DrawBlock gezeichnet, allerdings lässt sich das durch Zeichnen in ein Image und CopyRect lösen.

Suco-X

Betreff: ......

BeitragFr, Jul 30, 2004 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Schaue dir doch die Flags für Create/LoadTexture an. 256 ist für Textur in Video Ram, das sollte dir einen deutlischen Speed schub geben.
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
 

Edlothiol

BeitragFr, Jul 30, 2004 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich schon, das bringt auch nichts Sad
 

INpac

BeitragFr, Jul 30, 2004 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst vorallem die Texture nicht jeden Frame neuzeichnen, es reicht wahrscheinlich, sie alle 50-100 ms upzudaten, musste ausproben.
 

Edlothiol

BeitragFr, Jul 30, 2004 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja. Da sind die FPS immer noch ziemlich niedrig (Das CopyRect allein dauert 250 Millisecs), ausserdem muss die Karte ja auch scrollen.
 

Dreamora

BeitragFr, Jul 30, 2004 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Was machst du genau?

Ich hab nen grundgerüst für ein terrain system das die Textur tiled anstatt das mesh und dort geht das problemlos per frame ... ich zeichne einfach die entsprechenden texturen mit drawimagerect gezeichnet.

Verwendest du unter umständen lock buffer / unlock buffer? das macht derartige operationen normalerweise so langsam.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragSa, Jul 31, 2004 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich nicht. Vielleicht liegts ja an meiner Grafikkarte?
Code: [AUSKLAPPEN]
   Cls
   
   map_draw
   
   Copyrect 0,0,512,512,0,0,BackBuffer(),TextureBuffer(bgtex)
   
   Cls
Und zum Erstellen der Textur:Code: [AUSKLAPPEN]
   bgtex = CreateTexture(512,512,1+256)




Edit: Ich hab jetzt ein Beispiel namens Insectoids gefunden, das auch auf eine Textur zeichnet. Das ist genauso langsam, wenn ich die Größe auf 512x512 stelle. Wie schnell läuft das denn bei euch?

Markus2

BeitragSa, Jul 31, 2004 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannste nicht jedes Teil als ein 3D Objekt machen und zeigst
es an der richtigen Stelle ?
Also mit CopyEntity arbeiten .
 

Dreamora

BeitragSa, Jul 31, 2004 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du die Tilemap zeichnest, warum zeichnest du sie net direkt auf den Texturebuffer anstelle vom backbuffer??
Dann musst du sie auch net kopieren

Einfach dafür sorgen das

SetBuffer TextureBuffer(bgtex)

vor den zeichenoperationen is und alles ist gut.

Und weniger CLS vielleicht Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragSa, Jul 31, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
In den Backbuffer zeichne ich weil sonst wie gesagt DrawImage nicht richtig funktioniert (keine Transparenz), ausserdem ist es auch nicht schneller wenn ich direkt in die Textur zeichne. Und die Cls machen auch nicht viel aus.

Zitat:
Kannste nicht jedes Teil als ein 3D Objekt machen und zeigst
es an der richtigen Stelle ?
Also mit CopyEntity arbeiten .
Das würde mir in diesem Fall nichts bringen Confused
 

Dreamora

BeitragSa, Jul 31, 2004 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
OK ich geb dir keine Tipps mehr, wenn du der fixen überzeugung bist, dass du recht hast, hat es keinen Zweck!

Alpha wie Masked bleiben erhalten wenn du die entsprechenden Flags setzt beim erstellen und es ist um welten schneller als den 3D viewport mit CLS zu löschen, es da rein zu zeichnen, dann in die textur zu kopieren und wieder zu löschen!

Wie gesagt, bei mir gehts in Echtzeit auf ne 1024x1024 textur die bezeichnet wird.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragSa, Jul 31, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann liegt es wohl wirklich an meiner Grafikkarte, denn bei mir funktioniert es nicht, auch wenn ich direkt auf die Textur zeichne. Ich hatte das als erstes probiert und habe es grade nochmal getestet, aber es ist genauso langsam wie über den BackBuffer.
 

Dreamora

BeitragSa, Jul 31, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Zeichnen ist auf jeden Buffer gleich schnell
Aber durch das Kopieren vom einen Buffer in den anderen wird der umweg über den Backbuffer langsamer. Hast du die Zeichnungsfunktion für die Maps is ja eigentlich recht schnell, an der kanns eigentlich net liegen, sofern du für die einfach den Buffer umgestellt hast.

Was machst du neben dem noch? Derartige Speedeinbrüche habe ich sonst nur wenn ich versuche in echtzeit vertices zu manipulieren ( im grossen Stil also 128x128 vertices jedes Frame aktualisieren Wink ) oder wenn ich über lockbuffer readpixel / writepixel unlockbuffer versuche 512x512 operationen durchzuführen


Was für ein System hast du denn? ( die Drawdinge für Terrain Texturetiling hab ich noch auf meinem alten System mit GF4 MX also ner lahmen nonshader karte gemacht )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragSa, Jul 31, 2004 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Athlon XP 1700+, 256 MB Ram, Grafik (Onboard) GeForce2.

Ich hab die Zeit gemessen, die er zum Malen braucht, es sind immer etwa 300 Millisekunden.

Hab mal einen kleinen Test gemacht, schon das hier ruckelt extrem bei mir (Zeit auch hier fast 300 Millisekunden)
Code: [AUSKLAPPEN]
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

tex = CreateTexture(512,512,1+256)

img = CreateImage(512,512)

While Not KeyHit(1)

   SetBuffer TextureBuffer(tex)
   
   t = MilliSecs()
   DrawImage img,0,0
   t = MilliSecs() - t
   
   SetBuffer BackBuffer()
   
   Cls
   Text 0,0,t
   Flip

Wend
Das wäre ziemlich schade, wenn man da nichts gegen machen könnte Sad
 

Dreamora

BeitragSa, Jul 31, 2004 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
args

+256 muss da weg Smile

+256 darfst du nur für texturen verwenden die nicht manipuliert werden, da sie für die manipulierung aus dem grafikram in den systemram übertragen werden müssen, dort manipuliert werden und dann wieder zurück in den grafikram transferiert werden.

ohne die flag müsste es mit "lichtgeschwindigkeit" laufen Smile

texturen im grafikram manipulieren ist nur mittels pixelshader möglich
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Edlothiol

BeitragMo, Aug 02, 2004 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Smile Das ist tatsächlich schneller, aber für Echtzeit reichts immer noch nicht, es dauert immer noch etwa 200 Millisekunden. Ich werd jetzt wahrscheinlich immer nur die Bereiche neu in die Textur kopieren, die durchs scrollen hinzugekommen sind, und den Rest per CopyRect innerhalb der Textur verschieben (dauert etwa 5 Millisekunden, im VRAM 250...). Allerdings erschwert das Animationen. Ich könnte auch die mapengine so verändern, dass sie statt Bildern Texturen lädt und CopyRect benutzt, von Textur zu Textur scheints nämlich auch ziemlich schnell zu gehen Smile
 

Silbersurfer

BeitragMo, Aug 02, 2004 12:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora

Zitat:
+256 muss da weg

+256 darfst du nur für texturen verwenden die nicht manipuliert werden, da sie für die manipulierung aus dem grafikram in den systemram übertragen werden müssen, dort manipuliert werden und dann wieder zurück in den grafikram transferiert werden.


da kann ich dir nicht recht geben es ist in der tat Grafikkarten abhängig,
auch bei mir ist es im Vram Ultraschnell ohne aber nicht ca. 83 mili

soweit Ich weiß gibt es bei einigen Karten da probs.

Edlothiol

Zitat:
Athlon XP 1700+, 256 MB Ram, Grafik (Onboard) GeForce2


1. Bei dir wird es so sein da du eine Onboardkarte hast und diesen einbruch bekommst, das deine Grafikkarte keinen eigenen Speicher hat sonderen
den normalen Arbeitsspeicher als Vram Reserviert also ist das Flag (256)
für dich nur eine zusätzliche Bremse
2. du must deine Textur mit dem Mask flag (4) erstellen dann sind alle schwarzen teile (nicht gezeichneten Teile) Tranzparent oder flag (2) für Alphawerte

gruss

Silbersurfer
-------------------------------------------------------
XP 2000+ 512DDR Radeon 9800 XL 340GB HD
Hompage : http://home.arcor.de/silbersurfer01/
Is Bob engine http://home.arcor.de/silbersur.../Isbob.zip

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group