В моем приложении я использую стороннее пользовательское представление, которое вызывает функции 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, которая загружала текстуры.