Как заставить два потока одновременно выводиться на экран с помощью OpenGL ES

#android #multithreading #opengl-es #android-activity

#Android #многопоточность #opengl-es #android-активность

Вопрос:

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

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

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

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

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

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

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

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

Комментарии:

1. Похоже, вам нужны два GLSurfaceViews на одной «странице». Это правильно? Разве вы не можете просто сделать это с помощью одного действия и макета?

Ответ №1:

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