Android/OpenGL ES

1) OpenGL ES란?

show2888 2021. 9. 27. 18:06
반응형

Android에서는 OpenGL ES API가 포함된 고성능 2D 및 3D 그래픽을 지원합니다.

OpenGL은 3D 크로스 플랫폼 그래픽 API입니다.

OpenGL의 사용 이유)

게임과 같은 높은 수준의 그래픽을 빠르게(30~60fps) 화면에 그리기 위해서는 일반적인 안드로이드의 위젯으로는 구현하는데 한계가 있습니다. 그렇기 때문에 빠른속도의 반복된 화면 출력이 필요한 경우에는OpenGL을 이용한 빠르게 화면 그리는 작업을 해야하며, GDI쓰레드가 아닌 별도의 쓰레드 사용이 반드시 필요합니다. 

 

GDI : Graphic Device Interface의 약자로 그래픽을 기반으로 하는 사용자 인터페이스

OpenGL 지원모델)

1.X이후 버전에서는 큰 차이가 있다. 2. X 이전(1.X) 에는 Fixed Function Pipeline (Immediate Mode)라고 하여서 고정된 연산 방법을 사용하였다. 결과적으로 OpenGL을 배우고 사용하기 쉬운 편이었다고 한다. 하지만, 2.0 이상이 되면서 Core Profile Mode라고 하여 GPU가 해야 하는 연산을 프로그래머가 작성하는 방법을 사용한다. 그 결과 새로 배우기는 어렵지만, GPU를 더 효율적으로 사용할 수 있다.
  • OpenGL ES 1.0 및 1.1 - 이 API 사양은 Android 1.0 이상에서 지원됩니다.
  • OpenGL ES 2.0 - 이 API 사양은 Android 2.2(API 레벨 8) 이상에서 지원됩니다.
  • OpenGL ES 3.0 - 이 API 사양은 Android 4.3(API 레벨 18) 이상에서 지원됩니다.
  • OpenGL ES 3.1 - 이 API 사양은 Android 5.0(API 레벨 21) 이상에서 지원됩니다.

    * Manifest 설정)
    <!-- 시스템에게 OpenGL ES 2.0이 필요하다는 것을 알려줍니다. -->
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
    
    <!-- 시스템에게 OpenGL ES 3.0이 필요하다는 것을 알려줍니다. -->
    <uses-feature android:glEsVersion="0x00030000" android:required="true" />
    
    <!-- 시스템에게 OpenGL ES 3.1이 필요하다는 것을 알려줍니다. -->
    <uses-feature android:glEsVersion="0x00030001" android:required="true" />​
     이중 필요한 버전만 하나 사용

Android 프레임워크 API를 통한 OpenGL)

안드로이드 프레임워크에는 OpenGL ES API로 그래픽을 만들고 조작할 수 있는 두 가지 기본 클래스인 GLSurfaceView 와 GLSurfaceView.Renderer가 있습니다.

 

GLSurfaceView)

SurfaceView와 유사하며 OpenGL API 호출을 통해 조작하고 그릴수있는 뷰입니다.
GLSurfaceView를 인스턴스하고 Renderer를 추가하여 이 클래스를 사용할 수 있습니다. 또한 터치 이벤트로 캡쳐기능을 구현하려면

이 클래스를 확장하여 터치리스너를 구현해야합니다.

GLSurfaceView.Renderer)

GLSurfaceView에 그래픽을 그리기위해서 필요한 메소드를 가지고있는 인터페이스입니다. 이 인터페이스를 구현하고있는 클래스를 제공해 GLSurfaceView.setRenderer()를 사용하여 GLSurfaceView 인스턴스에 연결해야 합니다. 

 

GLSurfaceView.Renderer 인터페이스를 사용하려면 다음 메서드를 구현해야 합니다.

  • onSurfaceCreated(): GLSurfaceView를 만들 때 시스템에서 이 메서드를 한 번 호출합니다. 이 메서드를 사용하여 OpenGL 환경 매개변수 설정 또는 OpenGL 그래픽 객체 초기화와 같이 한 번만 실행해야 하는 작업을 완료합니다. 
  • onDrawFrame(): 시스템에서 GLSurfaceView를 다시 그릴 때마다 이 메서드를 호출합니다. 이 메서드를 그래픽 객체 그리기(및 다시 그리기)의 기본 실행 지점으로 사용합니다.
  • onSurfaceChanged(): GLSurfaceView의 크기 변경 또는 기기 화면의 방향 변경을 비롯하여 GLSurfaceView 도형이 변경될 때 시스템에서 이 메서드를 호출합니다. 예를 들어 기기가 세로 모드에서 가로 모드로 방향을 변경하면 시스템에서 이 메서드를 호출합니다. 이 메서드를 사용하여 GLSurfaceView 컨테이너의 변경사항에 맞게 대응합니다.

 

 

 

출처 : https://developer.android.com/guide/topics/graphics/opengl?hl=ko

반응형

'Android > OpenGL ES' 카테고리의 다른 글

0) Android Graphics architecture  (0) 2021.09.28
2) OpenGL ES로 삼각형 그리기  (0) 2021.09.28