Объединение Canvas и OpenGL ES Renderer?

1

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

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

Я не могу придумать, почему это не рендеринг, или почему это не будет отображаться. Или, может быть, это рендеринг, но он просто переопределяется холстом?

Я знаю, что кажется странным пытаться использовать оба метода. Поскольку мое приложение в прямом эфире, я предпочел бы осуществить перенос рендеринга на GL в своем собственном темпе, так что мне не понадобится месяц, чтобы получить следующее обновление.

Так кто-нибудь когда-либо пытался это сделать? Запустить средство визуализации Glover поверх холста?

Теги:
canvas
opengl-es
rendering

3 ответа

1
Лучший ответ

Вы не можете использовать OpenGL и Canvas для рендеринга на одном SurfaceView. Однако вы можете поместить еще один вид поверх SurfaceView для достижения желаемого эффекта.

  • 1
    Хорошо, это звучит как хороший способ начать. Вопрос, как эта концепция работает с методом setContentView ()?
2

Здесь мой пример кода при добавлении холста над представлением OpenGL, благодаря @Audrius Butkevicius!

mGLView = new MyOpenGLSurfaceView;
// SET OpenGL View
setContentView(myOpenGLView);


mCanvasOverlayView = new View(context)
mOverlayViewParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// ADD Canvas view overlay
addContentView(mCanvasOverlayView, mOverlayViewParams );
2

Попробуйте следующее:

addContentView(SurfaceView);
addContentView(GLSurfaceView);

или создать относительный макет с обоими представлениями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню