Ich benutzer Dev-C++ mit SDL Version 1.2.8 . Ich verwende eigentlich nur den direkten Zugriff auf den Grafikspeicher mit Lock/Unlock/usw. und muss sagen, dass mein Code EIGENTLICH funktioniert.
Ich habe eine Klasse für einen Renderer erstellt, die mit einem Befehl Farben im Float-Format in den SDL-Buffer schreibt. Wenn ich die Klassen-internen Bufferpointer NICHT erhöhe, klappt der Code wunderbar und ich sehe mein gerendertes Bild. Wenn ich aber die Pointer auf Klassen-interne Buffer mit jedem PIxel (logischweise) erhöhe, erhalte im "stderr.txt"-Logfile den folgenden Fehler:
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
und das Programm wird ohne Wenn und Aber (anscheinden von SDL selbst) geschlossen. Der Code der Funktion:
Code: Alles auswählen
void LE::LE_Renderer::Swap()
{
pixel_screen* pos_screen = screen;
pixel_alpha* pos_alpha = alpha;
Uint8* pos_app = (Uint8*) surface->pixels;
float alpha_screen;
// jeden pixel im surface durchgehen und mit errechnetem farbwert beschreiben
for (int pxcount = 0; pxcount < pixels; pxcount++)
{
cerr << pxcount << "/" << pixels
<< " alpha: " << pos_alpha << "/" << end_alpha
<< " screen: " << pos_screen << "/" << end_screen <<endl>a;
// temporär weggekürzt!
pos_app[0] = 255;
pos_app[1] = 0;
pos_app[2] = 255;
pos_app[3] = 255;
pos_screen += sizeof(pixel_screen);
pos_alpha += sizeof(pixel_alpha);
pos_app += surface->format->BytesPerPixel;
}
}
Kann mir da irgendwer helfen? Ich hab einfach keine Ahnung, was das soll. Selbst die Größen, der allokierte Speicher, die Speicherposition, usw... stimmen eigentlich alle. Ich sehe darin keinen logischen Fehler!