OpenGL на Android: есть ли конфликты при вызове функций OpenGL на Java и C ++? - PullRequest
4 голосов
/ 02 июня 2011

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

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

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

1 голос
/ 02 июня 2011

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

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

1 голос
/ 02 июня 2011

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

...