我陷入某种“逻辑”程序。我的代码从我的相机接收实时预览图片,这些图片被转换为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秒内完成。所以它使我的日常工作与构建和破坏纹理一起减速。
可能有任何建议吗?
答案 0 :(得分:0)
快速查看SDL_image后,它似乎没有API将图像解码为现有纹理。
如果您无法以未压缩格式请求图像 - 您必须直接使用libjpeg。或者重新考虑如何获取图像的整个想法 - 也许直接从视频设备(v4l?)阅读会更好?
对于快速变化的纹理,SDL为SDL_TEXTUREACCESS_STREAMING
标记SDL_CreateTexture
。然后,当您需要修改数据时,使用SDL_LockTexture
锁定纹理,修改返回的内存并将其解锁。