Sehr schnell pixelweise zeichen
-
@Pixler: Es wäre sehr hilfreich, wenn Du in diesem Zusammenhang Code zeigst.
-
Ich würde es in WinAPI probieren mit SetPixel(...).
http://www.henkessoft.de/C++/WinAPI/WinAPI_GDI/WinAPI_7_GDI.htmCOLORREF SetPixel ( HDC hdc, // handle to device context int X, // x-coordinate of pixel int Y, // y-coordinate of pixel COLORREF crColor // pixel color )Für diesen Fall könnte dies vermutlich der schnellste Zugang (EDIT: ohne Buffer) und die einfachste Programmerstellung sein.
-
Erhard das ist genauso lahm!
-
das ist genauso lahm!
Ich habe keine Erfahrung mit SDL. Aber wenn WinAPI mit SetPixel zu langsam ist, muss man vermutlich selbst etwas in Assembler schreiben oder dies hier verwenden:
http://www.tutorials.de/forum/c-c/289449-setpixel-erstetzen.html
-
@Erhard: Ich kenne mich mit SDL auch nicht aus. Aber ich könnte mir vorstellen, dass der Threadersteller keinen Backbuffer nutzt. Das könnte zum Beispiel ein Performanceproblem darstellen.
-
DrawPixel() bedeutet 1 funktionsaufruf für jedes pixel. ist doch kein wunder, dass das langsam ist. für sowas nimmt man einen buffer und blittet den dann in einem rutsch.
-
"aua" war nicht ich!
Auf jeden Fall habe ich den Flaschenhals jetzt gefunden... Die DrawPixel-Funktion hat für sich immer SDL_UpdateRect() aufgerufen und damit den Bildschirminhalt aktualisiert, das hat zu der enormen Zeitverzögerung geführt.

-
Wie machst Du es jetzt konkret? Mit SetPixel(...) aus WinAPI oder über einen Buffer (siehe meinen Link oben)?
Aber ich könnte mir vorstellen, dass der Threadersteller keinen Backbuffer nutzt. Das könnte zum Beispiel ein Performanceproblem darstellen.
Ja, klar, aber viele Leute schaffen das nicht, daher zunächst der Tipp mit SetPixel(...).

-
Ich mache es weiterhin mit SDL, nur rufe ich SDL_UpdateRect erst auf, wenn ich alle 800x600 Pixel gezeichnet habe. So komme ich auf ca. 60-70 FPS. Wenn ich DrawPixel inline, sogar auf >300.
-
by the hammer
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich würds wahrscheinlich so änlich machen wie Pixler, also alle Pixel in einem Array speichern, wenn dann alle Pixel so sind, wie sie sein sollen, dieses Array dann als Textur interpretiert auf dem Bildschirm setzen lassen. Mit OpenGL geht das auf jeden fall, wie das mit SDL geht weiß ich nicht, aber ich denke das ist Pixlers Lösung