EGL 학습

0. 개념:
1. OpenGL ES:
OpenGL ES는 메모리가 부족한 시스템에 대해 매우 유용하게 정의된 OpenGL 서브셋입니다.
 
2. WGL,GLX,AGL,EGL:
OpenGL을 사용하려면 실제 창 시스템과 연결해야 합니다.윈도에서는 WGL, Linux에서는 GLX, Apple OS에서는 AGL 등 플랫폼에 따라 다른 메커니즘이 있습니다.
EGL은 OpenGL ES가 내장형 플랫폼(WGL, GLX, AGL)에 있는 등가물이다.
 
EGL은 OS가 윈도우 시스템을 제공한다고 가정하지만 EGL은 플랫폼과 관계없이 특정한 윈도우 시스템에 국한되지 않으며 로컬 윈도우 시스템에 사용되는 모든 곳은 차단 포인터로 처리된다.(Sam은 이것이 이식하기 쉬운 관건이라고 생각한다)
 
 
1. EGL 사용:
OpenGL ES는 플랫폼과 무관한 그래픽 라이브러리로서 위에서 말한 바와 같이 작동하기 전에 실제 창 시스템과 연결되어야 한다.이 부분은 EGL에 의존한다.다음은 그들이 어떻게 일을 시작하는지에 대해 구체적으로 이야기한다.
 
OpenGL ES의 초기화 과정은 다음과 같습니다.

Display → Config → Surface ↑ Context ↑ Application → OpenGL Command

 
 
1.1. 디스플레이 가져오기: 디스플레이 대표 디스플레이, 일부 시스템에 여러 개의 디스플레이가 있을 수도 있고 여러 개의 디스플레이가 있을 수도 있습니다.(Sam은 이 관점이 좀 억지스럽다고 생각했고 Sam은 Display를 그래픽 버퍼로 이해하는 것이 적당하다고 생각했다.)Display에서 EGLboolean eglGetDisplay(Native Display dpy)를 호출하려면 일반적으로 EGLDEFAULT_DISPLAY .이 매개 변수는 실제 플랫폼 구현과 관련된 것으로 X-Window 아래에서는 XDisplay ID, MS Window 아래에서는 Window DC가 사용됩니다.EGL(Boardcom)은 NativeDisplayType입니다.
Sam: 그래서 서로 다른 플랫폼을 개발할 때 첫 번째로 확인해야 할 것은 이 플랫폼의 디스플레이 개념은 실현이 무엇입니까?
 
1.2. egl 초기화: EGLboolean eglInitialize(EGLdisplay dpy, EGLint *major, EGLint *minor)를 호출합니다. 이 함수는 내부 초기화 작업을 하고 EGL 버전 번호(major.minor)로 전송됩니다.
 
1.3. Config 선택:
Config은 FrameBuffer의 매개 변수로 Windows에서는 PixelFormat, X-Window에서는 Visual을 말합니다.EGL(Boardcom) 아래에서도 PixelFormat를 가리킵니다.일반적
EGLboolean eglChooseConfig(EGLDisplay dpy, const EGLint * attr_list, EGLConfig * config, EGLint config_size, EGLint *num_config);
매개 변수 1:dpy:display.
매개변수 2:attrlist: 이 인자를 사용해서 맞는 config를 선택하십시오.
매개 변수 3:config: 맞는 config를 여기에 놓으십시오.
매개 변수 4: 일치하는 config의 최대 개수를 선택하십시오.
매개 변수 5: 실제로 선택한 config의 개수입니다.
여기서 attrlist는 EGLNONE에서 끝나는 매개 변수 그룹은 보통 id,value로 순서대로 저장되며 개별 표지성의 속성은 id만 있고 value는 없습니다.
 
또 다른 방법은 다음과 같다.
EGLboolean eglGetConfigs(EGLdisplay dpy, EGLconfig * config, EGLint config size, EGLint *num config)를 사용하여 모든 config를 가져옵니다.
매개 변수 1:dpy,display.
매개변수 2: 출력 매개변수로 config가 배치됩니다.
매개변수 3: configsize: config의 개수를 가져옵니다.
매개변수 4:numconfig: 매개 변수 2가 비어 있으면 모든 config 개수를 되돌려줍니다.인자 2가 비어 있지 않을 때 config를 읽는 개수를 되돌려줍니다.
 
이 두 함수 모두 config 보다 많지 않게 되돌아옵니다size 개의 Config, 결과는 config[]에 저장되고 시스템의 총 Config 개수는num 에 저장됩니다.config 에 있습니다.eglGetConfig () 가운데 두 개의 인자가 0이면 시스템이 지원하는 Config 총 개수를 조회할 수 있습니다.Config에는 많은 Attribute가 있습니다. 이 Attribute는 FrameBuffer의 형식과 능력을 결정합니다. eglGetConfigAttrib () 를 통해 읽지만 수정할 수 없습니다.
 
1.4. 구조 Surface: Surface는 사실상 Frame Buffer입니다. EGL Surface egl Create Window Surface(EGLdisplay dpy, EGLconfig confg, Native Window win, EGLint *cfg attr)를 통해 실제 표시할 수 있는 Surface를 만듭니다.시스템은 보통 다른 두 종류의 Surface를 지원합니다: PixmapSurface와 PBufferSurface. 이 두 가지는 모두 표시할 수 있는 Surface가 아닙니다. PixmapSurface는 시스템 메모리에 저장된 비트맵이고 PBuffer는 메모리에 저장된 프레임입니다.Surface에도 attribute가 있는데, 기본적으로 모두 고명으로 생각할 수 있다. EGLHEIGHT EGL_WIDTH EGL_LARGEST_PBUFFER EGL_TEXTURE_FORMAT EGL_TEXTURE_TARGET EGL_MIPMAP_TEXTURE EGL_MIPMAP_LEVEL, eglSurfaceAttrib () 설정, eglQuerySurface () 를 통해 읽습니다.
 
1.5. Context 생성: OpenGL의pipeline은 프로그램의 측면에서 보면 하나의 상태기입니다. 현재의 색깔, 무늬 좌표, 변환 매트릭스, 현란한 염색 모드 등 많은 상태가 있는데 이런 상태는 프로그램이 제출한 정점 좌표 등 도원에 작용하여 프레임 버퍼 안의 픽셀을 형성합니다.OpenGL의 프로그래밍 인터페이스에서 Context는 이 상태기를 대표한다. 프로그램의 주요 업무는 바로 Context에 도원을 제공하고 상태를 설정하는 것이다. 간혹 Context에서 정보를 얻는 것이다.EGLcontext eglCreate Context(EGLdisplay dpy, EGLSurface write, EGLSurface read, EGLcontext * share list)로 Context를 만듭니다.
 
1.6. 드로잉: 응용 프로그램은 OpenGL API를 통해 그려지며, 프레임이 완성되면 eglSwapBuffers(EGLdisplay dpy, EGLcontext ctx)를 호출하여 표시합니다. 
 
 
Boardcom의 EGL 사용 차이점:

좋은 웹페이지 즐겨찾기