2012-06-14 3 views
10

Может ли кто-нибудь сказать мне, в чем основное отличие SurfaceView от GLSurfaceView. Когда использовать SurfaceView и когда использовать GLSurfaceView?Разница между SurfaceView и GLSurfaceView в Android

Я прочитал некоторые уже ответившие на вопросы в stackoverflow, но не удовлетворил мои запросы.

Любая помощь будет оценена по достоинству.

+0

посмотрите на эту ссылку: http://pierrchen.blogspot.jp/2014/04/android-ui-internal-glsurfaceview.html – pierrotlefou

ответ

24

A GLSurfaceView - SurfaceView, который вы можете визуализировать с помощью OpenGL. Выбор между ними прост:

  • Если вы знакомы с OpenGL и нуждаетесь в том, что он предоставляет, используйте GLSurfaceView.
  • В противном случае используйте SurfaceView.

OpenGL является низкоуровневым. Если вы еще не знакомы с этим, это обязательство учиться. Если вам нужен только 2D-чертеж, SurfaceView использует высокоуровневый, достаточно высокопроизводительный Canvas. С этим очень легко работать.

Если у вас нет веских причин использовать GLSurfaceView, вы должны использовать обычный SurfaceView. Я бы предположил, что если вы еще не знаете, что вам нужен GL, тогда вы, вероятно, этого не сделаете.

+0

Спасибо за ответ. У меня есть один вопрос ... для камеры, какой из них будет лучше? – AndroDev

+2

@ АндроДев. Вы должны быть более конкретными. Хотя вы делаете упор на то, что вы имеете в виду: если вы хотите показать предварительный просмотр живых изображений с камеры, вам потребуется только «SurfaceView»: http://developer.android.com/guide/topics/media/camera.html # custom-camera –

+1

Обратите внимание, что с OpenGL можно использовать 'SurfaceView'. Сложнее сделать это с помощью GLSurfaceView. См. Документ [Graphics architecture document] (http://source.android.com/devices/graphics/architecture.html#glsurfaceview). – Lii

5

SurfaceView

AFAIK Canvas прост в реализации и эффективной в 2D рисования, но 3D рисунок не поддерживаются на нем

GLSurfaceView

Если вы хотите создать несколько 3D-игры, то вы сошлитесь с GLSurfaceView и OGLES

Какой у меня опыт, если вы просто хотите сделать 2D processi Затем выберите Canvas, потому что его проще реализовать и эффективно сравнить с GLSurfaceView.

+0

В случае из 2D-обработка, почему Canvas эффективен? – AndroDev

+0

Обратите внимание, что с OpenGL можно использовать «SurfaceView». Сложнее сделать это с помощью GLSurfaceView. См. Документ [Graphics architecture document] (http://source.android.com/devices/graphics/architecture.html#glsurfaceview). – Lii

6

GLSurfaceView является основным строительным блоком для 3D-приложений, поскольку View предназначен для 2D-приложений. Он широко используется не только в 3D-играх, но и в мультимедийных приложениях, таких как камера, для создания специального эффекта предварительного просмотра.

GLSurfaceView расширяет SurfaceView и дополнительно владеет потоком рендеринга и объектом визуализации, установленным клиентом. Поток рендеринга продолжает работать, постоянно или по требованию, и делегирует объекту рендеринга рисование кадра с использованием OpenGL API. Для SurfaceView и GLSurfaceView рендеринг выполняется в отдельном потоке, отличном от основного потока. Разница заключается в том, что SurfaceView поток рендеринга создается клиентом, а с GLSurfaceView он создается системой. Более того, GLSurfaceView будет внутренне обрабатывать синхронизацию между основным потоком и потоком рендеринга.

Более подробную информацию, проверить this и this

Смежные вопросы