Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

11

17.11.2013, 12:24

Du kannst es auch von Hand machen. Bilder sind am Ende doch auch nur Byte-Arrays. Ob das aber besser ist...
Der typische Weg auf Grafikkarten geht bei sowas aber eher über VertexBuffer oder RenderTextures. Wie und ob D2D das unterstützt, weiß ich aber nicht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

17.11.2013, 12:29

D2D macht das intern natürlich so und sollte sich eigentlich auch von selbst um Batching kümmern etc., daher wundert mich die Performance ehrlich gesagt sehr. Allerdings hab ich da keine wirklichen Erfahrungswerte und es ist wohl auch so, dass das Zeichnen von Sprites nicht wirklich den primären Anwendungsfall, für den D2D konzipiert wurde, darstellt. Mit Windows 8.1 soll die Performance von D2D iirc angeblich verbessert worden sein. Auch gibt es dort Geometry Realizations, mit denen man hier möglicherweise was rausholen könnte, wenn der Hintergrund einfach nur statisch ist...

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »dot« (17.11.2013, 12:37)


LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

13

17.11.2013, 17:23

Du kannst es auch von Hand machen. Bilder sind am Ende doch auch nur Byte-Arrays. Ob das aber besser ist...
Der typische Weg auf Grafikkarten geht bei sowas aber eher über VertexBuffer oder RenderTextures. Wie und ob D2D das unterstützt, weiß ich aber nicht.
Der Weg über Byte-Arrays ist der, den ich momentan nutze. Eine andere Möglichkeit habe ich bis jetzt nicht finden können. Auch wenn ich dies höchst merkwürdig finde, denn irgendwo müssen die zu zeichnenden Bitmaps ja herkommen. Wäre es für MS denn so ein großer Akt gewesen, das Laden von gespeicherten Bitmaps zu implementieren?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

17.11.2013, 20:17

Also GDI+ bietet zum Laden und operieren sicherlich einen Haufen Wege an. Wenn Du die nicht gehen willst, musst Du es eben selbst machen. Welchen Weg soll es denn sonst noch geben?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

15

17.11.2013, 21:33

Also GDI+ bietet zum Laden und operieren sicherlich einen Haufen Wege an. Wenn Du die nicht gehen willst, musst Du es eben selbst machen. Welchen Weg soll es denn sonst noch geben?
GDI+ bietet die Möglichkeit an, Bitmaps von der Platte als System.Drawing.Bitmap zu laden. Allerdings akzeptiert Direct2D z.B. für DrawBitmap nur Bitmaps vom Typ SlimDX.Direct2D.Bitmap. Die beiden Typen sind aber nicht ohne weiteres kompatibel, sodass man das System.Drawing.Bitmap aufwändig konvertieren muss.

Dieses Codebeispiel für die Konvertierung habe ich z.B. hier gefunden.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    //Load a Direct2D bitmap from the given gdi resource.
        public D2D.Bitmap LoadBitmap(Bitmap drawingBitmap)
        {
            D2D.Bitmap result = null;

            //Lock the gdi resource
            BitmapData drawingBitmapData = drawingBitmap.LockBits(
            new Rectangle(0, 0, drawingBitmap.Width, drawingBitmap.Height),
            ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb);

            //Prepare loading the image from gdi resource
            DataStream dataStream = new DataStream(drawingBitmapData.Scan0, drawingBitmapData.Stride * drawingBitmapData.Height, true, false);
            D2D.BitmapProperties properties = new D2D.BitmapProperties();
            properties.PixelFormat = new D2D.PixelFormat(DXGI.Format.B8G8R8A8_UNorm, D2D.AlphaMode.Premultiplied);

            //Load the image from the gdi resource
            result = new D2D.Bitmap(rendertarget, new Size(drawingBitmap.Width, drawingBitmap.Height), dataStream, drawingBitmapData.Stride, properties);

            //Unlock the gdi resource
            drawingBitmap.UnlockBits(drawingBitmapData);

            return result;
        }

Meiner Meinung nach ist das Laden eines D2D-Bitmaps relativ viel Aufwand, dafür dass dies bei GDI+ mit nur einem Befehl geht (Bitmap.LoadFromFile). Aber solange es funktioniert... ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

17.11.2013, 22:36

Also ehrlich, die paar Zeilen sind aufwendig?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

17

18.11.2013, 07:28

Für dich als gelernten/studierten Software Engineer vielleicht nicht - aus Sicht des einfachen Informatikschülers dagegen schon. Hätte ich dieses Beispiel nicht gefunden, hätte ich mir wohl tagelang den Kopf darüber zerbrochen, wie ich das nun am besten anstelle. Ich denke, mir fehlt bei sowas einfach die Erfahrung.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

18.11.2013, 09:11

Nun, merk Dir einfach folgendes:
Als guter Entwickler muss man nicht alles auswendig wissen. Man muss nur wissen, wo man nachschlagen kann. ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

LeBusch

Frischling

  • »LeBusch« ist der Autor dieses Themas

Beiträge: 81

Beruf: Student B.Sc. Informatik

  • Private Nachricht senden

19

19.11.2013, 18:27

Werde ich mir merken! Jedenfalls danke ich euch für eure Hilfe! :)

Werbeanzeige