두 가지 다른 점을 묻는 질문은 다소 혼란 스럽습니다.
여기에 쉬운 질문입니다 :
어떻게 (fboId)에만 프레임 버퍼 개체 ID 주어진 첫 번째 컬러 첨부 파일의 크기를 얻을 수 있나요?
간단합니다. 첨부 파일에 첨부 된 텍스처/렌더 버퍼를 가져오고, 밉맵 레벨 및 배열 레이어가 첨부 된 것을 얻은 다음 텍스처/렌더 버퍼에 얼마나 큰지 쿼리합니다.
처음 두 단계는 GL_COLOR_ATTACHMENT0
에 대해 with glGetFramebufferAttachmentParameter
(키워드 "첨부"참고)을 수행합니다. 을 쿼리하여 렌더 버퍼 또는 텍스처인지 여부를 확인합니다. 렌더 버퍼/텍스처 이름은 GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME
으로 얻을 수 있습니다.
개체가 렌더 버퍼 인 경우 렌더 버퍼를 바인드하고 glGetRenderbufferParameter
을 사용하여 렌더 버퍼 GL_RENDERBUFFER_WIDTH
및 GL_RENDERBUFFER_HEIGHT
을 페치 할 수 있습니다.
개체가 질감 인 경우 더 많은 작업을 수행해야합니다. 밉맵 레벨을 얻으려면 첨부 파일 매개 변수 GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL
을 쿼리해야합니다.
물론 지금은 바인딩 방법을 알아야합니다. 4.4 이전 또는 특정 확장자가없는 OpenGL 버전을 사용하는 경우이 작업은 복잡합니다. 보세요, 당신은 texture target type을 사용해야합니다. 어색하고 짜증나는 것처럼 보일지도 모르지만 텍스처 오브젝트 이름에서 목표를 결정하는 유일한 방법은 모든 것을 시도하는 것입니다. 각 표적을 관통하고 glGetError
를 검사하십시오. GL_INVALID_OPERATION
이 아닌 것이 반환되는 것은입니다.
GL 4.4 또는 ARB_multi_bind을 사용할 수있는 경우 대상을 지정하지 않아도 use glBindTextures
("s"에 유의하십시오) 만 가능합니다. 4.5 또는 ARB_direct_state_access 인 경우 텍스처를 전혀 바인딩 할 필요가 없습니다. DSA 스타일의 함수는 텍스처 타겟을 필요로하지 않으며 텍스처를 자연적인 내부 타겟에 바인드하는 glBindTextureUnit
을 제공합니다.
텍스처 바인딩 및 밉맵 레벨이되면 use glGetTexLevelParameter
을 입력하면 해당 레벨의 GL_TEXTURE_WIDTH
및 GL_TEXTURE_HEIGHT
을 쿼리 할 수 있습니다.
이제는 문제입니다. 어려운 문제는 제목에서 묻는 것입니다.
프레임 버퍼 객체의 크기 (너비, 높이)를 결정하고 싶습니다.
FBO의 렌더링 가능 영역의 크기는 하지 GL_COLOR_ATTACHMENT0
의 크기와 동일한이다. FBO의 렌더링 가능 영역은 FBO에 첨부 된 모든 이미지의 모든 크기의 교차 영역입니다.
이 FBO에 대한 특별한 지식이 없으면 FBO에 하나의 이미지 만 포함되거나 모든 이미지의 크기가 같다고 가정 할 수 없습니다 (FBO에 대한 특별한 지식이 있다면 매우 솔직하게 도에 얼마나 큰지에 대한 특별한 지식이 있어야합니다. 따라서 마다 첨부 파일에 대해 위 절차를 반복해야합니다 (유형이 GL_NONE
인 경우 아무 것도 첨부되지 않습니다). 그런 다음 반환 된 값 (즉, 가장 작은 너비와 높이)의 교차 부분을 가져옵니다.
일반적으로 FBO에게 얼마나 큰지 물어 보지 않아도됩니다. 얼마나 큰지를 텍스처에 요청할 필요가 없듯이. 너는 그들을 만들었다. 정의에 따르면, 그들이 얼마나 큰지 알 것입니다. FBO에 넣으면 다시 얼마나 큰지 알 수 있습니다.
FYI : 더 나은 서비스를 위해 OpenGL 관련 질문에 OpenGL 태그를 사용하십시오. 이후 버전에서도 마찬가지입니다. 대부분의 OpenGL 전문가는 OpenGL-3가 아닌 OpenGL 태그를 살펴 봅니다. –