Объединение Canvas и OpenGL ES Renderer? - PullRequest
2 голосов
/ 12 декабря 2011

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 11 января 2012

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

addContentView(SurfaceView);
addContentView(GLSurfaceView);

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

2 голосов
/ 15 октября 2013

Вот мой пример кода при добавлении canvas поверх представления 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 );
1 голос
/ 12 декабря 2011

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

...