OpenGL에서 화면을 렌더링 할 때 문제가 있습니다. FBO 및 PBO에 대해 많이 검색했지만 나에게 도움이되는 것은 없습니다. 문제는 CreateCompatibleDC에 의해 만들어진 memDC에서 나온 것 같습니다. 내가 m_hDC 있습니다에 memDC 및 createContext의없이 본을 programm을 실행하면 다음 오프 스크린 렌더링은 어떻게합니까?
는 아무 문제가 없었다, 내 코드void COpenGLWnd::ShowinWnd(int ID)
{
m_hDC = ::GetDC(m_hWnd);
memDC = CreateCompatibleDC(m_hDC);
SetDCPixelFormat(memDC);
m_hRC = wglCreateContext(memDC);
VERIFY(wglMakeCurrent(memDC, m_hRC));
m_isitStart = 0;
GLuint pbo;
glGenBuffersARB(1,&pbo);
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, (m_WndWidth * 3 + 3)/4 * 4 * m_WndHeight, NULL, GL_STREAM_READ);
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
switch(ID)
{
case T_FADEIN:
GLFadeinRender();
break;
case T_PARANORAMAL:
GLParanormalRender();
break;
case T_3DCUBE:
GL3DcubeRender();
break;
default:
break;
}
glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
glReadBuffer(GL_BACK);
glReadPixels(0,0,m_WndWidth,m_WndHeight,GL_BGR_EXT,GL_UNSIGNED_BYTE, 0);
BYTE* data = (BYTE*) glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB);
if(data)
{
SaveBitmapToDirectFile(data); //this makes bitmap file with pixel BYTE array, "data".
glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
}
glBindFramebuffer(GL_PIXEL_PACK_BUFFER_ARB,0);
SwapBuffers(memDC);
glDeleteBuffers(1,&pbo);
wglMakeCurrent(memDC, NULL);
wglDeleteContext(m_hRC);
DeleteDC(memDC);
::ReleaseDC(m_hWnd, m_hDC);
}
의 일부입니다. 글쎄, 창문에 잘 작성된 비트 맵 파일에 렌더링됩니다. 하지만 나는 비트 맵 파일 만 저장하고 화면을 벗어난 상태로 렌더링하려고합니다. 어떻게 처리 할 수 있습니까?
답장을 보내 주셔서 감사합니다. 그러나 SelectObject를 어떻게 사용합니까? 다시 제발 그걸 권할 수 있을까요? – phraust
__m_hMemBmp = :: CreateCompatibleBitmap (m_hDC, m_WndWidth, m_WndHeight);과 같은 초기화 단계에서 새 코드를 삽입했습니다. :: SelectObject (memDC, m_hMemBmp); __ 하지만 여전히 변경된 사항이 없습니다. – phraust
저는 Borland를 사용하고 있으며, 그 아래에서 비트 맵 렌더링을 실행하지 않습니다. 그래서 문제가 지속되면 DC/RC를 추가하지 않고도 텍스처를 그릴 수 있습니다 (대상 윈도우 만 필요함) ... 그러나 텍스처의 크기는 일부 카드/드라이버에서 화면 해상도보다 훨씬 많습니다. 당신은 적용을 위해 더 많은 텍스처를 사용해야합니다. – Spektre