This commit is contained in:
bkaradzic 2013-04-15 21:17:30 -07:00
Родитель d05fb35eee
Коммит 6ed7b6fe14
1 изменённых файлов: 19 добавлений и 11 удалений

Просмотреть файл

@ -667,18 +667,25 @@ namespace bgfx
GL_BACK, GL_BACK,
}; };
struct RenderTargetColorFormat
{
GLenum m_internalFmt;
GLenum m_type;
uint8_t m_bpp;
};
// Specifies the internal format of the texture. // Specifies the internal format of the texture.
// Must be one of the following symbolic constants: // Must be one of the following symbolic constants:
// GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA. // GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_RGB, GL_RGBA.
static const GLenum s_colorFormat[][2] = static const RenderTargetColorFormat s_colorFormat[] =
{ {
{ 0, 0 }, // ignored { 0, 0, 0 }, // ignored
{ GL_RGBA8, GL_UNSIGNED_BYTE }, { GL_RGBA8, GL_UNSIGNED_BYTE, 32 },
{ GL_RGB10_A2, GL_UNSIGNED_INT_2_10_10_10_REV }, { GL_RGB10_A2, GL_UNSIGNED_INT_2_10_10_10_REV, 32 },
{ GL_RGBA16, GL_UNSIGNED_SHORT }, { GL_RGBA16, GL_UNSIGNED_SHORT, 64 },
{ GL_RGBA16F, GL_HALF_FLOAT }, { GL_RGBA16F, GL_HALF_FLOAT, 64 },
{ GL_R16F, GL_HALF_FLOAT }, { GL_R16F, GL_HALF_FLOAT, 16 },
{ GL_R32F, GL_FLOAT }, { GL_R32F, GL_FLOAT, 32 },
}; };
static const GLenum s_depthFormat[] = static const GLenum s_depthFormat[] =
@ -1495,8 +1502,9 @@ namespace bgfx
void Texture::createColor(uint32_t _colorFormat, uint32_t _width, uint32_t _height, GLenum _min, GLenum _mag) void Texture::createColor(uint32_t _colorFormat, uint32_t _width, uint32_t _height, GLenum _min, GLenum _mag)
{ {
GLenum internalFormat = s_colorFormat[_colorFormat][0]; const RenderTargetColorFormat& rtcf = s_colorFormat[_colorFormat];
GLenum type = s_colorFormat[_colorFormat][1]; GLenum internalFormat = rtcf.m_internalFmt;
GLenum type = rtcf.m_type;
m_target = GL_TEXTURE_2D; m_target = GL_TEXTURE_2D;
GL_CHECK(glGenTextures(1, &m_id) ); GL_CHECK(glGenTextures(1, &m_id) );
@ -1702,7 +1710,7 @@ namespace bgfx
GL_CHECK(glGenRenderbuffers(1, &m_colorRbo) ); GL_CHECK(glGenRenderbuffers(1, &m_colorRbo) );
BX_CHECK(0 != m_colorRbo, "Failed to generate color renderbuffer id."); BX_CHECK(0 != m_colorRbo, "Failed to generate color renderbuffer id.");
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) );
GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, m_msaa, s_colorFormat[colorFormat][0], _width, _height) ); GL_CHECK(glRenderbufferStorageMultisample(GL_RENDERBUFFER, m_msaa, s_colorFormat[colorFormat].m_internalFmt, _width, _height) );
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0) ); GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER