Size: a a a

pro.graphon (and gamedev)

2020 November 20

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Medved Medvedievich
Ну вот да, я еще ради интереса брал просто QT, чтобы сравнить. Так вот я запросто там сделал анимацию картинки, плюс управление ей на тачпаде, и проблем не испытал почти никаких. Все было просто. С SDL же почувствовал какой-то барьер. Почему то когда я включаю флаги использования C++, у меня это на эмуляторе работает нормально, а когда загружаю на телефон, ошибка при установке, и приложение не ставится.
SDL это прослойка для кроссплатформенного доступа к низкоуровневым вещам, типа контекста OpenGL, звука, ввода, но на Андроиде реализация, скорее, только прибавит боли
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Medved Medvedievich
Ну вот да, я еще ради интереса брал просто QT, чтобы сравнить. Так вот я запросто там сделал анимацию картинки, плюс управление ей на тачпаде, и проблем не испытал почти никаких. Все было просто. С SDL же почувствовал какой-то барьер. Почему то когда я включаю флаги использования C++, у меня это на эмуляторе работает нормально, а когда загружаю на телефон, ошибка при установке, и приложение не ставится.
А ты ABI armeabi-v7a и arm64-v8a включаешь в скрипте сборки, или только x86?
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Голый OpenGL ES, можно Native App Glue, чтобы интерфейс на C был для обработки событий времени жизни activity, для ввода, но не обязательно, Native App Glue в первую очередь нужен, если у тебя и так есть игра с какими-то жирными вещами типа чтения из файлов в основном потоке, он создаёт отдельный поток и туда шлёт сообщения от системы через pipe; можно и через JNI вручную пробрасывать коллбэки
А я читал в доке, что там вроде на Андроиде в NDK уже встроенный OpenGL ES да?
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Medved Medvedievich
А я читал в доке, что там вроде на Андроиде в NDK уже встроенный OpenGL ES да?
Да, и EGL
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Тебе надо ANativeWindow* для инициализации EGLSurface
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
А ты ABI armeabi-v7a и arm64-v8a включаешь в скрипте сборки, или только x86?
Конечно, все архитектуры подключены. В gradle файле
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Только учти, что на Андроиде при сворачивании приложения его surface убивается, придётся это обрабатывать как-то
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
https://github.com/XProger/OpenLara/tree/master/src/platform/android/native_wip вот, кстати, на нативном, с вводом и звуком
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Самое правильное — это целиком убивать, а потом создавать контекст OpenGL ES, но тогда придётся перезагружать все текстуры, вершинные буферы
источник

TG

Timur Gagiev in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Только учти, что на Андроиде при сворачивании приложения его surface убивается, придётся это обрабатывать как-то
начиная с 3го не убивается
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
В крупных играх лучше так не делать
источник

d

disba1ancer in pro.graphon (and gamedev)
Medved Medvedievich
@xproger @disba1ancer @Triang3l
Привет. Я пишу на плюсах, но не работаю в геймдеве, и особо ничего не изучал о графических библиотеках, движках и т.д. Недавно захотелось написать свою небольшую игру 2D (NDK), под Android(скорее всего только под него). И до кучи, чтобы погрузиться в эту тему, хотелось бы написать свой простенький движок для тренировки(исключительно в образовательных целях, а не чтобы создать очередное "гениальное" творение). Мне рекомендовали пощупать SDL2. И я честно говоря не в восторге от него (для Android). Собрать его какой-то гемор, почему-то постоянно крешится при рендеринге на телефоне и т.д. К тому же все это сишное и плохо дружит с плюсами. Почитал вчера ночью историю чата, увидел что некоторым из вас он нравится, а кто говорит, что он совершенно непригоден для разработки под Android. В общем вопрос, что минимально рекомендуете использовать в таких условиях? Какую библиотеку? Может голый OpenGL ES? А может быть QT?)) Моя цель как я уже сказал выше, простенькая 2D игра с нуля, с несложной анимацией и графикой, со своим движком, в которую я мог бы дать поиграть своим детям и сказать "Вот смотрите, это папа сделал". Пардон за много букв.
Ничего посоветовать не могу не кодил под андроид
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Timur Gagiev
начиная с 3го не убивается
С 3-го Андроида? Я думаю минималку 4.1. взять, 99% устройств будет поддерживать))
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Timur Gagiev
начиная с 3го не убивается
Контекст не убивается, а поверхность до сих пор, она окну принадлежит
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Можно и просто ничего не делать, когда приложение спит, чтобы ещё и заряд батареи не тратить в это время, и пересоздать EGLSurface потом
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Голый OpenGL ES, можно Native App Glue, чтобы интерфейс на C был для обработки событий времени жизни activity, для ввода, но не обязательно, Native App Glue в первую очередь нужен, если у тебя и так есть игра с какими-то жирными вещами типа чтения из файлов в основном потоке, он создаёт отдельный поток и туда шлёт сообщения от системы через pipe; можно и через JNI вручную пробрасывать коллбэки
Я бы хотел обойтись без джавы....вот прям совсем))) Ну или почти...
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Спасибо за ссылку
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Но если есть вероятность, что всё же придётся делать вызовы OpenGL ES, пока приложение свёрнуто (хотя, это касается больше портов уже существующих игр, если пишешь с нуля, лучше учесть и ставить игру на паузу), можно создать pbuffer surface размером 1x1, и через eglMakeCurrent переключаться на него, когда убивается поверхность
источник

VK

Vitaliy ◀️TriΔng3l▶️... in pro.graphon (and gamedev)
Medved Medvedievich
Я бы хотел обойтись без джавы....вот прям совсем))) Ну или почти...
Тогда используй Native App Glue, у тебя будет функция android_main, которая будет вызвана в отдельном потоке, и цикл событий, прилетающих из основного потока
источник

MM

Medved Medvedievich in pro.graphon (and gamedev)
Vitaliy ◀️TriΔng3l▶️ Kuzmin
Тогда используй Native App Glue, у тебя будет функция android_main, которая будет вызвана в отдельном потоке, и цикл событий, прилетающих из основного потока
Ну т.е. берем Android студию, OPENGL и вперед, правильно?
источник