Pixel rendern mit SDL
-
Hallo,
ich möchte mit SDL einzelne Pixel rendern. Jeder Pixel kriegt per Zufall eine Farbe zugewiesen, was auch gut funktioniert. Das Problem was ich habe ist die Performance, denn bei 2073600 Pixeln (1920x1080) dauert das ewig. Welche Möglichkeiten habe ich, das ganze zu beschleunigen? Habe schon drüber nachgedacht, das ganze mit Threads zu lösen. Allerdings macht das nur bei CPUs mit vielen Kernen Sinn.Als Pseudocode sehe das jetzt so aus:
y, x wird bestimmt -> Farbe wird zufällig bestimmt -> Pixel wird gesetzt -> Pixel wird gerendert
Das ganze geht so lange bis alle Pixel gerendert wurden, das wechseln zwischen Zeilen und Spalten funktioniert ebenfalls.
LG
PS: Bitte nur Hilfe und keine unnötigen Posts. Danke
-
SDL hat offentsichlich auch die Möglichkeit, dass man ein Pixel-Shader als String übergibt und der führt es dann aus.
Erzeuge also einfach im Pixelshader deine Zufallsfarben und dann ist es schneller.
Meine Google-Suchwörter waren 'SDL Shader'
So bringt man SDL dazu sein eigenen Shader zu nutzen.
http://hg.libsdl.org/SDL/file/default/test/testshader.cZufallszahlen erzeugst du im Shader so:
float rand(vec2 co){ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); }
Mal nun ein Viereck was den ganzen Bildschirm bedeckt im Orthogonaler Projektion. Diese Zeichenrotine wird dann dein Pixelshader für jeden Pixel aufrufen.
Jetzt musst du nur noch das alles zusammensetzen was ich dir als Input gegeben habe.