Intereting Posts
Отключить контекстное меню выбора в пешеходном переходе (кордова) MapView добавляет pushpins на ощупь Непревзойденная дата Исключение Эмуляция карты с помощью программного обеспечения NFC Просмотр изображений в Android, масштабирование в полноэкранном режиме и centerCrop Нельзя публиковать что-либо на LinkedIN с помощью linkedin-j Java бросает NotSerializableException после добавления собственного интерфейса Экран предпочтений Android без XML Android – Как переопределить кнопку «Назад», чтобы она не закончила () мою активность? Настройка spinner onClickListener () в Android Вызов Webservice с устройства Android не работает, хорошо работает на эмуляторе Как сравнить символы в двух CharSequences Есть ли хорошие примеры коротких кодов, которые просто читают новое сообщение Gmail? Диалоговое окно «Несколько разрешений» на Android с помощью входа в Google после изменения ориентации Два экрана одинакового размера с разной плотностью

OpenGL на Android: любые конфликты при вызове функций OpenGL как на Java, так и на C ++?

В моем приложении я использую стороннее пользовательское представление, которое вызывает функции OpenGL в Java, и я также вызываю функции OpenGL в своем собственном C ++-коде.

Должно ли это быть проблемой?

Есть ли риск, что они могут быть вызваны одновременно?

Каков порядок потоков вызовов OpenGL через java / c ++?

Это не должно быть проблемой, если вы знаете, что делаете. Java-привязки OpenGL в Android в основном просто вызывают одну и ту же функцию c ++. В этих вызовах нет больше логики. Таким образом, вы можете в принципе думать об этих вызовах так же, как если бы они были прямым кодом c ++.

Проблема, с которой вы, скорее всего, столкнетесь, будет заключаться в том, что OpenGL не является потокобезопасным, если у вас есть только один контекст. Поэтому, если два потока пытаются вызвать методы gl в том же контексте (что обычно имеет место только в одном приложении), это вызовет проблемы. Вы можете отказаться от этих проблем, вызвав eglMakeCurrent, чтобы сделать текущий поток текущим потоком OpenGL. И тогда вы можете сделать свои звонки как обычно.

Вы не можете получить доступ к одному контексту OpenGL из разных потоков. Но законно смешивать C ++ и Java, последние – только обертки для собственных вызовов.

Всегда есть проблемы с вызовом одной и той же функции из нескольких потоков, если эта функция изменяет некоторый глобальный объект.

Вы можете вызывать OpenGL как с Java, так и с C ++, неуверенный, если он должен быть в одном и том же потоке.
В игре я написал, что сделал весь рендеринг в C ++, но загрузил текстуры в Java (поскольку java имеет доступ к классу R), класс C ++ вызывал бы функцию java, которая загружала текстуры.