Zerwas
Vorweg, ich habe SDL noch nie verwendet.
Nun möchte ich eine Funktion, mit der ich die Pixelfarbe eines
Pixels (z.B. Pixel 30.48) abrufen kann.
Unter SDL sind meines Wissens auch OpenGL Funktionen verfügbar. OpenGL bietet die Funktion glReadPixels() an, um Pixeldaten aus dem Framebuffer zu lesen.
Damit könnte man zum Beispiel ein Programm schreiben, dass
alle roten Pixel auf dem Bildschirm blau färbt, die violetten
aber lässt, wie sie sind. Ich werde die Funktion für ein Spiel
benutzen.
Gut, das machst du aber anders besser. Für genau solche Zwecke hat man Shader erfunden. Das sind kleine Programme, die auf der Grafikkarte ablaufen und mit denen du teilweise direkten Zugang zur Grafikpipline hast.
OpenGL bietet dir da GLSL (OpenGL Shading Language) an. Man kann aber auch mit CG (C for Graphics) von NVIDIA im Zusammenhang mit OpenGL arbeiten.
Kleines Beispiel (GLSL):
void main()
{
if(vec3(gl\_Color) == vec3(1.0, 0.0, 0.0))
{
gl\_FragColor = vec4(0.0, 0.0, 1.0, 1.0);
}
else
gl\_FragColor = gl\_Color;
}
Wenn die Eingangsfarbe (gl_Color) rot (1.0, 0.0, 0.0) ist, wird die Ausgangsfarbe (gl_FragColor) auf blau (0.0, 0.0, 1.0) gesetzt mit 1.0 Alpha, ansonsten wird er Farbwert einfach weitergegeben. Das ist ein einfaches Beispiel für einen sogenannten Fragmentshader. Dieses kleine Program wird auf der Grafikkarte für jeden Pixel (Fragment) der gezeichnet werden soll ausgeführt.
Das sollte dein Problem besser lösen. Probiers aus, macht zum Teil ganz schön Spaß, was man mit Shadern alles machen kann =)
mfg dixxi