2011-04-26 7 views
1

OpenGL 함수 만 사용하여 백 버퍼의 크기를 픽셀 단위로 얻는 표준 방법이 있습니까? 가장 가까운 것은 뷰포트의 크기를 쿼리하는 것이지만 백 버퍼 크기와 항상 일치하는지 의심 스럽습니다. 예를 들어 glReadPixels에 제공 할 수있는 최대 너비 및 높이 값을 찾고 있습니다.OpenGL에서 백 버퍼 크기를 얻는 방법은 무엇입니까?

+0

OpenGL 3.x/4.x에서 또는 ARB_framebuffer_object가 지원되는 경우 [glGetRenderbufferParameter] (http://www.opengl.org/sdk/docs/man3/xhtml/glGetRenderbufferParameter)를 사용하여 쿼리 할 수 ​​있어야합니다. xml). 그렇지 않으면 창 크기를 가져 오는 것 외에 다른 옵션도 없습니다. – Damon

+0

@Damon Smart,하지만 난 그냥 시도하고 renderbuffer 바인딩 된 경우 renderbuffer 매개 변수를 얻으려고하면 GL_INVALID_OPERATION이 발생합니다. – Trillian

답변

1

backbuffer는 윈도우 프레임 버퍼 평면 세트 (구성에 따라 앞면 색, 뒷면 색, 깊이, 스텐실 등)의 일부입니다. 그들 모두가 함께 있기 때문에 그들은 모두 같은 차원을 가지고 있습니다. 표준 프레임 버퍼가 가시적 윈도우에 연결되기 때문에 접근 가능한 부분은 윈도우 크기에 의해 결정됩니다.

그러나주의해야 할 중요한 사항 중 하나가 있습니다. 윈도우의 프레임 버퍼는 화면 프레임 버퍼의 슬라이스 일뿐입니다. 윈도우가 이동하거나 크기가 조정 된 경우에만 스크린 프레임 버퍼의 슬라이스의 오프셋과 보폭이 변경됩니다. 또한, 윈도우가 (부분적으로) 다른 윈도우에 의해 가려진 경우, 윈도우의 폐색 된 부분이 프레임 버퍼에 기여하지 않는다는 것을 의미합니다. 부분적으로 다른 창에 의해 덮여 프레임 버퍼에서 읽기, 거기에 정의되지 않은 내용 또는 occluding 창의 내용으로 끝날 수 있습니다.

최신 운영 체제에서는 창을 합성 할 수없는 오프 스크린 영역으로 렌더링되어 합성 창 관리를 지원합니다.

+0

답변 해 주셔서 감사합니다. 어떤 환경에서는 렌더링 윈도우를위한 전용 후방 버퍼가 아니라 "OS 데스크탑 백 버퍼"의 예약 된 공간 만 있다고합니다. OpenGL에 glReadPixels가 있다는 사실은 백 버퍼에 렌더링 된 이미지가 창을 닫더라도 항상 읽을 수 있어야한다는 것을 의미하지 않습니까? – Trillian

+0

@ Trillian : 아니요, glReadPixels는 읽기 전용으로 선택된 프레임 버퍼의 현재 내용을 읽습니다. 프레임 버퍼는 윈도우의 속성이므로 glReadPixels을 사용하여 읽은 데이터에 윈도우 내용에 대한 손상이 표시됩니다. 그런 점에서 glReadPixels는 BitBlt (...)와 크게 다르지 않습니다. 괜찮은 OS 또는 그래픽 시스템은 컨텐이 손상되어 다시 그려야하는 경우 메시지를 창에 보냅니다. 렌더링 된 내용이 손상되지 않도록하려면 PBuffer 또는 Framebuffer 객체를 사용하십시오. – datenwolf

관련 문제