소스 검색

gpu: support framebuffer objects on OpenGL ES (depth buffer isn't

supported yet).
legacy
Sam Hocevar sam 13 년 전
부모
커밋
2e3db290cb
1개의 변경된 파일14개의 추가작업 그리고 7개의 파일을 삭제
  1. +14
    -7
      src/gpu/framebuffer.cpp

+ 14
- 7
src/gpu/framebuffer.cpp 파일 보기

@@ -61,9 +61,15 @@ FrameBuffer::FrameBuffer(ivec2 size)
m_data->m_size = size; m_data->m_size = size;
#if defined USE_D3D9 || defined _XBOX #if defined USE_D3D9 || defined _XBOX
/* FIXME: not implemented on Direct3D */ /* FIXME: not implemented on Direct3D */
#elif GL_VERSION_1_1
GLenum format = GL_RGBA8;
#else
# if GL_VERSION_1_1
GLenum internal_format = GL_RGBA8;
GLenum format = GL_BGRA;
GLenum depth = GL_DEPTH_COMPONENT; GLenum depth = GL_DEPTH_COMPONENT;
# else
GLenum internal_format = GL_RGBA;
GLenum format = GL_RGBA;
# endif
GLenum wrapmode = GL_REPEAT; GLenum wrapmode = GL_REPEAT;
GLenum filtering = GL_NEAREST; GLenum filtering = GL_NEAREST;


@@ -77,12 +83,15 @@ FrameBuffer::FrameBuffer(ivec2 size)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, (GLenum)wrapmode); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, (GLenum)wrapmode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLenum)filtering); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (GLenum)filtering);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLenum)filtering); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (GLenum)filtering);
glTexImage2D(GL_TEXTURE_2D, 0, (GLenum)format, size.x, size.y, 0,
GL_BGRA, GL_UNSIGNED_BYTE, NULL);
glTexImage2D(GL_TEXTURE_2D, 0, internal_format, size.x, size.y, 0,
format, GL_UNSIGNED_BYTE, NULL);


glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, m_data->m_texture, 0); GL_TEXTURE_2D, m_data->m_texture, 0);
m_data->m_depth = GL_INVALID_ENUM; m_data->m_depth = GL_INVALID_ENUM;
# if GL_VERSION_1_1
/* FIXME: not implemented on GL ES, see
* http://stackoverflow.com/q/4041682/111461 */
if (depth != GL_INVALID_ENUM) if (depth != GL_INVALID_ENUM)
{ {
glGenRenderbuffers(1, &m_data->m_depth); glGenRenderbuffers(1, &m_data->m_depth);
@@ -91,12 +100,10 @@ FrameBuffer::FrameBuffer(ivec2 size)
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, m_data->m_depth); GL_RENDERBUFFER, m_data->m_depth);
} }
# endif
glCheckFramebufferStatus(GL_FRAMEBUFFER); glCheckFramebufferStatus(GL_FRAMEBUFFER);


Unbind(); Unbind();
#else
/* FIXME: not implemented on GL ES, see
* http://stackoverflow.com/q/4041682/111461 */
#endif #endif
} }




불러오는 중...
취소
저장