Pixmap Problem....
Übersicht

![]() |
juse4proBetreff: Pixmap Problem.... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,...
Ich arbeite jetzt zum ersten Mal richtig mit Pixmap's, und habe gleich mein erstes Problem: ich habe eine Pixmap im Format: PF_RPGA8888 (also 32 Bit, mit Alpha, big endian) wenn ich jetzt ClearPixels mache...--> ClearPixels(MinimapPixmap, den optionalen Parameter lass ich weg) müsste das Bild, wenn ich es zeichne nicht unsichtbar sein? denn 0 = R ist 0 G ist 0 B ist 0 Alpha ist auch 0 aber ich sehe ein schwarzen Kasten... warum, das ergibt irgendwie keinen Sinn.. Falls es am Blendmode liegt... kann nicht sein, bin im AlphaBlend ![]() Hoffe mir kann wer helfen ![]() ![]() ![]() |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst du Pixmap mit "DrawImage" über ein Bild und nicht mit "DrawPixmap" zeichnen.
"DrawPixmap" nutzt SolidBlend. Diese Funktion ist auch nur zu Debug-Zwecken gedacht. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso.. ich dachte DrawImage geht nur bei TImage's, nagut wenn's so ist werd ichs mal probieren, Danke... ^^ | ||
Portfolio |LinkedIn |XING |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
DrawImage geht ja auch nur bei TImage, aber du kannst auch eine Pixmap als Image laden wenn du statt einem Pfad eine Pixmap bei LoadImage( ) angibst.
Willst du nur etwas bearbeiten bei einem Image, dann kannst du per LockImage( image ) die Pixmap dazu erhalten und sie, wenn du fertig bist, wieder per UnlockImage( image ) freigeben. Dazu ist zu beachten, dass die Bearbeitungen bei geringen Änderungen noch gehen mögen, bei größeren oder einfach nur etlich vielen wird es nicht mehr schön anzusehen sein, weil Pixmaps dafür zu lahm sind. MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
daheißt ich kreiere eine Pixmap, lad sie in ein Bild und kann das TImage per Lock / Unlock Image editieren...
Ist das Realtime-Performance lästig oder geht das in Ordnung? |
||
Portfolio |LinkedIn |XING |
![]() |
DaysShadow |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie schon geschrieben, kleine Änderungen oder nicht so häufige pro Frame gehen klar, viele jedoch kann man vergessen.
Ich wollte mal den Aero Effekt von Windoof aus Spaß nachbasteln, den Gausschen Weichzeicher hatte ich mir erst geschrieben, aber das ging total auf die Performance und war absolut nicht zu gebrauchen. Dann wollte ich mal Farben von Ländern auf einer Landkarte ändern, das wiederum ging gut, da es nur auf Mausklick losging und nicht soviele Pixel waren. MfG DaysShadow |
||
Blessed is the mind too small for doubt |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie man vielleicht sehen kann geht es bei mir um eine 100x100 große minimap, welche nur 50 änderungen (50 neue Pixel) pro Frame bekommt | ||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das sollte gehen.
Nutze aber die Pixmap, die dir "LockImage" zurückgibt! Sonst wirst du keine Änderung sehen. Die Anzahl der bearbeiteten Pixel sollte außerdem verhältnismäßig egal sein. Das Problem ist eher die Tatsache, dass die Pixeldaten wieder auf die Grafikkarte hochgeladen werden müssen, und die dafür benötigte Zeit ist von der Größe des Bildes abhängig. Das Hochladen sollte auch der Grund sein, warum "DrawPixmap" so langsam sein soll. (Ich habe den Befehl nie benutzt und habe daher keinen Vergleich angestellt.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
DrawPixmap macht ansich das selbe, wie LoadImage (TPixmap), nur das die Pixeldaten ein anderes Ziel haben (DrawPixmap überträgt sie auf den Backbuffer, LoadImage überträgt sie in einen Bildspeicher). Wenn man einen Pixmap also jeden Durchlauf modifzieren und zeichnen will, dann ist DrawPixmap also sogar einen Tick schneller (anstatt die Daten erst in einen Speichern und dann auf den Backbuffer zu übertragen, gelangen sie auf direkten Wege ans Ziel - bleibt aber dennoch so oder so verhältnismässig langsam!). Der Blendmode wird übriegens eigentlich auf jede Pixelübertragung angewand. Es ist nur leider eine Eigenart von Max2Dt, bei einem DrawPixmap zuvor den Blendmode auf SolidBlend einzustellen und anschliessed wieder zurück zu setzen. | ||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn mich nicht alles täuscht, schreibt DrawPixmap einfach die Pixel in den Backbuffer, ohne sie vorher durch die Rendring Pipeline gehen zu lassen, und somit können keinerlei Effekte auf sie angewandt werden. | ||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Zitat aus BRL.GLMax2D:
BlitzMax: [AUSKLAPPEN] Method DrawPixmap( p:TPixmap,x,y ) |
||
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
das heißt ich müsste in Max2D rumpfuschen und den AlphaBlend anmachen, damit ich endlich per DrawPixmap eine poplige Minimap zeichnen kann? ^^
Wie hat es zum Beispiel DC in CarnageContest gemacht, da basiert doch auch alles auf Pixmap's, oder?? ![]() |
||
Portfolio |LinkedIn |XING |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Einfacher wäre es, wenn Du die Methode in eine eigene Funktion kopierst und anpasst... ![]() ...muss man dann nur schauen, ob das "DisableTex" womöglich Probleme macht, da dies Private ist - wie die meisten Sachen in Max2D. ![]() Abgesehen davon gibt es aber unzählige Lösungswege. Kannst ja mal ausprobieren (Grafiktreiber auf OpenGL einstellen!): BlitzMax: [AUSKLAPPEN] Function DrawPixmap( p:TPixmap,x,y )Ich gebe aber keine Garantie, dass es so einfach funktioniert. ![]() |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Max2D davon nutzt doch auch nur Pixmaps, die noch auf die Grafikkarte hochgeladen werden, für die Images.
Wenn man an denen nichts ändert, wird aber auch nichts hochgeladen. Wenn du die Pixmap eines Bildes mit Hilfe von LockImage bearbeitest, reicht das aus. Du kannst dann alle Spielereien von Max2D nutzen. (Das einfacher als alles andere. ![]() Das Terrain von Carnage Contest besteht aus Pixmaps mit den entsprechenden Bildern. Die trotzdem hohe Geschwindigkeit kommt von der Unterteilung in viele kleine Teile. Bei einer Änderung werden nur die veränderten Teile erneut hochgeladen. Das braucht weniger Zeit, als wenn man große Bilder bearbeitet. (Irgendwo hat DC mal davon geschrieben.) mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
juse4pro |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja ich glaube er hatte 128x128 große pixmaps... wenn das so schnell geht mit dem uploaden mache ich mir auch eine 128x128 große pixmap, und mach pixel errechnung mit writepixel (ist das empfehlenswert?)
und zeichne sie per manipuliertem Max2D mit DrawPixmap, oder hab ich noch was vergessen? ^^ |
||
Portfolio |LinkedIn |XING |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nutze die ganz normalen Images!
Dann musst du dir nicht so viel Arbeit machen und kannst alle Max2D-Funktionen nutzen. Bei WritePixel wird nur in einen Speicherbereich geschrieben. (unterm Strich ähnlich wie bei einem Array) Daher ist der Befehl nicht so langsam. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
glDrawPixels geht an der Rendering-Pipeline vorbei, also können ihre effekte nur schwer angewandt werden. Alpha und dergleichen ist damit nicht möglich. Es werden lediglich die Pixel direkt und ohne umweg in den Framebuffer geschrieben.
Das SolidBlend ist vermutlich da, um ungewollte nebeneffekte zu verhindern. |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Tja, das ist nicht korrekt. GlDrawPixels geht durch die Einstellungen für den Pixeltransfer. Blending findet erst an diesem Punkt statt, nicht vorher in der Renderpipeline. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group