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

1

06.02.2016, 16:20

Wie viele Sprites kann man laden? Wann ist der Speicher voll?

Wie weiss man wie viele Bilder/Megabytes man auf einem Gerät laden kann?
Mich interessieren vor allem aktuelle iPhones(5 und 6 Modelle) und Windows Phone 8/10 Modelle. Kann man auf einem iPhone mehr Sprites/Megabytes laden als auf einem Nokia Lumia, oder ist der Speicher bei beiden mehr oder weniger gleich groß?
Ich lade alle meine Bilder als Texture2D in der LoadContent-Methode von MonoGame. Gibt es irgendwelche Tricks mit denen man Speicher sparen kann?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

06.02.2016, 16:40

iPhone 5s: 1GB RAM
Lumia 950 XL: 3GB RAM
Lumia 550: 1GB RAM
Speicherverbrauch von Texturen: Länge * Breite * 4 Byte -> 2048x2048 RBGA = 16MB Speicherverbrauch
Tricks: Texturkompression. Speichergröße der Texturen lassen sich da auf 1/8 reduzieren. Weiter runter will man nicht, weil das schrecklich aussieht. Hinweis: Texturkompresson ist etwas anderes als PNG oder JPG. Textur-Kompression benötigt spezielle Formate (System-spezifisch, iOS und Android unterstützen jeweils komplett unterschiedliche Formate, was Windows Phone kann, weiß ich nicht, weil das DirectX ist, was ja kein Smartphone-Entwickler haben möchte), diese sind dann auch auf der GPU weiterhin komprimiert, wohingegen PNG und JPG nur als Datei komprimiert sind, im RAM aber entpackt werden müssen.
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]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (06.02.2016, 16:47)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

06.02.2016, 17:19

Heutzuge arbeitet auch unter Android eigentlich niemand mehr ohne das Large-Heap-Flag. Auf 500MB wird dabei allerdings auch nicht erweitert, sondern auf was auch immer das Telefon für richtig hält. Das kann auf einem Galaxy Fame 75MB sein (mehr wird man da nie bekommen) und auf einem Galaxy S4 nahezu 2GB - je nach aktueller Auslastung und Laune des Systems natürlich auch weniger.
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]

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

06.02.2016, 17:26

Nein, das ist auch unter Dalvik so. Je nach Telefon und Hersteller ist die Größe des zur Verfügung gestellten Speichers anders.
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]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

06.02.2016, 18:00

Du kannst bei deinen Ressourcen, wenn du sie nach Xna-Dateien konvertierst, auch noch eine Kompression für das Zielsystem angeben. Allerdings funktioniert das nicht für alles, z.B. sind unter Mac die Spritefonts nicht komprimierbar. Sollte es aber unterstützt sein, kriegst du die von BlueCobold beschriebenen Kompressionen.

6

06.02.2016, 18:32

iPhone 5s: 1GB RAM
Lumia 950 XL: 3GB RAM
Lumia 550: 1GB RAM
Speicherverbrauch von Texturen: Länge * Breite * 4 Byte -> 2048x2048 RBGA = 16MB Speicherverbrauch



Ist das bei jedem aktuellen Gerät so? Muss man da immer mit 4 Byte multiplizieren?
Wenn ich eine Textur habe die 100x50 Pixel groß ist, dann wären das ja: 100 * 50 * 4 = 20000 Bytes = 0,02MB
Ist meine Berechnung richtig?

Wie viel Speicher steht meiner App normalerweise zur Verfügung? Die 1GB RAM des Lumia 550 kann ich ja nicht komplett ausnutzen da ja noch andere Programme auf dem Gerät im Hintergrund laufen wenn der Spieler meine App spielt. Gibt es da irgendwelche Werte auf iPhone/Windows Phone an die man sich halten kann? Es wäre ja schon nicht schlecht wenn wenigstens 50% des RAMs des jeweiligen Geräts für meine App zur Verfügung stehen würde.

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

7

06.02.2016, 19:13

Die 4 Byte bestehen aus je 1 Byte Rot, Grün, Blau und Alpha.

Mit einem gb Arbeitsspeicher kannst du schon mehr als 15.258 Texturen mit 128px x 128px speichern. Für die meisten Apps wird das wohl reichen, auch wenn dein Programm und andere Apps noch Arbeitsspeicher belegen.

8

06.02.2016, 20:12

In folgendem Link wird erklärt wie man Bilder komprimiert.
Microsoft
Jedoch haben nicht alle meine

Zitat

To convert your images to DXT format
1.In your Visual Studio project, display the property grid for the image you want convert to DXT format.
2.In the property grid, expand the Content Processor section.
3.Change the Texture Format value to DXT Compressed.
4.If necessary, change the Resize to Power of Two property to True. DXT images must be sized to powers of two.


Muss ich dieses Power of Two nur auf true setzen wenn die Länge und die Breite meines Bildes durch 2 teilbar sind, wie z.B. bei 16x32 Pixel, oder muss ich Power of Two immer auf true setzen, also auch bei einem Bild das 13x25 Pixel groß ist?
Was passiert wenn ich Power of Two bei letzterem Bild(13x25 Pixel) auf true setze? Wird das Bild dadurch irgendwie verzerrt dargestellt oder ändert das nichts am Aussehen der Grafik?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

06.02.2016, 20:54

Brauchst Du denn wirklich Kompression? Das reduziert nämlich die Qualität der Texturen merklich. Wenn es nicht sein muss, würde ich es bleiben lassen.
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]

10

07.02.2016, 00:15

Wenn ich mein Projekt auf meinem Nokia Lumia 920 teste, dann bekomme ich immer während des Nokia-Ladebildschirms(der Bildschirm ist schwarz und da steht nur "Laden") folgende Fehlermeldung:

Zitat

An exception of type 'SharpDX.SharpDXException' occurred in SharpDX.DLL but was not handled in user code
Additional information: HRESULT: [0x887A0005], Module: [SharpDX.DXGI], ApiCode: [DXGI_ERROR_DEVICE_REMOVED/DeviceRemoved], Message: The GPU device instance has been suspended. Use GetDeviceRemovedReason to determine the appropriate action.
If there is a handler for this exception, the program may be safely continued.


Ich habe keine Ahnung warum ich diese Fehlermeldung bekomme. Die Fehlermeldung erscheint auch nicht immer in der gleichen Codezeile. Ich dachte ich würde vielleicht zu viele Grafiken laden, jedoch bin ich mir mittlerweile nicht mehr sicher ob es daran liegt.
In der Fehlermeldung steht dass ich GetDeviceRemovedReason nutzen soll um die Ursache zu finden, jedoch weiss ich nicht wie ich dieses GetDeviceRemovedReason nutzen soll ?( Wie geht das?
Wo könnte das Problem liegen?

Werbeanzeige