|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
Кроссплатформенный стиль кода03.04.2019, 22:42. Показов 6956. Ответов 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,519
|
||||
| 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
|
|||
|
4085 / 2683 / 432
Регистрация: 09.09.2017
Сообщений: 11,936
|
|||
| 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
|
||
|
4085 / 2683 / 432
Регистрация: 09.09.2017
Сообщений: 11,936
|
|||||||
| 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
Стиль кода: положение фигурных скобок Стиль кода Стиль написания кода Стиль написания кода Изменить стиль текста из кода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|