C SDL2-纹理和频繁变化的图片
我陷入了某种“合乎逻辑”的常规。我的代码从我的相机接收实时预览图片,这些图片被转换为RWops结构,最后作为纹理加载到SDL。现在我的问题是:如何在不破坏和重建纹理的情况下更新纹理?使用atm时的一些代码:C SDL2-纹理和频繁变化的图片,c,sdl,framebuffer,sdl-2,C,Sdl,Framebuffer,Sdl 2,我陷入了某种“合乎逻辑”的常规。我的代码从我的相机接收实时预览图片,这些图片被转换为RWops结构,最后作为纹理加载到SDL。现在我的问题是:如何在不破坏和重建纹理的情况下更新纹理?使用atm时的一些代码: for(x=0; x<100; x++){ capture_to_memory(camera, context, (const char**)&data, &size); rw = SDL_RWFromConstMem(data, size);
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);
}
for(x=0;x快速查看SDL_图像后,似乎没有API将图像解码为现有纹理
如果您不能请求未压缩格式的图像-您必须直接使用libjpeg。或者重新考虑如何获取图像的整个想法-也许直接从视频设备(v4l?)读取会更好
为了快速更改纹理,SDL为SDL\u CreateTexture
设置了SDL\u TEXTUREACCESS\u STREAMING
标志。然后,当您需要修改数据时,使用SDL\u LockTexture
锁定纹理,修改返回的内存并将其解锁。SDL\u image不提供此功能。如果确实需要,您可以使用libpng/libjpeg/不管你的格式是什么。然而,速度慢的部分很可能是解码图像,而不是为它分配内存,所以它不会给你带来太多好处。你从哪里获取数据,实际的格式/分辨率/帧速率是什么?是的,这也是我注意到的。解码占用了大部分时间。我不得不说,我在做一个覆盆子PI.想使用SDL作为不想使用x11服务器。我的数据来自DSLR(libgphoto2),它是JPG格式,分辨率为640x400,所以没有那么大。我对如何在SDL中处理快速变化的图片更感兴趣。我不能总是破坏和重建纹理!