Почему SDL и OpenGL связаны между собой? - PullRequest
40 голосов
/ 24 апреля 2011

Я возился с SDL и обнаружил, что вы не можете вращать изображения с SDL. Везде, где задавался вопрос, люди говорили, что используют OpenGL для ротации. Я всегда думал, что SDL полностью отделен от OpenGL, я не прав, думая об этом? Я даже нашел учебники по использованию OpenGL в SDL, что еще больше смутило меня. Каковы именно отношения между SDL и OpenGL? Почему бы просто не использовать OpenGL, если он более мощный и позволяет вам делать больше (это из того, что я прочитал)?

Ответы [ 6 ]

24 голосов
/ 24 апреля 2011

SDL - это кроссплатформенная мультимедийная библиотека, предназначенная для низкоуровневого доступа к аудио, клавиатуре, мыши, джойстику и т. Д. Она также поддерживает 3D-оборудование через OpenGL.

OpenGL - это стандартная спецификация, определяющая мультиязычный, кросс-платформенный API для написания приложений, которые создают компьютерную графику 2D и 3D .Интерфейс состоит из более чем 250 различных вызовов функций, которые можно использовать для рисования сложных трехмерных сцен из простых примитивов.OpenGL был разработан Silicon Graphics Inc. (SGI) в 1992 году [4] и широко используется в САПР, виртуальной реальности, научной визуализации, визуализации информации и имитации полета.Он также используется в видеоиграх, где он конкурирует с Direct3D на платформах Microsoft Windows (см. OpenGL и Direct3D).

14 голосов
/ 24 апреля 2011

SDL - это уровень над OpenGL; фактически он использует GDI в Windows по умолчанию, а также имеет бэкэнд DirectX. Люди, вероятно, говорят, что вы можете использовать OpenGL, чтобы обойти ограничения SDL на платформах, которые по умолчанию используют OpenGL (хм, Linux), потому что абстракция более высокого уровня не раскрывает эту функциональность. Однако тогда ваш код «менее» переносим к Windows (или, по крайней мере, к Windows, использующей бэкэнд GDI).

Кроме того, SDL делает много других вещей помимо графики - аудио, ввод и т. Д., Чего не делает OpenGL.

6 голосов
/ 24 апреля 2011

SDL использует OpenGL в качестве аппаратного средства визуализации для контента, который требует аппаратного рендеринга на некоторых платформах.Если у вас есть такая платформа, то OpenGL является базовым API, над которым SDL является абстракцией.

6 голосов
/ 24 апреля 2011

SDL обрабатывает ввод, создание окон, загрузку изображений и некоторые другие функции, которые не поддерживает OpenGL.

5 голосов
/ 24 апреля 2011

О вашем примере с вращающейся графикой: лучше сделать это с OpenGL (т.е. с аппаратным ускорением), чем с самим SDL (то есть с процессором), потому что он обычно требует больших вычислительных ресурсов (особенно если у вас есть много битмапов для вращениякаждый кадр, и вы хотите, чтобы эффект был плавным).

Однако ничто (кроме причины) не мешает вам использовать пакет SDL_gfx, в котором есть модуль SDL_rotozoom, отвечающий за поворот и масштабирование растровых изображений.

3 голосов
/ 24 апреля 2011

Как много людей заявили. SDL обрабатывает больше, чем просто рендеринг. Помимо обработки звука, ввода и других полезных вещей, он упрощает использование графики, предоставляя вам доступ ко многим функциям, которые в противном случае вам нужно было бы реализовать самостоятельно.
Так что, SDL - это уровень абстракции над OpenGL. Вы все еще можете получить доступ к OpenGL в своем приложении и, следовательно, использовать его на полную мощность.
Простое дополнение, поскольку вы, кажется, новичок в этом виде API: если вы хотите API, похожий на SDL (для 2D-графики), я могу порекомендовать взглянуть на SFML . Он основан на C ++ вместо C, имеет функции для таких вещей, как вращение. Он также основан на OpenGL. :)

...