Я заметил интересную ошибку при использовании SurfaceTexture
с Camera
.
Если я установил SurfaceTexture
, передайте ему действительную OpenGL
текстуру и передайте ее в Camera
все отлично работает.Затем я могу заменить пиксельный шейдер простым шейдером, и все по-прежнему прекрасно работает.Но если я заменю пиксельный шейдер более сложным шейдером, частота кадров падает и появляется заикание.
Похоже, что происходит, когда кадр обрабатывается не по порядку.После некоторой гипотезы я подумал, не было ли слишком много оборудования для отправки.После нескольких попыток я обнаружил, что если я просто сплю с потоком обработки gl в течение примерно 75 миллисекунд или около того, частота кадров снова возрастает, и заикание исчезает.
Пока это нормально, но я беспокоюсьэто значение является произвольным предположением, основанным на моем шейдере, и оно может измениться с другими шейдерами или другими телефонами.Мой вопрос: возможно ли узнать, когда безопасно отправить еще один кадр в OpenGL, не перегружая систему?(Или здесь что-то еще происходит?)
Я пытался использовать glFinish
и glFlush
, но ни один из них не помог.Я задавался вопросом, было ли это потому, что камера использует samplerExternalOES и как-то это влияет?
Примечание: если я запускаю тот же код OpenGL
, используя вместо него SurfaceView
, я не заикаюсь.Конечно, производительность не так хороша, поэтому это может быть причиной.