-1

我陷入了某种“合乎逻辑”的常规。我的代码从我的相机接收实时预览图片,这些图片被转换为 RWops 结构,最后作为纹理加载到 SDL。现在我的问题是:如何在不破坏和重建纹理的情况下更新纹理?一些使用 atm 的代码:

for(x=0; x<100; x++){
    capture_to_memory(camera, context, (const char**)&data, &size);

    rw = SDL_RWFromConstMem(data, size);

    // This part is building the texture through SDL_image
    sdlTexture = IMG_LoadTexture_RW(sdlRenderer, rw, 0);

    SDL_RenderClear(sdlRenderer);
    SDL_RenderCopy(sdlRenderer, sdlTexture, NULL, NULL);
    SDL_RenderPresent(sdlRenderer);

    SDL_DestroyTexture(sdlTexture);
}

如您所见,以及我的猜测,那是完全低效的。我注意到的是,对于这 100 张图片,我需要大约 12 秒才能显示它们(jpg)。如果我只是让捕获和转换运行,它会在 4.5 秒内完成。因此,它使我的日常工作与构建和破坏纹理相结合,这一切都在减慢。

有什么建议吗?

4

1 回答 1

0

快速查看 SDL_image 后,似乎没有 API 可以将图像解码为现有纹理。

如果您无法请求未压缩格式的图像 - 您必须直接使用 libjpeg。或者重新考虑如何获取图像的整个想法 - 也许直接从视频设备(v4l?)读取会更好?

对于快速变化的纹理,SDLSDL_TEXTUREACCESS_STREAMINGSDL_CreateTexture. 然后,当您需要修改数据时,使用 锁定纹理SDL_LockTexture,修改返回的内存并重新解锁。

于 2013-11-13T08:44:41.807 回答