В настоящее время я пишу приложение для Android для своих клиентов, у которых есть GLSurfaceView с GLSurfaceView.Renderer.Android и OpenGL дает черный кадр при запуске
Весь мой продукт OpenGL работает просто отлично (это в основном порт того, что другой разработчик написал на iOS в первую очередь). За исключением одного. Когда изображение загружается, и, таким образом, материал OpenGL загружается, мой фон быстро мигает черным, а затем OpenGL начинает рендеринг правильно (с моим фоном). Так что я делаю:
В onSurfaceCreated я начинаю с этим:
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.9f + 0.1f * (21.0f/255),
0.9f + 0.1f * (36.0f/255),
0.9f + 0.1f * (31.0f/255), 1.0f);
// Here goes my other stuff, if I comment all my other stuff out I still get the flash at startup
}
В моем методе onDrawFrame я это делаю:
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
// My stuff, again, if I comment all this stuff out I still get the flash...
}
Так, если удалить все строки кода, за исключением glClearColor (..) in onSurfaceCreated Я все еще вижу черную вспышку перед установкой фактического цвета фона. Если я удалю только glClearColor (..) из моего кода (и, таким образом, оставим все остальные элементы OpenGL на месте), все будет отображаться на черном фоне.
То, что я хотел бы видеть, что я просто избавиться от черной вспышки и, таким образом, что мой цвет фона инициализируется правильно при запуске ...
Любые идеи, как я могу добиться этого?
Dirk
Вы просматривали все местоположения, где в вашем коде происходят своп-буферы? Часто желательно очистить экран до цвета, прежде чем начинать рисовать, потому что в противном случае экран будет заполнен любым мусором в VRAM, когда приложение запустится (и поверьте, это выглядит намного менее профессионально, чем черная вспышка). Подмена буферов немедленно - это один трюк, используемый для этого. –