Auf Textur zeichnen zu langsam
Übersicht

EdlothiolBetreff: Auf Textur zeichnen zu langsam |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab ich schon, das bringt auch nichts ![]() |
||
INpac |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du musst vorallem die Texture nicht jeden Frame neuzeichnen, es reicht wahrscheinlich, sie alle 50-100 ms upzudaten, musste ausproben. | ||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja. Da sind die FPS immer noch ziemlich niedrig (Das CopyRect allein dauert 250 Millisecs), ausserdem muss die Karte ja auch scrollen. | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eigentlich nicht. Vielleicht liegts ja an meiner Grafikkarte?
Code: [AUSKLAPPEN] Cls
Und zum Erstellen der Textur:Code: [AUSKLAPPEN] map_draw Copyrect 0,0,512,512,0,0,BackBuffer(),TextureBuffer(bgtex) Cls 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannste nicht jedes Teil als ein 3D Objekt machen und zeigst
es an der richtigen Stelle ? Also mit CopyEntity arbeiten . |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
Das würde mir in diesem Fall nichts bringen es an der richtigen Stelle ? Also mit CopyEntity arbeiten . ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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
Das wäre ziemlich schade, wenn man da nichts gegen machen könnte 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 ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
args
+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. ohne die flag müsste es mit "lichtgeschwindigkeit" laufen ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke ![]() ![]() |
||
Silbersurfer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group