640x480 Pixmap -> Halber Speed?!

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

DivineDominion

Betreff: 640x480 Pixmap -> Halber Speed?!

BeitragMo, Feb 21, 2005 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hola

Habe eine Pixmap und ändere im Programm später die einzelnen Pixelwerte durch die PixelPtr zum malen.

Wenn ich mit DrawPixmap nun diese Pixmap male, habe ich statt 60 nur noch etwa 36 FPS.

Was, zur Hölle, soll das denn? Smile

tue zur Laufzeit nichts außer FPS zu zählen nd anzuzeigen und die Pixmap zu zeichnen, die ja nun mal leer ist...


Zum ausprobieren:
Code: [AUSKLAPPEN]
Graphics 640, 480, 0

global hBack:TPixmap = CreatePixmap( 640, 480, PF_RGBA8888 )

Global fps:Int, fps_c:Int, timer:Int

While Not KeyHit( KEY_ESCAPE )
   Cls
   DrawPixmap hBack, 0, 0

   fps_c :+ 1
   If MilliSecs(  ) > timer
      fps = fps_c
      fps_c = 0
      timer = MilliSecs(  ) + 1000
   EndIf
   DrawText fps, 0, 0
   
   Flip
   FlushMem
Wend



Das ist doch nun wirklich irgendwie komisch... kann man das irgendwie beschleunigen? Weiß nicht wie ich sonst einzelne Pixel akzeptabel schnell malen sollte.



Edit:
Habe das Pixmap durch Image ersetzt. Keine Einbrüche. Ich dachte die Images arbeiten auch mit Pixmaps, wie es in nem anderen Thread stand. Komische Sache, wie ich finde...
Wie setze ich denn dann die Pixmap?
Lock/Unlock bremst zur Laufzeit auf 11 FPS. Verständlich. Nur fällt mir nix ein, was ich machen soll, wenn ich eine grafik zeichnen will, die ich pixelweise interpoliere etc - für ein 2D terrain.
christian.tietze@gmail.com - https://christiantietze.de
macOS

adba

BeitragMo, Feb 21, 2005 9:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Befehl DrawPixmap wird jedes mal aus dem Pixmap ein Image erstellt und dann erst gezeichnet. das brauch natürlich zeit.
Wandle das Pixmap vor der while schleife in ein image um und zeichne dann auch ein image.. (leider kann man so die echtzeitmaipulation vergessen...)
www.adba.biz www.indiepath.com
DELL Precision M70 (Notebook)
60GB 7200rpm; 1024MB DRAM 533 Mhz Dual
nVidia Quadro FX go1400 256MB (geForce 6800)
15.4" UltraSharp 1680*1050
Wireless, BlueTooth, mx900, und natürlich BMax

Suco-X

Betreff: ..........

BeitragMo, Feb 21, 2005 12:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@abda : Wo hast du diese Info aufgeschnappt?
Hier der Code aus dem Modul. Wie man sieht gibt es hier wohl einige
Speedbremsen die man ausschalten könnte. Aber von Images kann ich da nichts sehen.

Code: [AUSKLAPPEN]

Method DrawPixmap( p:TPixmap,x,y )
      DisableTex
      Local t:TPixmap=YFlipPixmap(p)
      If t.format<>PF_RGBA8888 t=ConvertPixmap( t,PF_RGBA8888 )
      glRasterPos2i 0,0
      glBitmap 0,0,0,0,x,-y-t.height,Null
      glDrawPixels t.width,t.height,GL_RGBA,GL_UNSIGNED_BYTE,t.pixels
End Method


YFlipPixmap halbiert die FPS. Außerdem werden alle Pixel verarbeitet. Egal ob gefüllt oder nicht.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

DivineDominion

BeitragMo, Feb 21, 2005 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe keine Ahnung von OGL, kann man das irgendwie anders machen? Oder Images manipulieren? OGL Befehle sind ein großes Fragezeichen für mich...
christian.tietze@gmail.com - https://christiantietze.de
macOS

stfighter01

BeitragMo, Feb 21, 2005 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
soweit ich informiert bin:

pixmap liegen im arbeitsspeicher-dh. schnelle manipulation, langsames zeichnen.

info f. images sind direkt im vidmem abgelegt -> umgekehrt wie pixmap.

manipulation auf pixelbasis ist halt immer problematisch, da sich der graphicmem einfach nicht so schnell bearbeiten lässt.

vielleicht zeichnest du die graphic nur alle 10 frames neu oder so.

mfg stfighter
Denken hilft!

DivineDominion

BeitragDi, Feb 22, 2005 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Zweck ist eine 640x480 große Landschaft, die ich darstellen will. Könnte das problemlos in ein Image packen, aber das doofe ist eben, dass ich beim Scrollen ja wieder einladen muss, und dadurch ruckelts wie sau oder geht gar nicht mehr richtig weiter...
christian.tietze@gmail.com - https://christiantietze.de
macOS

