|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
Кроссплатформенный стиль кода03.04.2019, 22:42. Показов 7362. Ответов 56
Метки нет (Все метки)
Всем доброго здравия!
Ни когда раньше не писал кроссплатформенные приложения, и даже не знаю как писать под (например) линукс. Всегда работал только под виндой. Так вот, решил написать шаблон приложения, универсальный с подключением OpenGL, набросал пока немного кода, только инициализацию и создание окна: Кликните здесь для просмотра всего текста
и прежде чем продолжить, встал вопрос: А как мне код оформить так, чтобы если я передам свой код человеку который работает на другой платформе, он мог спокойно, не плюясь в меня переписать/дополнить главные функции инициализации окон не переписываю всю программу?Т.к. у меня даже опыта нет написания кода под другие платформы, то хочется свой код под мою платформу как-то грамотно обернуть, что-то типа, вынести всё что касается моей платформы в отдельные функции/класс и в точке входа прописать типа: initWin() (например) Я понимаю, что существуют кроссплатформенные библиотеки, но т.к. я только учусь, то хотелось бы самому научиться грамотно оборачивать код. В общем буду рад услышать все советы по оформлению кода, что куда вынести и т.д. P.S. Понимаю, что у некоторых возникнет вопрос, а для чего в режиме дебаг консольное, а релизе виндовое приложение, сразу отвечу, где-то прочитал идею о том, чтобы в режиме дебаг дополнительно выводить для себя логи ещё и в консоль, мне эта идея понравилась и решил её реализовать.
0
|
||||||
| 03.04.2019, 22:42 | |
|
Ответы с готовыми решениями:
56
Проектная структура и стиль кода Стиль написания кода(читабельность и прочее)
|
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||
| 04.04.2019, 11:56 [ТС] | ||
|
а GLFW больше ориентирован на OpenGL 3.3+ т.е. конкретно для создания контекста? По сути, что я хочу, для меня библиотека нужна для создание кросплатформенного окна, подключения контекста OpenGL 3.3+ и взаимодействия с ОС, желательно ещё реализация загрузки текстур и работа со звуком, вот для этих целей что лучше подойдет? Для работы с матрицами не плохо подходит GLM, плюс у них есть реализации различных шумов и т.п.
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||||
| 04.04.2019, 12:07 | ||||
|
Он у вас платформо-специфичный. Такое в принципе не взлетит нигде кроме винды. Идея простая: Снаружи видно только какие то платформо-независимые интерфейсы. Никакие #include<windows.h> ни в каких публичных хэдерах не отсвечивают.Вся платформо-специфичная начинка скрывается в недрах спп файлов. В зависимости от платформы под которую осуществляется сборка, те, или иные детали могут включаться/исключаться из компиляции. Это может быть на уровне файлов (конфигурируется системой сборки) Или на уровне отдельных фрагментов кода (конфигурируется через макросы препроцессора) Она как раз предоставляет кроссплатформенное окошко + opengl. Причем не нужно пытаться вникнуть в то, как GLUT реализована изнутри. Посмотрите на то, какие она предоставляет интерфейсы. Как они оформлены.
1
|
||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
||||||
| 04.04.2019, 12:16 | ||||||
|
Но кроме него, вам еще нужен "лоадер", т.к. функции OpenGL должны выполняться в рантайме/динамически. На эту роль тянет glad. Только вмессте вы сможете использовать OpenGL. В SDL и SFML там уже все сделано за вас, но они и весят больше и со 100% вероятностью не покроют ваши потребности, т.к. они менее гибкие в плане настройки под вас. Потом уже поменять не получится. Т.е. либо юзаем GLFW + glad и сами пишем/выбираем удобные для нас загрузчики и работу со звуком. На самом деле с GLFW и glad'a можно самому выбросить то что не используешь. Или SDL/SFML - где уже как бы есть все готовое.
1
|
||||||
| 04.04.2019, 12:31 | |||||
|
My Original Message in English
You can find Russian translations of these lessons here: learnopengl. Урок 1.1 — OpenGL / Хабр - Habr Translate Google Result:
Вы можете найти перевод этих уроков на русский язык здесь: learnopengl. Урок 1.1 — OpenGL / Хабр - Habr
1
|
|||||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|||
| 04.04.2019, 13:43 [ТС] | |||
|
Понятно, что можно подключить GLFW + GLM + ... + SOIL и т.д. А я имею ввиду по типу SFML но с поддержкой OpenGL 3+ и для 3D Если таких нет библиотек, ну тогда буду использовать несколько разных, в этом проблем нет, просто я всех библиотек не знаю вот и советуюсь, потому что через поиск под свои нужды одну библиотеку охватывающую всё - я не нашел А по сути то нужно, создание окна, подключение OpenGL обработка клавиш/мыши ну и работа с внешними ресурсами текстуры/звук. Мне даже не нужны всякие там встроенные примитивы, даже вывод текста не важен, т.к. я это всё сам могу реализовать. А вот кросплатформенное приложение я не могу создать Для этого и нужна библиотекаДобавлено через 10 минут
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|
| 04.04.2019, 13:46 | |
|
1
|
|
| 04.04.2019, 14:02 | ||||
|
My Original Message in English
Translate Google Result: I like the modern GLAD loader that requires to include to a project only two files: "glad.h" and "glad.c".
2
|
||||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 04.04.2019, 14:06 | |||
|
Поэтому выбор оставим за ТС
2
|
|||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|||
| 04.04.2019, 14:25 [ТС] | |||
|
Добавлено через 2 минуты Добавлено через 3 минуты Ну, в общем, я вас всех услышал и понял! Осталось только определиться с конкретными своими желаниями ![]() Добавлено через 10 минут eva2326, Спасибо за советы, хороший пост, но почему-то не могу ваш ответ добавить к лучшему, может лимит исчерпан?!
1
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
|||
| 04.04.2019, 14:38 | |||
|
0
|
|||
|
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
|
|||
| 04.04.2019, 14:52 | |||
|
Это означает, что фактическая реализация API варьируется в зависимости от аппаратного обеспечения графического процессора, операционной системы и установленного графического драйвера. Спецификация OpenGL имеет множество различных функций, определенных в ней, и спецификация OpenGL периодически обновляется. Ваша видеокарта может не поддерживать сама по себе (и не объязана это делать) все эти функции. Здесь и начинаются проблемы. Это причина того, почему все функции OpenGL статически не объявляются в заголовочном файле. Кроме того, статическая связь с библиотекой невозможна, потому что конечные машины с вероятностью 99% будут иметь сильно различающийся набор реализаций OpenGL.
0
|
|||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||
| 04.04.2019, 15:35 [ТС] | ||
|
Для примера разницы между обычным и расширенным OpenGL: раньше я сцену формировал каждый кадр в циклах вызовами glVertex и тому подобное реализую большую часть логики на стороне CPU. в расширенном же можно работать напрямую с буферами, а обработку текстур света и матриц запихать в шейдеры, т.е. я разово подготавливал вершины большинства объектов в сцене и грузил сотни тысяч вершин в буфер, всё остальное уже делалось на стороне GPU, а удалять/добавлять вершины я могу напрямую в буфере не перезакачивая целиком все вершины, хотя и для этого есть удобные и быстрые механизмы. В результате скорость в моем приложении возросла многократно, снизив нагрузку на CPU. Ну как-то так, объяснил как смог
0
|
||
| 04.04.2019, 16:43 | |||||||||||||
|
My Original Message in English
This is the example "EmptyWindow" in VS2015 that uses GLFW, GLAD, OpenGL 3.1: EmptyWindow_GlfwOpenGL31Cpp.zip Try download and run it immediately, but, if you use another version of VS, select your "Platform Toolset".
Translate Google Result:
Это пример «EmptyWindow» в VS2015, который использует GLFW, GLAD, OpenGL 3.1: EmptyWindow_GlfwOpenGL31Cpp.zip Попробуйте загрузить и запустить его немедленно, но, если вы используете другую версию VS, выберите свой «Набор инструментов платформы» («Platform Toolset»)
1
|
|||||||||||||
| 04.04.2019, 17:24 | ||
|
My Original Message in English
Translate Google Result:
0
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,099
|
|||||||
| 04.04.2019, 17:25 | |||||||
|
0
|
|||||||
| 04.04.2019, 19:37 | |||||||
|
Flowchart Tutorial
main.cpp
0
|
|||||||
| 04.04.2019, 19:45 | |
|
0
|
|
| 04.04.2019, 19:45 | |
|
Стиль кода: положение фигурных скобок Стиль кода Стиль написания кода Стиль написания кода Изменить стиль текста из кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|