리눅스 Wayland에서 opengl을 조금 쓰고있는데 생각대로 동작이 안하는 부분이 있어요..


우선 Wayland는 EGL을 지원하고 몇가지 플랫폼 종속적인 API들을 살펴보자면


- wl_egl_window_create(): EGL 윈도우를 만듭니다. width, height를 인자로 받습니다.

- wl_egl_window_resize(): 윈도우 리사이징 하는데 쓰는 것 같은데 문서화가 안되어있어요.

- wl_egl_window_get_attached_size(): wayland surface에 attached 된 사이즈를 가져오는 함수.

- wl_egl_window_destroy(): 말그대로..


이정도입니다.


관련 코드는





이렇게 되어있고, 문제는 윈도우 리사이징 하는데서 발생하는 것 같습니다 ㅠㅠ


SurfaceImpl 클래스는 대략 wayland surface를 래핑한 클래스입니다




이정도가 OpenGL 관련한 코드 전부입니다. 나머지는 Wayland 관련 코드들이에요..


클래스가 생성될 때 init_egl 함수로 초기화를 해줍니다.


setSize 메소드는 웨이랜드에서 resizing 이벤트 받으면 호출할 때 쓰이구요. update 메소드에서 texture_function 함수를 호출합니다.


EGLSurface 객체가 사이즈 정보를 가지고 있는지 잘 모르겠어서 wl_egl_window_resize 호출한 다음에 기존 EGLSurface를 파괴하고 새로 생성해줬어요.


Image 객체는 ARGB 32비트 데이터를 담고있는 클래스입니다.


여러가지로 시도해봤는데 윈도우 리사이징 할 때 이상하게 동작합니다. 확 커졌다가 확 작아졌다가 하거나 아예 크기가 바뀌지 않는다거나 하는 식으로요.


OpenGL은 아예 모르고 그나마 있는 셰이더나 텍스처 함수는 인터넷에서 여기저기 예제 짜깁기 한거에요ㅠ


질문할 데가 여기밖에 없어서 질문글을 올려봅니다.. 여기 OpenGL 고수분들이 많은거 같더라구요.


코드 이상하거나 이해 안가시는 부분 있으면 지적 많이 해주세요..