Несколько SDL_Renderer для каждого SDL_Window

#c #graph #sdl-2

#c #График #sdl-2

Вопрос:

Во время преобразования SDL1.2 в SDL2.x у меня возникла следующая проблема:

Cntext: полноэкранное приложение с 2 диалоговыми окнами прокрутки на основе SDL_Surface. Каждый диалог прокрутки содержит множество элементов. Я реализовал swype в этих частях экрана. Рядом с этим на экране есть несколько кнопок и изображений, а также фон.

Проблема: поскольку это происходит медленно и имеет артефакты swype, я хочу перейти на SDL2. Поскольку SDL2 совершенно другой, мне нужен совет, как действовать дальше.

Какой подход лучше всего подходит?

  1. Используйте 1 Window, 3 SDL_Renderer: 1 для фона и 2 для прокрутки диалоговых окон, а также SDL_Texture для изображений.
  2. Используйте 1 Window, 1 SDL_Renderer: используйте 2x больших SDL_Texture для диалоговых окон прокрутки и рисуйте непосредственно внутри диалоговых окон прокрутки.
  3. Используйте 1 Window, 1 SDL_Renderer и создайте SDL_Texture для каждого элемента и нарисуйте их на SDL_Renderer.
  4. Используйте 1 Window, 1 SDL_Renderer: используйте 2 больших SDL_Texture для диалоговых окон прокрутки и текстуры для каждого элемента в диалоговых окнах прокрутки. Скопируйте текстуры элементов внутри текстуры прокрутки, которая помещается в SDL_Renderer.

Пожалуйста, объясните, что я должен выбрать для архитектуры?

Комментарии:

1. Вы думаете лучше всего, как в «самом эффективном», или лучше, как в «лучшем дизайне»?

2. Для SDL2 мне просто нужен самый быстрый код. Потому что SDL1.2 неприятно смотреть с плавной прокруткой в SDL_Surface. Целью прокрутки является меню ресторана или заказ в ресторане. Представьте, что карточка меню может быть в 5 раз больше ширины дисплея .. порядок может составлять 100 элементов. Здесь Swype должен быть плавным.

3. С помощью SDL_RenderSetViewport я также могу создавать поля прокрутки, действуя так, как будто у меня больше окон, в которых я могу прокручивать объекты, не заботясь о границах. Это совершенно другой подход, чем SDL1.2, но может сработать. Это правильно?