momodudu.zip

#1 EGL 개념 / EGL Class를 입맛대로 만들어보기 본문

Graphics/OpenGL

#1 EGL 개념 / EGL Class를 입맛대로 만들어보기

ally10 2019. 8. 16. 14:56

 

학부시절에는 그래픽스의 "그"자도 만져본적이 없었는데, 어떻게 하다보니 첫 회사 첫 팀(이자 마지막)이 그래픽스 관련 팀이었다. 원래 개발자 신입은 다 그런것 같다. 내가 학부생때 그렸던 개발과는 전혀 다른일을 하는 경우가 많은것 같다. 그러다가 맞으면 계속 그 길을 가는거고 아님 아닌거고.. 무튼 그래서 처음 팀 내부 코드를 받고는... 진짜 멘붕이었다. EGL이 뭐냐고요....

 

사실 아직도 잘 모른다..; 아무도 안가르쳐줬거든요... 물어봐도 자기가 짠거 아니라고 안알려줬거든요.. 솔직히 내가 먼저 알아서 공부를 했었어야 하는게 맞다 (...)

항상 그렇다. 시작할때 애초에 잘 해뒀으면 더 좋았을텐데.. 늘 눈앞에 있는 일에 급급해서 대충 이거구나. 하고 짚어넘어가는게 제일 큰 문제다.. 무튼, 그래서 샘플 코드도 빌드시켰겠다, EGL을 깊게 파보면서 추후에 공부를 좀 편하게 하기 위해 클래스를 입맛대로 만들어보려고 한다.

 

EGL이란 뭐지?

우리의 위키피디아에서 따온대로 읊어보자면, 크로노스 렌더링 API(OpenGL, OpenGL ES)와 기본 네이티브 플랫폼 윈도우 시스템간의 인터페이스이다. 라고 정의되어있다.

사실 읽어도 잘 모르겠다. 회사다니면서 어렴풋이 느꼈던 정도는 Surface는 그림판, Context는 GL함수가 쌓여있는 공간? 정도이다.

 

이 개념은 사실 좀 와닿지도 않았고, 회사를 다니면서 짜보기도 했지만 명확하게 뭐다! 라고 설명하기가 힘들었다.

구글링 하던 와중에, EGL에 대해서 아주 clear하게 설명해준 브런치 있어서 링크를 첨부한당.

https://brunch.co.kr/@sixzone11/14

 

용어 1. EGL

렌더링 API를 이용하기 위한 기반 | 3D를 제대로 코딩이나 해본 것은 그래픽스 과목을 재수강하며 과제를 치열하게 할 때였다. 초수강 때는 워낙 다른 전공들을 많이 듣고 있던 탓에 그래픽스 자체에 신경을 많이 못 쓰기도 했지만, 내 프로그래밍에 대한 자만심이 큰 탓에 제대로 해내지도 못하고 망쳐버렸었다. '3D라고 뭐 다르겠어? 그냥 코딩하면 되겠지.' 절대 그렇지 않다는 것을 재수강할 때 절

brunch.co.kr

Surface 및 Context에 대해서 아주 간단명료하게 설명이 잘 되어있다.

 

 

무튼, 샘플 코드의 경우에는 단편적인 프로그래밍만 할수있게 되어있어서,

EGL자체를 객체화해서 관리가 용이하고, 확장성을 위해 코드를 짜보는게 이번 포스팅의 목표다.

샘플코드를 기반으로 짜보긴 했는데 .. 추후에 고쳐야할 부분이 있으면 계속 고쳐나갈 예정이다.

 

 

기본적으로 설계는 이렇다.

 

1. MFC 기반으로 CView class를 상속받은 EGL View class 설계

- 즉, MFC와 OpenGL ES를 연동시킨다.

2. EGL VIew class 내부 멤버 변수로 따로 설계한 EGL 객체를 관리한다.

- EGL 객체는 Surface, Context 등을 모두 관리함.

 

일단 단일 thread로 돌릴 예정이라 간단하게만 설계를 해보았다. 좀 구색이 갖추어지면 설계도도 올릴 예정.

근데... 다 짜놓긴 했는데, egl 링킹에러가 난다.. 이거 왜이러지..

 

어제부터 계속 붙잡고있는데 해결이 안된다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

+) 추가

링킹에러 수정했다!!!!!!! 아마 lib 링킹이 잘못되서 그런것 같은데, 나는 그냥 PowerSDK내부 Win32전용 lib을 그냥 인클루드 했는데, 이걸 쓰려면 헤더파일을 EGL/gles32.h 같은걸 include하면 안되는것 같다.

EGL/gles32.h 이런 헤더파일의 구현부는 아마도 libGLES 같은곳에 있는것 같은데, 나는 이걸 쓰지 않았다.

 

그래서 그냥 

위와 같은 식으로 인클루드 하니까 된다.

 

 

추가로, 저렇게 바꾸고 나서 pvr lib내부의 OutputDebugStringW 함수 내에서 C2664 Error가 났는데, 이 에러는

프로젝트 속성 - 고급 - 문자집합에서 유니코드 웅앵웅 되어있는걸 사용안함으로 바꾸니까 해결됐다.

 

아싸!