glreadpixels 예제

ShiVa는 게임을 실행하려는 하드웨어 및 운영 체제에 따라 여러 가지 렌더링 백엔드를 제공합니다. 데스크톱 시스템에서는 OpenGL에서 렌더링될 가능성이 높으며, 이는 C/C++ 및 표준 OpenGL API를 사용하여 프레임 버퍼에 쉽게 액세스할 수 있음을 의미합니다. 이 예제에서는 가짜 HDR/자동 감마 시프트 효과를 구현하기 위해 glReadPixels()를 사용하여 프레임 버퍼에서 색상 및 밝기 정보를 추출하는 방법을 보여 줍니다. 가능한 “최신” 프레임을 얻으려면 eEngineEventFrameRenderEnd의 경우 프레임 버퍼 함수를 직접 호출합니다. 그러나 한 개의 추가 프레임의 대기 시간에 대해 신경 쓰지 않는다면 인생을 더 쉽게 만들고 ShiVa AIModel 내부의 onEnterFrame()에서 프레임 버퍼 함수를 호출 할 수 있습니다. VR과 같은 다른 응용 프로그램과 달리 한 프레임 지연은 예제 효과에 대해 완전히 허용됩니다. 예를 들어 glReadPixels() 및 glGetTexImage()는 “팩” 픽셀 작업이며 glDrawPixels(), glTexImage2D() 및 glTexSubImage2D()는 “압축 해제” 작업입니다. PBO가 GL_PIXEL_PACK_BUFFER 토큰으로 바인딩되면 glReadPixels()는 OpenGL 프레임 버퍼에서 픽셀 데이터를 읽고 데이터를 PBO에 기록(압축)합니다. PBO가 GL_PIXEL_UNPACK_BUFFER 토큰으로 바인딩되면 glDrawPixels() PBO에서 픽셀 데이터를 읽고 OpenGL 프레임 버퍼에 복사합니다. 그런 다음 불필요한 데이터가 삭제됩니다. 예를 들어 GL_RED는 녹색, 파란색 및 알파 구성 요소를 삭제하고 GL_RGB는 알파 구성 요소만 삭제합니다. GL_LUMINANCE은 단일 구성 요소 값을 빨간색, 녹색 및 파란색 구성 요소의 합으로 계산하고 GL_LUMINANCE_ALPHA는 알파를 두 번째 값으로 유지하면서 동일하게 수행합니다.

최종 값은 범위 [0, 1]로 고정됩니다. Jba03/glReadPixels_예제에서 새 릴리스에 대한 알림을 원하십니까? 앞에서 설명한 것처럼 픽셀 버퍼 개체는 정점 버퍼 개체에서 모든 API를 대여합니다. 유일한 차이점은 PPO에 대한 2 개의 추가 토큰이 있다는 것입니다 : GL_PIXEL_PACK_BUFFER 및 GL_PIXEL_UNPACK_BUFFER. GL_PIXEL_PACK_BUFFER는 OpenGL에서 응용 프로그램으로 픽셀 데이터를 전송하기 위한 것이며, GL_PIXEL_UNPACK_BUFFER는 응용 프로그램에서 OpenGL로 픽셀 데이터를 전송하는 것을 의미합니다. OpenGL은 이러한 토큰을 참조하여 PBO의 최상의 메모리 공간(예: 텍스처 업로드(압축 해제) 또는 프레임 버퍼를 읽기 위한 시스템 메모리를 결정합니다.