Du bist nicht angemeldet.

Werbeanzeige

1

26.01.2021, 13:50

SDL2 lässt CPU Ausschlagen :(

Guten Tag, und Frohes Neues :D

Ich schreibe seit einiger Zeit mit SDL2 und C++ an einer App.
-> erst mit DEVC++ in Windows, dann führe ich den Code gefixt auf einen Android Compiler aus )
Soweit läuft auch alles Top...

Nun hatte ich irgendwie das Gefühl, dass irgendwas nicht Stimmt, weil ab und an dreht sich die kleine Blaue Ladekugel am Maus Cursor recht lange (so 2-3 sec)
Und so habe ich mal im Hintergrund den TaskMgr ausgeführt und mir die CPU Leisung angeschaut

-> BRUTAL: von 4 auf 67 bis 73 Prozent bei Laufzeit !!! O.o
was ist da los ?

Ich lade alle Images ein,
Erstelle alle Surfaces.
lasse sie im Runtime ausführen...
und gibt später nach SDL_Quit() alle Surfaces wieder frei...


-> noch schlimmer es wird wenn ich alle Surfaces zusätzlich als Texur den Render übergebe
und auch hier später alle Texturen wieder frei gebe
(so wie man es wohl aktuell macht)


weis wer rat und tat ? ?(

2

26.01.2021, 13:57

So ganz allgemein wäre ein bisschen code nicht verkehrt. Im Besten fall sogar ein reduziertes, compilierbares Beispiel.

3

26.01.2021, 14:32

^^ nunja das ganze ist ein bisschen sehr groß :D

Ich schreibe gerade an: das Periodensystem der Elemente

... 117 buttons_up
... 117 buttons down
... 117 texte + verwendungen mit bild ordungszhal und und und


https://ibb.co/XxZ64WJ <- hier ein bild

-> moment... da kommt noch mehr...

- hier der code

https://www.file-upload.net/download-14455794/main.cpp.html
(ist sonst zu lang )

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Patty1991« (26.01.2021, 15:23)


4

26.01.2021, 14:44

Das nächste mal vll besser auf https://pastebin.com/ :D One-Click hoster sind da nicht so super elegant^^

EDIT: Ok, wait... Deine main ist fast 3 TAUSEND Zeilen lang? o.O

EDIT2: Bin den ganzen Kruscht mal überflogen und würde behaupten, dass du da schlicht und einfach keine fps Grenze implementiert hast und daher eben die CPU dauerhaft am Rechnen hältst.
Davon ab, solltest du dir dringend mal anschauen was es so mit Arrays und Funktionen auf sich hat.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DNKpp« (26.01.2021, 14:52)


5

26.01.2021, 15:18

okey :)

ja das mit den Arrays hab ich mir auch schon überlegt,
dann mit i++ hochrechnen lassen und je um +32 in der Position versetzen und so

genauso merkwürdig finde ich:

ich könnte jedes einzelne Bild ein Surface zuweisen, laden lesen schließen,
ODER alles auf ein Surface darstellen ..

auch diese Copy Texture To Render Geschichte ist mir noch nicht schlüssig
warum so ein doppelaufwand ?

6

26.01.2021, 15:29

Es ist für den Renderer deutlich effizienter, wenn er wiederholt Teilstücke ein und der selben Textur zeichnen soll, als wenn er jedes mal eine separate Textur zeichnet. Google einfach mal nach dem Stichwort "Textur-Atlas". Da wirst du deutlich ausführlichere Erklärungen für finden.

7

03.02.2021, 16:39

Problem gelöst !!!

:D ich hab das ganze mal gestern Abend mit irgendein Simple-Example aus dem Netz
ausprobiert... und wieder so ein hoher ausschlag ...
bis ich gepickt habe das ich MS-Edge noch auf hatte und 1 2 andere Sachen
zudem hab ich seit kurzen ein alten Laptop mit 2Kern und Win10 womit ich alles mache (kla das der dann so Arbeitet :whistling: )

hab es gerade beim Kollegen getestet ... alles Super, CPU auch cool :thumbsup:
und ja die FPS-rate habe ich AUCH umgesetzt

eine Frage noch ?

kann das SDL_Surface nicht über eine for-schleife multipliziert werden ?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
   SDL_Rect position;
   position.x = 32;
   position.y = 50;     
   
   ....
   
    for (int i=0; i<10; i++;)
   {
    SDL_Surface(Bild,NULL,screenSurface,&position) 
    position.x += 32
   }
   


-> ich bin jetzt auch richtig dabei, das ganze mit Classen zu schreiben
-> hab mal hier aus dem Forum was kopiert wie das ganze funktioniert und alles

-> über Klassen mit arrays und bool schalter funtioniert es ?(
-> total intressant !

FSA

Community-Fossil

  • Private Nachricht senden

8

05.02.2021, 23:28

Also das Problem war, dass Edge offen gewesen ist? Das glaube ich eher nicht, klingt wie ein Fehler in deinem Code, der nur manchmal auftritt.

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »FSA« (15.03.2021, 16:50)


Werbeanzeige