프로그래밍/OpenGL

픽셀 포맷

이재만박사 2017. 3. 5. 05:04

윈도우즈의 디바이스 컨텍스트 개념은 2D 그래픽 응용 프로그램에 맞게 디자인


메모리 장치 컨텍스트를 만들지만, 이 경우 모델 역할을 해줄 장치 컨텍스트를 제시


창 인자에 NULL을 지정하더라도 데스크 톱의 장치 컨텍스트를 모델로 이용


3D 그래픽 렌더링의 대상이 되는 창이나 장치는 단순한 색상 깊이 이상의 다양한 특성을 필요하며 하드웨어 렌더링 장치 (3D 그래픽 카드)를 이용하는 경우는 더욱


OpenGL이 렌더링을 시작하기 전에 필요한 렌더링 설정에 따라 창을 설정


하드웨어와 소프트웨어 렌더링 중 어떤 방식을 사용하는가?


단일 버퍼와 이중 버퍼 방식 중 어떤 방식을 사용하는가?


깊이 버퍼가 필요한가?


스텐실 버퍼와 목표 알파, 누적 버퍼 등을 사용하는가?


일단 이러한 창의 인자를 지정한 뒤에는 나중에 변경 불가능


깊이 버퍼와 색상 버퍼만을 가진 창을 스텐실과 색상 버퍼만을 가진 창으로 바꾸고자 한다면, 첫 번째 창을 제거하고 새로운 특성을 가진 창을 다시 만들어야 함


일반적으로 창의 3D 특성은 창이 만들어진 직후에 한 번 설정


픽셀 포맷을 지정하기 위해 PIXELFORMATDESCRIPTOR 구조체를 제공


이들 멤버 값은 임의로 결정할 수 없으며 하나의 창에 대해서 제한된 종류의 픽셀 포맷만을 사용


픽셀 포맷값은 OpenGL 드라이버나 소프트웨어 렌더러에서 얻을 수 있음


* 픽셀 포맷의 선택과 설정


ChoosePixelFormat 제공


이 함수는 먼저 여러분이 원하는 3D 창의 속성들을 포함하는 픽셀 포맷 구조체를 만들고 이와 가장 유사한 픽셀 포맷을 찾아 이에 해당하는 인덱스를 리턴


이렇게 받은 픽셀 포맷을 두 번째 윈도우즈 함수 SetPixelFormat에 전달하여 픽셀 포맷을 지정


무엇보다 먼저 원하는 3D 창의 특성을 나타내도록 PIXELFORMATDESCRIPTOR 구조체를 채워야 함


ChoosePixelFormat 함수는 항상 바른 픽셀 포맷을 찾아 돌려주며 가능하면 하드웨어 가속 픽셀 포맷을 우선적으로 선택