首页 > 解决方案 > 使用 SDL_TEXTUREACCESS_STREAMING 绘制到纹理

问题描述

我正在尝试执行以下操作:

  1. 使用 SDL_CreateTextureFromSurface 从 bmp 图像创建灰度 spritesheet 纹理
  2. 创建此 spritesheet 的副本,该副本具有逐像素映射到它的颜色

据我了解,要逐个像素地编辑纹理,我需要在 SDL_CreateTexture 函数中使用 SDL_TEXTUREACCESS_STREAMING 标志。虽然我找不到任何方法将另一个纹理复制到带有 SDL_TEXTUREACCESS_STREAMING 的纹理上。

如果它是 SDL_TEXTUREACCESS_TARGET,我可以将其设置为渲染目标并使用 SDL_RenderCopy。

我也无法获取要从中复制的纹理的像素数据并将 SDL_TEXTUREACCESS_STREAMING 设置为它,因为原始纹理是使用具有 SDL_TEXTUREACCESS_STATIC 的 SDL_CreateTextureFromSurface 创建的。

我的代码是:

unsigned char* pixels;
int pitch;
SDL_Texture colss = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_STREAMING, ssw*16, ssh*16);
SDL_LockTexture(colss, NULL, (void**)&pixels, &pitch);
printf("%s",SDL_GetError());
//edit pixel data
for(int i = 0; i < pitch * ssh*16; i++) {
    if (pixels[i] != 0) {
        pixels[i] = 255;
    }
}
SDL_UnlockTexture(colss);

如何先将 colss 的像素数据设置为另一个纹理的像素数据?或者使用 SDL_TEXTUREACCESS_STREAMING 在纹理上绘制任何东西?

标签: ctexturessdl-2

解决方案


推荐阅读