Tô màu kết cấu SDL có thể là một chút khó khăn. Các mã sau đây nên phác thảo các điểm chính của tô màu một kết cấu. Điều quan trọng là tìm nạp tất cả dữ liệu cần thiết từ SDL trước khi bắt đầu thay đổi kết cấu.
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);
Bây giờ, bạn cũng nên lưu ý rằng sửa đổi kết cấu trong mã là tương đối đắt tiền. Ngoài ra, mã này không được rõ ràng lắm, vì việc chỉnh sửa các mảng con trỏ int C ++ và dịch màu sang các định dạng khác nhau có thể gây ra vấn đề, vì những gì diễn ra ở nơi có thể không rõ ràng khi cần. Tuy nhiên, chỉ làm điều này khi thực sự cần thiết không nên gây ra quá nhiều vấn đề.
Bạn cũng có thể muốn xem xét sử dụng SDL_SetRenderTarget
và sửa đổi kết cấu bằng cách hiển thị nó. Tuy nhiên, đối với một số tác vụ, hiển thị nguyên thủy cho kết cấu có thể không phải là một tùy chọn và đó là trường hợp khi sửa đổi các pixel như thế này có thể trở nên tiện dụng.