OpenGL ES 2.0 Application 필요한 라이브러리 : libGLESv2, libEGL

OpenGL ES 3D graphics 처리하는 OpenGL ES 함수들과 시스템 종속적인 부분을 처리하는 EGL 시스템 함수로 구성된다.

 

EGL : Native Platform Interface , 특정 플랫폼 시스템과 OpenGL ES API 사이의 glue interface layer 함수를 정의한다.

, 특정 윈도우 시스템과의 인터페이스를 제공하고, 디스플레이 연결을 위해 EGLDisplay 제공한다.

 

#include <EGL/egl.h>

#include <GLES2/gl2.h>

 

 

EGLDisplay eglDisplay = 0;

EGLConfig eglConfig = 0;

EGLSurface eglSurface = 0;

EGLContext eglContext = 0;

EGLNativeWindowType eglWindow = 0;

 

EGLConfig EGL 의해 생성되는 평면 대한 정보를 포함. 평면에 사용할 색의 구성과 수에 관련된 깊이 버퍼, 스텐실 버퍼, 평면 타입 정보 포함.

 

EGLSurface eglCreateWindowSurface() 통해 만들지는 윈도우를 가리킨다.

 

EGLContext 연산을 위해 필요한 내용들을 포함하는 OpenGL ES 2.0 대한 데이터 문맥.  정점 데이터 배열이나 vertex fragment shader 대한 참조를 포함할 있다.

 

EGLNativeWindowType EGLSurface 함께 윈도우를 만들 사용되는 윈도우 핸들 가리킨다.

 

Emulator windowing 방식이 Windows API 따른다면 HWND 얻어와 eglWindow 연결한다.

 

hWnd = CreateWindow(WINDOW_CLASS, _T("Hello EGL"), WS_VISIBLE | WS_SYSMENU, 0, 0, nWidth, nHeight, NULL, NULL, hInstance, NULL);

eglWidow = hWnd;

hDC = GetDC(hWnd);

eglDisplay = eglGetDisplay(hDC);   // eglDisplay hDC Display 된다.

]

 

이제, EGLConfig 속성을 정한다.

 

const EGLint pi32ConfigAttribs[] =

{

EGL_LEVEL, 0,

EGL_SURFACE_TYPE, EGL_WINDOW_BIT,

EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,

EGL_NATIVE_RENDERABLE, EGL_FALSE,

EGL_DEPTH_SIZE, EGL_DONT_CARE,

EGL_NONE

};

 

Int iConfigs;

eglChooseConfig(eglDisplay, pi32ConfigAttribs, &eglConfig, &iConfigs);

 

pi32ConfigAttribs : 속성 list

 

 - EGLConfig 속성들

   . EGL_LEVEL : frame buffer level, default : 0

   . EGL_SURFACE_TYPE : 지원되는 EGL 평면의 타입.

   . EGL_RENDERABLE_TYPE : config 지원되는 렌더링 인터페이스.

   . EGL_DEPTH_SIZE : depth buffer 비트수. EGL_DONT_CARE (-1) - 사용하지 않음.

 

eglChooseConfig

 :  pi32CofnigAttrib 속성과 일치하는 EGLConfig 선택한다.

  maxReturnConfigs 1, numConig iConfigs 변수로 확인한다. (예외처리에 사용)

 

 

eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, eglWindow, NULL);

EGLint ai32ContextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };

eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, ai32ContextAttribs);

eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);

 

 

eglCreateWindowSurface

 : 윈도우 생성을 위한 함수. EGLSurface 형태의 윈도우를 반환. 반환값을 통해 에러 원인을 측정할 있다. 윈도우를 내부 렌더링 평면이라 여기서 렌더링 평면 생성된 것이다.

   마지막 NULL 인자는 속성 목록. 하지만 위의 Attribs 변수와는 다른 단일 값이 들어감. (EGL_RENDER_BUFFER), 보통 OpenVG 다른 렌더러와의 변행을 생각하여 전방 버퍼 후방 버퍼 등렌더링 버퍼를 지정하는데 사용된다. 현재는 기본값.

 

 

eglCreateContext

 : 렌더링 문맥 EGLContext 생성할 사용. 역시 디스플레이 연결을 해야한다.

   세번째 NULL 인자는 Shader Program Texture Map 들과 같은 특정 데이터 타입을

   공유하기 위한 shareContext EGLContext type 이다.

   마지막이 속성은 단일 값으로 EGL_CONTEXT_CLIENT_VERSION 1.x, 2.x등의 버전정보.

   성공시, 렌더링 문맥 (EGLContext) 핸들을 반환한다.

   반환값으로 에러코드를 수도 있다.

 

 

이제, eglMakeCurrent EGLContext 렌더링 평면 EGLSurface 연결한다.

 

 

EGL 여기까지.  윈도우의 생성과 문맥 형성 .

'EGL' 카테고리의 다른 글

OpenGLES-Samples  (0) 2019.04.16
OpenGL ES EGL Spec&APIs  (0) 2019.04.16
Android EGL  (0) 2019.04.16

+ Recent posts