|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
Кроссплатформенный стиль кода03.04.2019, 22:42. Показов 7100. Ответов 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
|
|||
|
4129 / 2707 / 433
Регистрация: 09.09.2017
Сообщений: 12,035
|
|||
| 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
|
||
|
4129 / 2707 / 433
Регистрация: 09.09.2017
Сообщений: 12,035
|
|||||||
| 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 | |
|
Стиль кода: положение фигурных скобок Стиль кода Стиль написания кода Стиль написания кода Изменить стиль текста из кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|