regaa

BeitragDi, Feb 22, 2005 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Um etwas auf der Landschaft zu ändern empfiehlt sich nen pixmap. Um zu zeichen eben ein Image.

Du verwendest einfach einen Kombo.

Wenn was geändert werden muss, greifst du auf die Pixmap zu, die noch nicht genullt hast, und ein einmage draus zu erzeugen musst du eben drawpixmap und grabimage machen. Aber irgendwelche grab oder pixmap befehle in realtimer ausführen. Wofür musst du denn fürs scrollen das Bild ändern, zeichne es halt an einen anderen Punkt. Lieber Speicher verschwenden als Performance zu dissen Wink
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

DivineDominion

BeitragDi, Feb 22, 2005 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einer Maximalgröße von 256x256 wären das in jede Richtung 14336 Pixel. Zusammen macht das 205'520'896 Pixel, mit je 4 Byte bei 32Bit denk ich mal also 822'083'584 Byte, oder 822MB.

Ein Bereich etwas größer als der Bildschirm ist vielleicht noch ganz ok, aber was dann beim schnellen scrollen? Kommt dann ja gar nicht mehr nach.
Könnte auf OGL umsteigen, das schattiert ja selber ganz fleißig, allerdings habe ich dazu keinen Draht, da 3D Neutral

Hmm das wird sehr ärgerlich und schwer

Edit: Muss ich wohl sowieso, hab ganz vergessen das jegliche TEXTUR fehlt und es schon grottenlahm ist...
christian.tietze@gmail.com - https://christiantietze.de
macOS

bruZard

BeitragDi, Feb 22, 2005 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Was willst Du überhaupt machen?? Vielleicht ist der Ansatz ja schon falsch?
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Dreamora

BeitragDi, Feb 22, 2005 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Bei einer Maximalgröße von 256x256 wären das in jede Richtung 14336 Pixel. Zusammen macht das 205'520'896 Pixel, mit je 4 Byte bei 32Bit denk ich mal also 822'083'584 Byte, oder 822MB.



Ja genau ... 256x256 Bildschirme Map

Das kannst du aber in echtzeit im RAM vergessen, das ist dir schon klar, dass du da a la Zelda die "Räume" nachladen musst wenn der Spieler wechselt.

Wie du mit deiner Rechnung ja gezeigt hast, wird das in Echtzeit mit Vorladen nix und Streaming geht aktuell nur wenn du das inoffizielle Windows Threading Modul verwendest ( siehe engl. Board ) und dir eine eigene Image / Pixmap laderoutine schreibst.

Davon ausgegangen, dass ich aus deiner Beschreibung nix falsch angenommen habe und du wirklich die ganze Map vorrechnen willst als fertige Grafiken und nicht mit Tiles arbeiten wie es normal wäre/ist ( aus gutem Grunde Smile ... ausser Bioware mit ihren AD&D Spielen hat das glaub noch niemand ohne Tiling gemacht )

*normalerweise macht man so maps ja aus 32x32 oder 64x64 grossen Grafiktiles und am ende ist man schlimmstenfalls bei mehreren 1024x1024 Texturen, die allen möglichen Grafiken enthalten, sowie einem X,Y Array der die Indizes der Grafiken enthält welche dann dynamisch dort eingesetzt werden. Über LoadAnimImage sollte das möglich sein.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

DivineDominion

BeitragMi, Feb 23, 2005 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich rede nicht von Zelda sondern einem Terrain, für ein Strategiespiel meinetwegen Smile Und softwarerendering wird ja nicht umsonst als solches bezeichnet - ich kann ja schlecht für alle Möglichkeiten ein tile bauen. ISO und so hilft da auch nicht, das ist nicht das Prinzip dahinter Smile
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

Dreamora

BeitragMi, Feb 23, 2005 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Für was brauchst du es genau?

2D?
3D?

2D sind tiles mit sicherheit besser ... und wie C&C, AoE, Warcraft zeigen geht es da auch problemlos mit tiles.

3D: vertex based texture mixing und alpha based mixing ( www.gamedev.net / www.gamasutra.org für artikel ) dann musst du auch net etwas versuchen was über der grenze des sinnvollen liegt
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

stfighter01

BeitragSa, Feb 26, 2005 1:56
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn die scrollgeschwindigkeit auch noch unbegrenzt sein soll seh ich auch für datastreaming schwarz.
aber wenn das terrain wie gemalt aussehn soll kannst du ja auch mit tileengine und multitexturing arbeiten, dadurch kannst du auch jedes teil fast wie ein unikat aussehen lassen, sodass nicht mehr viel unterschied zu vollständig gemalten untergrund besteht.
ist halt viel design aufwand.

mfg stfighter
Denken hilft!

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group