unsigned short *dest16 = (unsigned short*)dest;\r
unsigned int *dest32 = (unsigned int*)dest;\r
\r
- if(renderTarget->getInternalFormat() == sw::FORMAT_A8R8G8B8 &&\r
+ if(renderTarget->getInternalFormat() == sw::FORMAT_A8B8G8R8 &&\r
format == GL_RGBA && type == GL_UNSIGNED_BYTE)\r
{\r
+ memcpy(dest, source, (rect.x1 - rect.x0) * 4);\r
+ }\r
+ else if(renderTarget->getInternalFormat() == sw::FORMAT_A8R8G8B8 &&\r
+ format == GL_RGBA && type == GL_UNSIGNED_BYTE)\r
+ {\r
for(int i = 0; i < rect.x1 - rect.x0; i++)\r
{\r
unsigned int argb = *(unsigned int*)(source + 4 * i);\r
r = (argb & 0x00FF0000) * (1.0f / 0x00FF0000);\r
}\r
break;\r
+ case sw::FORMAT_A8B8G8R8:\r
+ {\r
+ unsigned int abgr = *(unsigned int*)(source + 4 * i);\r
+\r
+ a = (abgr & 0xFF000000) * (1.0f / 0xFF000000);\r
+ b = (abgr & 0x00FF0000) * (1.0f / 0x00FF0000);\r
+ g = (abgr & 0x0000FF00) * (1.0f / 0x0000FF00);\r
+ r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);\r
+ }\r
+ break;\r
case sw::FORMAT_X8R8G8B8:\r
{\r
unsigned int xrgb = *(unsigned int*)(source + 4 * i);\r
r = (xrgb & 0x00FF0000) * (1.0f / 0x00FF0000);\r
}\r
break;\r
+ case sw::FORMAT_X8B8G8R8:\r
+ {\r
+ unsigned int xbgr = *(unsigned int*)(source + 4 * i);\r
+\r
+ a = 1.0f;\r
+ b = (xbgr & 0x00FF0000) * (1.0f / 0x00FF0000);\r
+ g = (xbgr & 0x0000FF00) * (1.0f / 0x0000FF00);\r
+ r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);\r
+ }\r
+ break;\r
case sw::FORMAT_A2R10G10B10:\r
{\r
unsigned int argb = *(unsigned int*)(source + 4 * i);\r
unsigned short *dest16 = (unsigned short*)dest;\r
unsigned int *dest32 = (unsigned int*)dest;\r
\r
- if(renderTarget->getInternalFormat() == sw::FORMAT_A8R8G8B8 &&\r
+ if(renderTarget->getInternalFormat() == sw::FORMAT_A8B8G8R8 &&\r
format == GL_RGBA && type == GL_UNSIGNED_BYTE)\r
{\r
+ memcpy(dest, source, (rect.x1 - rect.x0) * 4);\r
+ }\r
+ else if(renderTarget->getInternalFormat() == sw::FORMAT_A8R8G8B8 &&\r
+ format == GL_RGBA && type == GL_UNSIGNED_BYTE)\r
+ {\r
for(int i = 0; i < rect.x1 - rect.x0; i++)\r
{\r
unsigned int argb = *(unsigned int*)(source + 4 * i);\r
r = (argb & 0x00FF0000) * (1.0f / 0x00FF0000);\r
}\r
break;\r
+ case sw::FORMAT_A8B8G8R8:\r
+ {\r
+ unsigned int abgr = *(unsigned int*)(source + 4 * i);\r
+\r
+ a = (abgr & 0xFF000000) * (1.0f / 0xFF000000);\r
+ b = (abgr & 0x00FF0000) * (1.0f / 0x00FF0000);\r
+ g = (abgr & 0x0000FF00) * (1.0f / 0x0000FF00);\r
+ r = (abgr & 0x000000FF) * (1.0f / 0x000000FF);\r
+ }\r
+ break;\r
case sw::FORMAT_X8R8G8B8:\r
{\r
unsigned int xrgb = *(unsigned int*)(source + 4 * i);\r
r = (xrgb & 0x00FF0000) * (1.0f / 0x00FF0000);\r
}\r
break;\r
+ case sw::FORMAT_X8B8G8R8:\r
+ {\r
+ unsigned int xbgr = *(unsigned int*)(source + 4 * i);\r
+\r
+ a = 1.0f;\r
+ b = (xbgr & 0x00FF0000) * (1.0f / 0x00FF0000);\r
+ g = (xbgr & 0x0000FF00) * (1.0f / 0x0000FF00);\r
+ r = (xbgr & 0x000000FF) * (1.0f / 0x000000FF);\r
+ }\r
+ break;\r
case sw::FORMAT_A2R10G10B10:\r
{\r
unsigned int argb = *(unsigned int*)(source + 4 * i);\r
switch(type)\r
{\r
case GL_UNSIGNED_SHORT_5_6_5:\r
- dest16[i] = \r
+ dest16[i] =\r
((unsigned short)(31 * b + 0.5f) << 0) |\r
((unsigned short)(63 * g + 0.5f) << 5) |\r
((unsigned short)(31 * r + 0.5f) << 11);\r