|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
Кроссплатформенный стиль кода03.04.2019, 22:42. Показов 6595. Ответов 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
|
||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,517
|
||||
| 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
|
|||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
|||
| 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
|
||
|
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
|
|||||||
| 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 | |
|
Помогаю со студенческими работами здесь
40
Стиль кода: положение фигурных скобок Стиль кода Стиль написания кода Стиль написания кода Изменить стиль текста из кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|