Das Färben von SDL-Texturen kann etwas schwierig sein. Der folgende Code sollte die wichtigsten Punkte beim Färben einer Textur beschreiben. Der Schlüssel besteht darin, alle erforderlichen Daten aus SDL abzurufen, bevor mit der Änderung der Textur begonnen wird.
Uint32* pixels = nullptr;
int pitch = 0;
int format;
// Get the size of the texture.
int w, h;
SDL_QueryTexture(texture, &format, nullptr, &w, &h);
// Now let's make our "pixels" pointer point to the texture data.
if (SDL_LockTexture(texture, nullptr, (void**)&pixels, &pitch))
{
// If the locking fails, you might want to handle it somehow. SDL_GetError(); or something here.
}
SDL_PixelFormat pixelFormat;
pixelFormat.format = format;
// Now you want to format the color to a correct format that SDL can use.
// Basically we convert our RGB color to a hex-like BGR color.
Uint32 color = SDL_MapRGB(&pixelFormat, R, G, B);
// Before setting the color, we need to know where we have to place it.
Uint32 pixelPosition = y * (pitch / sizeof(unsigned int)) + x;
// Now we can set the pixel(s) we want.
pixels[pixelPosition] = color;
// Also don't forget to unlock your texture once you're done.
SDL_UnlockTexture(texture);
Jetzt sollten Sie auch beachten, dass das Ändern von Texturen im Code relativ teuer ist. Außerdem ist der Code nicht sehr sauber, da das Bearbeiten von C ++ int-Zeigerarrays und das Übersetzen von Farben in verschiedene Formate zu Problemen führen kann, da die Vorgänge dort möglicherweise nicht so klar sind, wie sie benötigt werden. Dies jedoch nur dann zu tun, wenn dies unbedingt erforderlich ist, sollte nicht zu viele Probleme verursachen.
Möglicherweise möchten Sie auch SDL_SetRenderTarget
die Textur verwenden und ändern, indem Sie sie rendern. Bei einigen Aufgaben ist das Rendern von Grundelementen für die Textur möglicherweise keine Option. Dies ist jedoch der Fall, wenn Sie die Pixel wie folgt ändern.