본문 바로가기
Programming

SetPixelFormat

by leanu 2008. 1. 2.

<SetPixelFormat>


SetPixelFormat 함수는 지정된 디바이스 컨텍스트의 픽셀 포맷을 iPixelFormat 인덱스가 가르키는 포맷으로 설정합니다.


BOOL SetPixelFormat(

  HDC hdc;           //픽셀 포맷을 설정하려는 디바이스 컨텍스트
  int iPixelFormat;   //픽셀 포맷 인덱스(1기준)
 
CONST PIXELFORMATDESCRIPTOR* ppfd;
                       //논리적인 픽셀 포맷 사양에 대한 포인터

 );


[파라미터]

hdc

  픽셀 포맷을 설정하려는 디바이스 컨텍스트를 지정.

iPixelFormat

  설정하려는 픽셀 포맷을 가리키는 인덱스.
  디바이스 컨텍스트가 지원하는 여러 픽셀 포맷이 1-기준의 인덱스로 지정됩니다.

ppfd

  논리적인 픽셀 포맷 사양을 포함하고 있는 PIXELFORMATDESCRIPTOR 스트럭쳐의 포인터.  시스템의 메타파일 컴포넌트는 이 스트럭쳐를 이용하여 논리적인 픽셀 포맷 사양을 기록합니다.  이 스트럭쳐는 SetPixelFormat 함수의 동작 외에는 아무 효과가 없습니다.


[반환 값]

함수가 성공하면, TRUE를 반환합니다.

함수가 실패하면, FALSE를 반환합니다.
확장 오류 정보를 얻으려면,
GetLastError를 호출합니다.

[주의]

hdc가 윈도우를 참조하면, SetPIxelFormat 함수 호출은 그 윈도우의 픽셀 포맷도 변경합니다. 두 번 이상 윈도우의 픽셀 포맷을 설정하는 것은 윈도우 매니저와 멀티쓰레드 응용프로그램에 복잡함을 유발시킬 수 있으므로, 허용되지 않습니다. 어플리케이션은 한 윈도우의 픽셀 포맷을 한번만 설정할 수 있습니다. 한 윈도우의 픽셀 포맷이 설정되면, 이를 변경할 수 없습니다.

wglCreateContext 함수를 호출하기 전에 디바이스 컨텍스트 내의 픽셀 포맷을 선택해야 합니다.

wglCreateContext 함수는 디바이스 상에 그리기 위한 렌더링  컨텍스트를 디바이스 컨텍스트의 선택된 픽셀 포맷 내에 생성합니다. OpenGL 윈도우는 자체의 픽셀 포맷을 지닙니다. 이런 이유로, OpenGL 윈도우의 클라이언트 영역에서 나온 디바이스 컨텍스트를 만이 윈도우에 그릴 수 있게 됩니다. 결과적으로, OpenGL 윈도우는 WS_CLIPCHILDREN WS_CLIPSIBLINGS 스타일을 가지고 생성되어야 합니다. 그리고, 윈도우 클래스 속성은 CS_PARENTDC 스타일을 포함하지 않아야 합니다.

다음 코드는 SetPixelFormat의 사용예입니다.


PIXELFORMATDESCRIPTOR pfd = {

        sizeof(PIXELFORMATDESCRIPTOR), //pfd 크리
        1,                           //버젼 번호
        PFD_DRAW_TO_WINDOW |   //윈도우 지원
        PFD_SUPPORT_OPENGL |    //OpenGL 지원
        PFD_DOUBLEBUFFER,        //더블 버퍼링
        PFD_TYPE_RGBA,            //RGBA 타입
        24,                          //24-비트 컬러 깊이
        0, 0, 0, 0, 0, 0,              //컬러 비트 무시
        0,                            //알파 버퍼 없음
        0,                            //시프트 비트 무시
        0,                            //누적 버퍼 없음
        0, 0, 0, 0,                   //누적 비트 무시
        32,                          //32-비트 Z-버퍼  
        0,                           //스텐실 버퍼 없음
        0,                           //보조 버퍼 없음
        PFD_MAIN_PLANE,           //main 레이어
        0,                           //예약됨
        0, 0, 0                      //레이어 마스크 무시

);

HDC hdc;

int iPixelFormat;

//디바이스 컨텍스트에 대한 가능한 최상의 일치하는 픽셀 포맷을 얻음

iPixelFormat = ChoosePixelFormat(hdc, &pfd);

//디바이스 컨텍스트의 픽셀 포맷을 설정

SetPixelFormat(hdc, iPixelFormat, &pfd);


[정보]

헤더 파일: wingdi.h

라이브러리:opengl32.lib

'Programming' 카테고리의 다른 글

Writing Solid Code 요약  (0) 2008.01.02
[MFC] 콤보박스에 따른 다른 동작 수행(펌)  (3) 2008.01.02
10진수 단위별 용어  (0) 2008.01.02
popen()  (2) 2008.01.01
CRC Check  (0) 2008.01.01

댓글