Как сделать так, чтобы два потока одновременно рендерились на экран с помощью openGL ES - PullRequest
0 голосов
/ 09 июня 2011

У меня есть требование, когда мне нужно, чтобы два потока одного и того же процесса рендерились на экран с помощью openGL ES. Я новичок в приложениях для Android и раньше не занимался разработкой приложений. Я немного знаю об openGL ES, и мне нужно срочно протестировать код драйвера.

У меня есть два вида деятельности GLSurfaceView. Я использую setcontentview и XML-файл макета для определения макета. Каждое действие имеет свой файл макета отдельно. Размер отображаемых дисплеев невелик - около 10% экрана, и я позаботился о том, чтобы положения дисплея не перекрывались в двух макетах. Первоначально запускается одно действие, которое, в свою очередь, запускает второе действие через механизм намерений в «oncreate».

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

2) Первоначально реализация заключалась в том, что одно действие запускает 2-е действие через механизм намерений в «oncreate». Это привело к выполнению двух действий, но не одновременно. Есть ли способ, чтобы обе операции выполнялись одновременно и отображались.

3) Позже для создания второго потока я использовал механизм «runnable», создал поток и вызвал второе действие через «run» из «runnable». Хотя я мог подтвердить, что поток подтвержден, я не смог увидеть выполнение второго действия.

4) Ограничение связано с тем, что мне нужно иметь отдельный eglCreateWindowSurface для каждого из 2 потоков рендеринга.

Существуют ли примеры / примеры, где я могу видеть, как одновременно выполняются 2 действия или 2 потока при отображении на экране?

Я прошел много уроков, примеров кода и обсуждений, чтобы найти подсказку к моей проблеме. Может кто-нибудь помочь с некоторыми ссылками или объяснениями

1 Ответ

4 голосов
/ 28 ноября 2011

В любой версии OpenGL невозможно выполнить рендеринг в одну и ту же цель рендеринга с двумя потоками.OpenGL является системой, управляемой состоянием, поэтому изменение состояния в одном потоке перезапишет состояние в другом потоке.Существует только одна копия состояния OpenGL, поскольку существует только один графический процессор для обработки этого состояния.

...