GL: When using ARB_texture_swizzle don't swizzle image to BGRA8.
This commit is contained in:
parent
e97cf77c41
commit
983f1e6f9a
@ -338,7 +338,7 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||||||
bgfx::destroyFragmentShader(fsh);
|
bgfx::destroyFragmentShader(fsh);
|
||||||
|
|
||||||
// Load diffuse texture.
|
// Load diffuse texture.
|
||||||
mem = loadTexture("fieldstone-rgba.dds");
|
mem = loadTexture("texture_compression_ptc22.pvr"); //fieldstone-rgba.dds");
|
||||||
bgfx::TextureHandle textureColor = bgfx::createTexture(mem);
|
bgfx::TextureHandle textureColor = bgfx::createTexture(mem);
|
||||||
|
|
||||||
// Load normal texture.
|
// Load normal texture.
|
||||||
|
@ -123,6 +123,25 @@ static const bgfx::Memory* loadShader(const char* _name)
|
|||||||
return load(filePath);
|
return load(filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void updateTextureCubeRectBgra8(bgfx::TextureHandle _handle, uint8_t _side, uint32_t _x, uint32_t _y, uint32_t _width, uint32_t _height, uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 0xff)
|
||||||
|
{
|
||||||
|
bgfx::TextureInfo ti;
|
||||||
|
bgfx::calcTextureSize(ti, _width, _height, 1, 1, bgfx::TextureFormat::BGRA8);
|
||||||
|
|
||||||
|
const bgfx::Memory* mem = bgfx::alloc(ti.storageSize);
|
||||||
|
uint8_t* data = (uint8_t*)mem->data;
|
||||||
|
for (uint32_t ii = 0, num = ti.storageSize*8/ti.bitsPerPixel; ii < num; ++ii)
|
||||||
|
{
|
||||||
|
data[0] = _b;
|
||||||
|
data[1] = _g;
|
||||||
|
data[2] = _r;
|
||||||
|
data[3] = _a;
|
||||||
|
data += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::updateTextureCube(_handle, _side, 0, _x, _y, _width, _height, mem);
|
||||||
|
}
|
||||||
|
|
||||||
int _main_(int /*_argc*/, char** /*_argv*/)
|
int _main_(int /*_argc*/, char** /*_argv*/)
|
||||||
{
|
{
|
||||||
uint32_t width = 1280;
|
uint32_t width = 1280;
|
||||||
@ -214,6 +233,13 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||||||
, BGFX_TEXTURE_MIN_POINT|BGFX_TEXTURE_MAG_POINT|BGFX_TEXTURE_MIP_POINT
|
, BGFX_TEXTURE_MIN_POINT|BGFX_TEXTURE_MAG_POINT|BGFX_TEXTURE_MIP_POINT
|
||||||
);
|
);
|
||||||
|
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 0, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 1, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 2, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 3, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 4, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
updateTextureCubeRectBgra8(textureCube, 5, 0, 0, textureSide, textureSide, 0xff, 0, 0);
|
||||||
|
|
||||||
uint8_t rr = rand()%255;
|
uint8_t rr = rand()%255;
|
||||||
uint8_t gg = rand()%255;
|
uint8_t gg = rand()%255;
|
||||||
uint8_t bb = rand()%255;
|
uint8_t bb = rand()%255;
|
||||||
@ -263,23 +289,9 @@ int _main_(int /*_argc*/, char** /*_argv*/)
|
|||||||
quads.push_back(face);
|
quads.push_back(face);
|
||||||
|
|
||||||
++hit;
|
++hit;
|
||||||
bgfx::TextureInfo ti;
|
|
||||||
const Pack2D& rect = face.m_rect;
|
const Pack2D& rect = face.m_rect;
|
||||||
bgfx::calcTextureSize(ti, rect.m_width, rect.m_height, 1, 1, bgfx::TextureFormat::BGRA8);
|
|
||||||
|
|
||||||
// updateTime = now + freq/10;
|
updateTextureCubeRectBgra8(textureCube, face.m_side, rect.m_x, rect.m_y, rect.m_width, rect.m_height, 0, 0xff, 0);
|
||||||
const bgfx::Memory* mem = bgfx::alloc(ti.storageSize);
|
|
||||||
uint8_t* data = (uint8_t*)mem->data;
|
|
||||||
for (uint32_t ii = 0, num = ti.storageSize*8/ti.bitsPerPixel; ii < num; ++ii)
|
|
||||||
{
|
|
||||||
data[0] = bb;
|
|
||||||
data[1] = rr;
|
|
||||||
data[2] = gg;
|
|
||||||
data[3] = 0xff;
|
|
||||||
data += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
bgfx::updateTextureCube(textureCube, face.m_side, 0, rect.m_x, rect.m_y, rect.m_width, rect.m_height, mem);
|
|
||||||
|
|
||||||
rr = rand()%255;
|
rr = rand()%255;
|
||||||
gg = rand()%255;
|
gg = rand()%255;
|
||||||
|
@ -1221,7 +1221,7 @@ namespace bgfx
|
|||||||
|
|
||||||
default:
|
default:
|
||||||
// Decompression not implemented... Make ugly red-yellow checkerboard texture.
|
// Decompression not implemented... Make ugly red-yellow checkerboard texture.
|
||||||
imageCheckerboard(_width, _height, 16, UINT32_C(0xff0000ff), UINT32_C(0xff00ffff), _dst);
|
imageCheckerboard(_width, _height, 16, UINT32_C(0xffff0000), UINT32_C(0xffffff00), _dst);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1450,7 +1450,7 @@ namespace bgfx
|
|||||||
|
|
||||||
const GLenum internalFmt = s_textureFormat[m_textureFormat].m_internalFmt;
|
const GLenum internalFmt = s_textureFormat[m_textureFormat].m_internalFmt;
|
||||||
|
|
||||||
const bool swizzle = GL_RGBA == internalFmt;
|
const bool swizzle = GL_RGBA == internalFmt && !s_renderCtx.m_textureSwizzleSupport;
|
||||||
const bool convert = m_textureFormat != m_requestedFormat;
|
const bool convert = m_textureFormat != m_requestedFormat;
|
||||||
const bool compressed = TextureFormat::Unknown > m_textureFormat;
|
const bool compressed = TextureFormat::Unknown > m_textureFormat;
|
||||||
const uint32_t min = convert && compressed ? 4 : 1;
|
const uint32_t min = convert && compressed ? 4 : 1;
|
||||||
@ -1660,7 +1660,7 @@ namespace bgfx
|
|||||||
|
|
||||||
GLenum target = GL_TEXTURE_CUBE_MAP == m_target ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : m_target;
|
GLenum target = GL_TEXTURE_CUBE_MAP == m_target ? GL_TEXTURE_CUBE_MAP_POSITIVE_X : m_target;
|
||||||
|
|
||||||
const bool swizzle = GL_RGBA == m_fmt;
|
const bool swizzle = GL_RGBA == m_fmt && !s_renderCtx.m_textureSwizzleSupport;
|
||||||
const bool convert = m_textureFormat != m_requestedFormat;
|
const bool convert = m_textureFormat != m_requestedFormat;
|
||||||
const bool compressed = TextureFormat::Unknown > m_textureFormat;
|
const bool compressed = TextureFormat::Unknown > m_textureFormat;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user