Kaydet (Commit) 8a498fad authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

tdf#94851 use BGR color order in Windows

Change-Id: I06dd26caed35bcfdf073abf64035a01e0b45fcce
üst 5919f0bb
...@@ -38,7 +38,45 @@ ...@@ -38,7 +38,45 @@
namespace namespace
{ {
bool isValidBitCount( sal_uInt16 nBitCount ) inline bool determineTextureFormat(sal_uInt16 nBits, GLenum& nFormat, GLenum& nType)
{
switch(nBits)
{
case 8:
nFormat = GL_LUMINANCE;
nType = GL_UNSIGNED_BYTE;
return true;
case 16:
#ifdef WNT
nFormat = GL_BGR;
#else
nFormat = GL_RGB;
#endif
nType = GL_UNSIGNED_SHORT_5_6_5;
return true;
case 24:
#ifdef WNT
nFormat = GL_BGR;
#else
nFormat = GL_RGB;
#endif
nType = GL_UNSIGNED_BYTE;
return true;
case 32:
#ifdef WNT
nFormat = GL_BGRA;
#else
nFormat = GL_RGBA;
#endif
nType = GL_UNSIGNED_BYTE;
return true;
default:
break;
}
return false;
}
inline bool isValidBitCount( sal_uInt16 nBitCount )
{ {
return (nBitCount == 1) || (nBitCount == 4) || (nBitCount == 8) || (nBitCount == 16) || (nBitCount == 24) || (nBitCount == 32); return (nBitCount == 1) || (nBitCount == 4) || (nBitCount == 8) || (nBitCount == 16) || (nBitCount == 24) || (nBitCount == 32);
} }
...@@ -404,18 +442,7 @@ GLuint OpenGLSalBitmap::CreateTexture() ...@@ -404,18 +442,7 @@ GLuint OpenGLSalBitmap::CreateTexture()
// no conversion needed for truecolor // no conversion needed for truecolor
pData = maUserBuffer.get(); pData = maUserBuffer.get();
switch( mnBits ) determineTextureFormat(mnBits, nFormat, nType);
{
case 16: nFormat = GL_RGB;
nType = GL_UNSIGNED_SHORT_5_6_5;
break;
case 24: nFormat = GL_RGB;
nType = GL_UNSIGNED_BYTE;
break;
case 32: nFormat = GL_RGBA;
nType = GL_UNSIGNED_BYTE;
break;
}
} }
else if( mnBits == 8 && maPalette.IsGreyPalette() ) else if( mnBits == 8 && maPalette.IsGreyPalette() )
{ {
...@@ -431,8 +458,7 @@ GLuint OpenGLSalBitmap::CreateTexture() ...@@ -431,8 +458,7 @@ GLuint OpenGLSalBitmap::CreateTexture()
// convert to 24 bits RGB using palette // convert to 24 bits RGB using palette
pData = new sal_uInt8[mnBufHeight * mnBufWidth * 3]; pData = new sal_uInt8[mnBufHeight * mnBufWidth * 3];
bAllocated = true; bAllocated = true;
nFormat = GL_RGB; determineTextureFormat(24, nFormat, nType);
nType = GL_UNSIGNED_BYTE;
std::unique_ptr<ImplPixelFormat> pSrcFormat(ImplPixelFormat::GetFormat(mnBits, maPalette)); std::unique_ptr<ImplPixelFormat> pSrcFormat(ImplPixelFormat::GetFormat(mnBits, maPalette));
...@@ -479,6 +505,9 @@ bool OpenGLSalBitmap::ReadTexture() ...@@ -479,6 +505,9 @@ bool OpenGLSalBitmap::ReadTexture()
{ {
sal_uInt8* pData = maUserBuffer.get(); sal_uInt8* pData = maUserBuffer.get();
GLenum nFormat = GL_RGBA;
GLenum nType = GL_UNSIGNED_BYTE;
VCL_GL_INFO( "::ReadTexture " << mnWidth << "x" << mnHeight << " bits: " << mnBits); VCL_GL_INFO( "::ReadTexture " << mnWidth << "x" << mnHeight << " bits: " << mnBits);
if( pData == nullptr ) if( pData == nullptr )
...@@ -486,24 +515,7 @@ bool OpenGLSalBitmap::ReadTexture() ...@@ -486,24 +515,7 @@ bool OpenGLSalBitmap::ReadTexture()
if (mnBits == 8 || mnBits == 16 || mnBits == 24 || mnBits == 32) if (mnBits == 8 || mnBits == 16 || mnBits == 24 || mnBits == 32)
{ {
GLenum nFormat = GL_RGBA; determineTextureFormat(mnBits, nFormat, nType);
GLenum nType = GL_UNSIGNED_BYTE;
switch( mnBits )
{
case 8: nFormat = GL_LUMINANCE;
nType = GL_UNSIGNED_BYTE;
break;
case 16: nFormat = GL_RGB;
nType = GL_UNSIGNED_SHORT_5_6_5;
break;
case 24: nFormat = GL_RGB;
nType = GL_UNSIGNED_BYTE;
break;
case 32: nFormat = GL_RGBA;
nType = GL_UNSIGNED_BYTE;
break;
}
makeSomeOpenGLContextCurrent(); makeSomeOpenGLContextCurrent();
maTexture.Read(nFormat, nType, pData); maTexture.Read(nFormat, nType, pData);
...@@ -516,7 +528,8 @@ bool OpenGLSalBitmap::ReadTexture() ...@@ -516,7 +528,8 @@ bool OpenGLSalBitmap::ReadTexture()
std::vector<sal_uInt8> aBuffer(mnWidth * mnHeight * 3); std::vector<sal_uInt8> aBuffer(mnWidth * mnHeight * 3);
makeSomeOpenGLContextCurrent(); makeSomeOpenGLContextCurrent();
sal_uInt8* pBuffer = aBuffer.data(); sal_uInt8* pBuffer = aBuffer.data();
maTexture.Read(GL_RGB, GL_UNSIGNED_BYTE, pBuffer); determineTextureFormat(24, nFormat, nType);
maTexture.Read(nFormat, nType, pBuffer);
int nShift = 7; int nShift = 7;
size_t nIndex = 0; size_t nIndex = 0;
...@@ -724,6 +737,7 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode ) ...@@ -724,6 +737,7 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
pBuffer->mnScanlineSize = mnBytesPerRow; pBuffer->mnScanlineSize = mnBytesPerRow;
pBuffer->mpBits = maUserBuffer.get(); pBuffer->mpBits = maUserBuffer.get();
pBuffer->mnBitCount = mnBits; pBuffer->mnBitCount = mnBits;
switch (mnBits) switch (mnBits)
{ {
case 1: case 1:
...@@ -737,21 +751,48 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode ) ...@@ -737,21 +751,48 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
break; break;
case 16: case 16:
{ {
#ifdef WNT
pBuffer->mnFormat = BMP_FORMAT_16BIT_TC_LSB_MASK;
ColorMaskElement aRedMask(0x00007c00);
aRedMask.CalcMaskShift();
ColorMaskElement aGreenMask(0x000003e0);
aGreenMask.CalcMaskShift();
ColorMaskElement aBlueMask(0x0000001f);
aBlueMask.CalcMaskShift();
pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
#else
pBuffer->mnFormat = BMP_FORMAT_16BIT_TC_MSB_MASK; pBuffer->mnFormat = BMP_FORMAT_16BIT_TC_MSB_MASK;
ColorMaskElement aRedMask(0xf800); ColorMaskElement aRedMask(0x0000f800);
aRedMask.CalcMaskShift(); aRedMask.CalcMaskShift();
ColorMaskElement aGreenMask(0x07e0); ColorMaskElement aGreenMask(0x000007e0);
aGreenMask.CalcMaskShift(); aGreenMask.CalcMaskShift();
ColorMaskElement aBlueMask(0x001f); ColorMaskElement aBlueMask(0x0000001f);
aBlueMask.CalcMaskShift(); aBlueMask.CalcMaskShift();
pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
#endif
break; break;
} }
case 24: case 24:
{
#ifdef WNT
pBuffer->mnFormat = BMP_FORMAT_24BIT_TC_BGR;
#else
pBuffer->mnFormat = BMP_FORMAT_24BIT_TC_RGB; pBuffer->mnFormat = BMP_FORMAT_24BIT_TC_RGB;
#endif
break; break;
}
case 32: case 32:
{ {
#ifdef WNT
pBuffer->mnFormat = BMP_FORMAT_32BIT_TC_BGRA;
ColorMaskElement aRedMask(0x00ff0000);
aRedMask.CalcMaskShift();
ColorMaskElement aGreenMask(0x0000ff00);
aGreenMask.CalcMaskShift();
ColorMaskElement aBlueMask(0x000000ff);
aBlueMask.CalcMaskShift();
pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
#else
pBuffer->mnFormat = BMP_FORMAT_32BIT_TC_RGBA; pBuffer->mnFormat = BMP_FORMAT_32BIT_TC_RGBA;
ColorMaskElement aRedMask(0xff000000); ColorMaskElement aRedMask(0xff000000);
aRedMask.CalcMaskShift(); aRedMask.CalcMaskShift();
...@@ -760,6 +801,7 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode ) ...@@ -760,6 +801,7 @@ BitmapBuffer* OpenGLSalBitmap::AcquireBuffer( BitmapAccessMode nMode )
ColorMaskElement aBlueMask(0x0000ff00); ColorMaskElement aBlueMask(0x0000ff00);
aBlueMask.CalcMaskShift(); aBlueMask.CalcMaskShift();
pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask); pBuffer->maColorMask = ColorMask(aRedMask, aGreenMask, aBlueMask);
#endif
break; break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment