Я застрял в какой-то «логичной» рутине. Мой код получает живые изображения предварительного просмотра с моей камеры, которые преобразуются в структуру RWops и, наконец, загружаются как текстура в SDL. Теперь мой вопрос: как я могу обновить текстуру, не разрушая и не перестраивая ее? Некоторый код с использованием atm:SDL2 - Текстура и часто меняющееся изображение
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 секунды. Таким образом, он швыряет мою рутину со зданием и разрушает текстуру, замедляя все.
Любые предложения могут быть?
SDL_image не предоставляет эту функцию. Если вам действительно нужно, вы можете напрямую использовать libpng/libjpeg/whatever_your_format_is. Однако медленная часть, скорее всего, декодирует изображение, а не выделяет для него память, поэтому это не принесет вам большой пользы. Откуда вы получаете данные и какой фактический формат/разрешение/частота кадров? – keltar
Да, вот что я заметил. Декодирование занимает большую часть времени. Я должен сказать, что я работал над малиновым PI. Вы хотите использовать SDL, так как не хотите использовать сервер x11. Мои данные поступают из DSLR (libgphoto2), который представляет собой формат JPG с разрешением 640x400, поэтому не такой большой. Я гораздо больше интересуюсь тем, как обрабатывать быстро меняющиеся снимки в SDL. Я не могу всегда разрушать и восстанавливать текстуру! – ayk