2017-01-02 2 views
0

Я пишу программу, основанную на SDL2, для Raspberry Pi 3 и использовать 3.5" Waveshare SPI LCD. Это медленно из-за SPI с параллельным интерфейсом.Как обновить только часть окна в SDL?

В моей программе я рисую линии, текст & делать другие графические посохи , то я называю SDL_RenderPresent для обновления экрана. Эта функция является довольно медленной.

в моем приложении только немного части окна изменяется, каждый раз. Я найти решение, чтобы обновить только малую часть окна в DirectFB вместо всего дисплея, и результат является удивительным. Как я могу обновить только определенный прямоугольник в SDL?

ответ

0

SDL_RenderPresent может быть «медленным», потому что он выполняет вертикальную синхронизацию.

От wiki.libsdl.org:

Если вы застряли на идее всей визуализатор наступающей от 1,2 поверхностей и блиттингом, думать визуализатор как ваша основная поверхность, и SDL_RenderCopy() как Blit на эту основную поверхность, с SDL_RenderPresent() в качестве старой функции SDL_Flip().

И от wiki.libsdl.org/MigrationGuide:

SDL_Surface/2D рендеринга: поверхности все еще существуют, но рекомендуется, чтобы вместо того, чтобы использовать SDL_Surfaces, вы используете SDL_Textures с 2D ускорился рендеринга (SDL_CreateRenderer()), где это возможно.

Так что, если вы оказываете в текстуру вместо этого, то вы можете использовать SDL_RenderCopy (что взять прямоугольник отсечения), чтобы скопировать части текстуры основного SDL_Renderer.

Когда вы закончите рендеринг, используйте SDL_RenderPresent, чтобы показать/представить его на дисплее. Это может быть - в зависимости от бэкэнд - просто подождите vsync, а затем сделайте резервный обмен.

Отказ от ответственности: Я никогда не использовал бэкэнд DirectFB с SDL2; только OpenGL один.

+0

не является решением для обновления только части экрана в SDL? – SAP

+0

@SAP Да, путем рендеринга в 'SDL_Textures', а затем используя' SDL_RenderCopy', чтобы выбрать, какую часть обновить (используя аргумент 'dstrect'). –

+0

Существует 'SDL_RenderDrawLine', где работает первый аргумент _renderer_. Как нарисовать линию непосредственно на текстуре? – SAP

Смежные вопросы