#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, поскольку для обработки этого состояния используется только один графический процессор.