본문 바로가기

WGL

Create OpenGL 3.x RenderingContext with WGL WGL을 사용하여 OpenGL 3.x 렌더링 컨텍스트(RC)를 얻어내는 과정은, 이전의 RC를 얻어내는 과정과 크게 다르지 않다. 간단히 설명하면, 원하는 RC를 얻어내기 전에, 레거시(legacy) RC를 생성하고, 이를 바탕으로 원하는 속성을 기술한 구조체와 함께 wglCreateContextAttribsARB를 호출하는 것이 전부이다. 사실, OpenGL 3.0 이상의 구현에서 wglCreateContext는 wglCreateContextAttribsARB에서 Attribs에 해당하는 인자 값을 널로 호출하는 것이다. 대략적인 코드는 다음과 같다. // get default RenderingContext HDC hDC = GetDC(hWnd); HGLRC hRC = wglCreateContext(h.. 더보기
CS_OWNDC with WGL (OpenGL Extentions for Windows) OpenGL은 대단히 잘 구성되어 있는 크로스 플랫폼 그래픽 라이브러리이지만, 확장 기능(OpenGL Extentions)과 연관된 플랫폼 이식 작업은 그렇게 쉬운 편은 아니다. OpenGL은 플랫폼 의존적인 부분을 표준으로 포함하고 있지 않으며, 윈도우를 생성하는 작업과 같은 하드웨어 의존적인 구현을 여기에 의존하고 있기 때문이다. OpenGL 코드를 다른 플랫폼으로 이식할 때, 렌더링 코드는 수정할 필요가 거의 없지만, 플랫폼 의존적인 벤더 확장 부분을 수정하는 것은 생각보다 잔손이 많이 가는 작업이다. 그 중에서도, 특히 WGL(OpenGL Extentions for Windows, 위글)은 GDI DC(DeviceContext) 관리에 주의해야 할 부분이 있다. 보통, Win32 윈도우를 생성할 .. 더보기
Using OpenGL 3.x Implementations OpenGL 3.2 스펙은 2009.8.3에 발표되었다. 당연히, 각 그래픽 하드웨어 벤더들은 OpenGL 3.2 extention 형태로 제공하기 시작했다. NVIDIA의 경우, ForceWare 190.18 이상에서 OpenGL 3.1 / 3.2 구현을 제공하며, ATI는 Catalyst 9.2 이상에서 해당 OpenGL 구현을 제공한다. OpenGL을 사용하여 프로그래밍을 하고자 할 때, 가장 먼저 해야 할 일은 원하는 OpenGL 스펙을 만족하는 라이브러리를 찾는 것이다. OpenGL 1.4 버전은 대부분의 플랫폼에서 지원되며, 2.0 이상의 스펙을 원할 때는 Mesa3D와 같은 공개 구현물을 사용하면 된다. 그러나, 3.0 이상을 완전하게 구현하는 정적 라이브러리를 구하기 힘든데, 해당 라이브러.. 더보기