2012-02-20 1 views
0

Я сейчас в процессе написания игрового движка, который вот-вот перейдет к серьезному переписыванию. Во-первых, я рассматриваю, какую библиотеку использовать в сочетании с движком. Очевидно, я собираюсь с OpenGL здесь, и я сделаю все, что в моих силах, чтобы сделать его вперед, а также обратно совместимым.Использование комбинации FreeGlut с SDL

Основная проблема заключается в том, что из большинства моих исследований я обнаружил, что большие библиотеки, такие как SDL (за исключением 1,3), которые, я считаю, не являются стабильными, возможно, я ошибаюсь) поддерживайте до OpenGL 3, а не 4.2. Однако FreeGlut поддерживает новейшие и самые большие, и, похоже, это хороший способ найти основы движка.

Единственное, что, однако, заключается в настройке чего-то типа ввода-вывода клавиатуры и звукового входного звука вместе с другими вещами. Таким образом, я рассматриваю вопрос о том, можно ли использовать перенасыщение для инициализации opengl и использовать opengl с ним, а затем иметь SDL-управление окнами вместе с клавиатурным вводом-выводом, звуком и т. Д.

Конечно, всегда есть возможность использовать Qt с OpenGL, но я бы хотел определенно контролировать мой основной цикл, если это возможно (is это возможно с Qt и OpenGL?).

Я тоже слышал о SFML, но в конечном итоге я хотел бы придерживаться библиотек, написанных на C, поскольку я планирую написать библиотеку C, чтобы позаботиться о большей части примитивного рендеринга (ради чистой скорости и управление памятью, процедурно).

Таким образом, я в затруднении, как здесь. IS Qt - хороший выбор для этого, или есть еще одна альтернатива C-like (например, FreeGlut), которая позволяет управлять основным контуром (например, SDL) и предлагает необходимую настройку, которую я ищу?

+0

Я не думаю, что любая из этих библиотек ничего не делает с OpenGL за пределами создания контекста. Так что (кто-то поправьте меня, если я ошибаюсь) все они будут работать с OpenGL 4.2. – Thomas

+0

Кроме того, почему вы избегаете C++, если можете его использовать? Критические разделы, зависящие от производительности, все же могут быть написаны в стиле C-like, если вы предпочитаете. – Thomas

+0

Главным образом, потому что в C++ следует избегать использования таких вещей, как Malloc и Free, и в C есть вещи, которые я предпочитаю на C++. C отлично работает с указателями, и то же самое происходит с C++, но все еще есть несколько незначительных отличий, которые необходимо учитывать. Например, я планирую использовать множество строк стиля C и разбора. Кроме того, было бы проще протестировать без накладных расходов в стиле OO. – zeboidlund

ответ

3

Основная проблема заключается в том, что из большинства моих исследований я обнаружил, что большие библиотеки, такие как SDL (за исключением 1,3), которые, я считаю, не являются стабильными? Возможно, я ошибаюсь в этом вопросе) поддерживают только OpenGL 3, а не 4.2. Однако FreeGlut поддерживает новейшие и самые большие, и, похоже, это хороший способ найти основы движка.

Ваши исследования отсутствуют.

Во-первых, FreeGLUT должен никогда не использовать для всего, что вы могли бы назвать «двигателем». Независимо от того, что вы подразумеваете под этим, FreeGLUT не является инструментом для работы. Он предназначен для создания демонстраций, поэтому он владеет основным контуром. Я понимаю, что у FreeGLUT есть способ разрешить вам некоторый контроль над основным циклом, но стандартный способ использования FreeGLUT этого не делает.

Во-вторых, вы правы, что SDL 1.2 не способен создавать OpenGL 3.2+ core context. Однако вам не нужно создавать основной контекст для использования GL 3.2+; контексты совместимости отлично работают в этих версиях. Единственной платформой, которая не имеет контекста совместимости, является поддержка MacOSX 3.2. Поэтому я бы не стал беспокоиться об этом.

Вы можете использовать GLFW. Это похоже на FreeGLUT, только более ориентированную на игры. Он дает вам контроль над циклом рендеринга и т. Д. Он обеспечивает лучшую обработку ввода, чем FreeGLUT, а также некоторые функции загрузки изображений (только файлы TGA). Он даже имеет API-интерфейс для потоковой передачи (хотя я бы не предложил использовать эти функции. GLFW 2.0 потеряет их, поскольку C++ 11 и C11 имеют собственные API потоков).

Однако у него нет систем для аудио.

Я тоже слышал о SFML, но в конечном итоге я хотел бы использовать библиотеки, написанные на C, поскольку я планирую написать библиотеку C, чтобы позаботиться о большинстве примитивных рендерингов (ради чистая скорость и управление памятью, процедурно).

Я собираюсь проигнорировать ошибочность в отношении того, что C++ не имеет «чистой скорости и управления памятью»; это обычная утка, которую я проигнорирую. Важным моментом является то, что SFML, в отношении вашего кода визуализации, существует исключительно для создания и управления окном. Ваш код рендеринга даже не должен говорить с ним. Вы вызываете некоторые SFML-функции, создаете пару SFML-объектов, а ваш код OpenGL для C-библиотеки даже не должен знать, что существуют объекты C++.

Однако, если вы вообще не можете работать на C++, вы всегда можете использовать Allegro version 5. Он имеет API C и обеспечивает поддержку основных контекстов OpenGL, ввода, аудио и большинства того, что делает SFML. Он также имеет довольно приличную документацию и является модульным (хотя и отличается от SFML).

+0

Имеет ли SFML контекстное создание? Редактировать: Nevermind, кажется, что он делает :): http://sfml-dev.org/documentation/2.0/structsf_1_1ContextSettings.php – zeboidlund

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

  • Нет связанных вопросов^_^