OpenGL #4 - менеджер ресурсов

  Рет қаралды 6,933

SimpleCoding

SimpleCoding

Күн бұрын

Пікірлер: 48
@cptRouch
@cptRouch Жыл бұрын
Спасибо за видео! Настроен дойти до конца и может это поможет найти работу)
@РоманГаевский-ь3е
@РоманГаевский-ь3е 4 жыл бұрын
И снова мои спасибо и респект автору!
@kpanat
@kpanat 11 ай бұрын
Путь можно передать из CMake. Для этого надо написать инструкцию configure. Но он видимо не хочет так делать... А зря. Так можно передавать многие параметры из CMake.
@kpanat
@kpanat 11 ай бұрын
Любитель восклицательных знаков...
@indemion_kors
@indemion_kors 2 ай бұрын
Помогите пожалуйста разобраться! Очень странно, программа работает, но отладчик не заходит внутрь файла ResourseManager. Просто проскакивает все точки останова внутри него, проскаивает все строки связанные с ним в mine и идёт дальше до конца программы и успешно отрисовывает треугольник. А на точках останова внутри класса ResourseManager пишет "В настоящий момент попадания в точку остановка не произойдет. Нет загруженных символов для этого документа."
@Saiel2285
@Saiel2285 3 жыл бұрын
Подчеркну, что таким алгоритмом поиска пути директории файла в линуксе можно напороться на ситуацию, когда в имени файла содержится обратный слэш. Это маловероятно, и судя по итоговому репозиторию, менеджер будет переписан, но просто этот момент имейте в виду.
@ГлебРостов
@ГлебРостов 2 жыл бұрын
char symbol = '/'; #ifdef _WIN32 symbol = '\'; #endif
@nikondolgushin9421
@nikondolgushin9421 2 ай бұрын
я бы предпочел создать одну include директорию со всеми класами, чем отдельно подключать их в ide
@НикитаТабакаев-э3ф
@НикитаТабакаев-э3ф 3 жыл бұрын
Я правильно понимаю, что тут можно даже не выделять динамическую память, а просто сделать ShaderProgram(const std::string& vertexShader = "", const std::string& fragmentShader = "");. При вызове компиляции мы знаем сколько раз создастся ShaderProgram => ShaderProgram1(string = "" , string = "") (+-8 байт (строки весят допустим 4 байт как pointers) + 8(bool + int = 1 + 4 = 8 (выравнивание))) = 16 и заранее для пустого объекта компилятор выделит байтики а потом на место в памяти просто move ShaderProgram2(string = "lorem", string = "lorem")(всё те же самые строки по 4*2 = 8 а то что внутри они просто туда указывают в heap + 8 члены класса) = 16 => можно просто сделать замену А в std::map и у тебя бы вызывался обычный контруктор, а потом сделанный move конструктор, затем сразу же деструктор 1 объекта, потом в конце программы деструктор объекта который создался через move конструктор. когда на этапе компиляции можно определить количество используемой памяти, то можно динамически не алокейтить
@НикитаТабакаев-э3ф
@НикитаТабакаев-э3ф 3 жыл бұрын
получается что на статическую память выделенную под 1 объект я переместил 2 объект (удалив 1 и сделав move), а в конце удалил 2 объект
@НикитаТабакаев-э3ф
@НикитаТабакаев-э3ф 3 жыл бұрын
Но тогда в деструкторе можно прописать if(m_ID != 0) { glDeleteProgram(m_ID); }
@НикитаТабакаев-э3ф
@НикитаТабакаев-э3ф 3 жыл бұрын
облизываем байтики
@SimpleCodingChannel
@SimpleCodingChannel 3 жыл бұрын
Да, думаю можно было бы и так сделать. Я на счет оптимизации пока не сильно заморачивался. Самое главное - не выделять память динамически каждый кадр, а при старте игры и загрузке это обычно не вызывает проблем с производительностью
@АлексейГакман-т7м
@АлексейГакман-т7м 2 жыл бұрын
странно, у меня почему-то бин генерируется по другому адресу. "out\build\x64-Debug\bin"
@alexmedved6699
@alexmedved6699 2 жыл бұрын
Приветствую всех, может кто-нибудь знает как добавить подсветку синтаксиса OpenGL в Code::Blocks 20.03, авто дополнение кода работает, но с подсветкой беда.
@olegzorin3911
@olegzorin3911 3 жыл бұрын
Добрый день. А что за стандарт cxx_std_17? Можно ли указывать что-то иное? Я не уверен, но в доках cmake, вроде как ещё речь идет про _20 и _23. Если вначале я предполагал, что числа, это какие-то отсылки к годам. То 23 меня ставит в тупик... Хотя там перечислены 11, 14, 17, 20 и 23. Может каждые три года идет пересмотр каких-то правил?
@SimpleCodingChannel
@SimpleCodingChannel 3 жыл бұрын
Да, это стандарты С++, привязанные к годам. Нужно выбирать в зависимости от возможностей, которыми хочешь пользоваться, но надо еще учесть, что более новые стандарты могут не все компиляторы поддерживать
@bocker5314
@bocker5314 3 жыл бұрын
Один вопрос, а зачем нам getShader если она не используется
@SimpleCodingChannel
@SimpleCodingChannel 3 жыл бұрын
Думал, что может потом еще пригодится...
@erlanmundus6241
@erlanmundus6241 4 жыл бұрын
Здравствуйте, помогите решить проблему метод CreateShader, вот эта строка const char* code = Source.c_str(); выдает ошибку Error reading characters of string Параметр Source определенно содержит код шейдера
@SimpleCodingChannel
@SimpleCodingChannel 4 жыл бұрын
у вас точно такой же код? можете скопировать код функции и выложить на pastebin.com/ ? а код из github нормально запускается?
@erlanmundus6241
@erlanmundus6241 4 жыл бұрын
@@SimpleCodingChannel нет, я соврал) строка приходит, просто дебагом не дошел. Была проблема с переносом строки в #version 460 не убрал
@SimpleCodingChannel
@SimpleCodingChannel 4 жыл бұрын
Ложная тревога)
@yernaraldabergenov3470
@yernaraldabergenov3470 4 жыл бұрын
можешь обьяснить почему нужно удалять сперва resource manager и почему ты просто не создал пойнтер ресурс менеджера(new Resource manager) и перед удалением контекста не вызвал delete resManager?
@SimpleCodingChannel
@SimpleCodingChannel 4 жыл бұрын
Его нужно удалять, потому что он содержит в себе ссылки на OpenGL ресурсы, например текстуры или шейдеры. И если его не удалить до того, как разрушится контекст OpenGL, то потом после вызова деструктора resource manager будут удаляться эти текстуры и шейдеры, так как это будут их последние shared_ptr ссылки на них. А без контекста OpenGL это приведет к крашу приложения. Я потом изменил немного дизайн, сейчас у меня resource manager имеет только статичные функции и удаление всех ресурсов делается одной функцией. Но можно, конечно, это сделать и через new/delete, тут уже вопрос вкуса
@yernaraldabergenov3470
@yernaraldabergenov3470 4 жыл бұрын
@@SimpleCodingChannel спасибо за ответ! Решил протестировать на линуксе и выходит ошибка, что глсл версия 460 не поддерживается(поддерживаемые версий 3.х). Как ты решил это?
@SimpleCodingChannel
@SimpleCodingChannel 4 жыл бұрын
Я у себя просто ставил последние актуальные драйвера от нвидии, тестировал на OpenSUSE
@yernaraldabergenov3470
@yernaraldabergenov3470 4 жыл бұрын
@@SimpleCodingChannel спасибо
@простоя-д9б3у
@простоя-д9б3у 4 жыл бұрын
​@@SimpleCodingChannel По скольку new возбет динамическую память(heap) это не пустая трата производительности?
@tpner9690
@tpner9690 11 ай бұрын
Привет
@fellwcradtg9082
@fellwcradtg9082 2 жыл бұрын
Здравствуйте, спасибо за вашу работу и ролики У меня возникла небольшая проблема При отрисовке первого треугольника (когда весь код был ещё в одном файле) программа спокойной запускалась и рисовала треугольник, но он был полностью белым, я не знал причину этого и пошёл дальше И после того как мы добавили менеджер ресурсов, у меня в консоли появилась ошибка Version number not supported by OGL driver В интернете я конечно нашёл решение что в шейдерах нужно изменить версию OpenGL на поддерживаемую в системе или более низкую, но это не помогло В моей системе используется OpenGL 3.1.0 Вы не знаете с чем это связанно и как это решить?
@SimpleCodingChannel
@SimpleCodingChannel 2 жыл бұрын
Можно еще попробовать обновить драйвер видеокарты, 3.1 уже давольно таки старая версия... Еще можно с помощью glfwWindowHint просить создать контекст с более раней версией, и если не помогает, то тогда искать ошибку в шейдерах. Скорее всего именно в коде ошибка
@fellwcradtg9082
@fellwcradtg9082 2 жыл бұрын
@@SimpleCodingChannel Драйвера это видеокарты больше нельзя обновить, а код я с репозитория вашего копировал Но есть ещё интересная ошибка ERROR: 0:2: 'layout' : syntax error syntax error В интернете по этому поводу пишут что видеокарта не поддерживает этот синтаксис и можно что то дописать в коде и всё заработает, но конкретного решения нет Может вы знаете что то по этому поводу? Ну и вообще все ошибки крутятся именно возле вертексного шейдера
@SimpleCodingChannel
@SimpleCodingChannel 2 жыл бұрын
а какую версию шейдера вы указываейте в коде? Для OpenGL 3.1 максимальная будет 1.40. То есть в коде шейдера первой строчкой должно быть #version 140
@fellwcradtg9082
@fellwcradtg9082 2 жыл бұрын
@@SimpleCodingChannel Именно эта и стоит
@SimpleCodingChannel
@SimpleCodingChannel 2 жыл бұрын
Тогда возможно не поддерживается location, можно попробовать без него, как тут в примере www.khronos.org/opengl/wiki/Tutorial:_OpenGL_3.1_The_First_Triangle_(C%2B%2B/Win)
@DarkStar-rq3cw
@DarkStar-rq3cw 5 ай бұрын
У меня почему-то немного иной путь получается D:\mygame\build\bin\Debug\game.exe
@DarkStar-rq3cw
@DarkStar-rq3cw 5 ай бұрын
Тайминг 25:15
@neordinator
@neordinator 2 жыл бұрын
Зачем мой коммент удаляете?
@SimpleCodingChannel
@SimpleCodingChannel 2 жыл бұрын
Я ничего не удалял. Возможно, что ютуб сам удаляет, если в комментарии ссылка
@neordinator
@neordinator 2 жыл бұрын
Я извиняюсь. Ложная тревога, отбой:) Всё-таки ошибка была синтаксическая. не закрыл фигурную скобку после _BINARY_DIR 😅
OpenGL #5 - текстуры
13:25
SimpleCoding
Рет қаралды 5 М.
«Осень». Самая большая загадка Windows XP
14:36
Девять десятых
Рет қаралды 1,2 МЛН
бабл ти гель для душа // Eva mash
01:00
EVA mash
Рет қаралды 9 МЛН
2 MAGIC SECRETS @denismagicshow @roman_magic
00:32
MasomkaMagic
Рет қаралды 36 МЛН
这是自救的好办法 #路飞#海贼王
00:43
路飞与唐舞桐
Рет қаралды 134 МЛН
Как Linux рисует окна?
48:46
Студенческие клубы разработки КНиИТ СГУ
Рет қаралды 58 М.
Всё об указателях в C++ за 20 минут
20:00
ЯЗЫК АССЕМБЛЕРА С НУЛЯ | #1 НАЧАЛО
54:43
3D Game Engine | 29 | Управляем камерой
32:45
SimpleCoding
Рет қаралды 1,3 М.
Структура файлов и каталогов в Linux
20:28
Aleksey Samoilov
Рет қаралды 419 М.
Docker - Полный курс Docker Для Начинающих [3 ЧАСА]
3:01:51
бабл ти гель для душа // Eva mash
01:00
EVA mash
Рет қаралды 9 МЛН