| 815 | |
| 816 | |
| 817 | bool GBitmap::setColor(const U32 x, const U32 y, const ColorI& rColor) |
| 818 | { |
| 819 | if (x >= mWidth || y >= mHeight) |
| 820 | return false; |
| 821 | |
| 822 | U8* pLoc = getAddress(x, y); |
| 823 | |
| 824 | switch (mInternalFormat) { |
| 825 | case GFXFormatA8: |
| 826 | case GFXFormatL8: |
| 827 | *pLoc = rColor.alpha; |
| 828 | break; |
| 829 | |
| 830 | case GFXFormatL16: |
| 831 | dMemcpy(pLoc, &rColor, 2 * sizeof(U8)); |
| 832 | break; |
| 833 | |
| 834 | case GFXFormatR8G8B8: |
| 835 | dMemcpy( pLoc, &rColor, 3 * sizeof( U8 ) ); |
| 836 | break; |
| 837 | |
| 838 | case GFXFormatR8G8B8A8: |
| 839 | case GFXFormatR8G8B8X8: |
| 840 | dMemcpy( pLoc, &rColor, 4 * sizeof( U8 ) ); |
| 841 | break; |
| 842 | |
| 843 | case GFXFormatR5G6B5: |
| 844 | #ifdef TORQUE_OS_MAC |
| 845 | *((U16*)pLoc) = (rColor.red << 11) | (rColor.green << 5) | (rColor.blue << 0) ; |
| 846 | #else |
| 847 | *((U16*)pLoc) = (rColor.blue << 0) | (rColor.green << 5) | (rColor.red << 11); |
| 848 | #endif |
| 849 | break; |
| 850 | |
| 851 | case GFXFormatR5G5B5A1: |
| 852 | #ifdef TORQUE_OS_MAC |
| 853 | *((U16*)pLoc) = (((rColor.alpha>0) ? 1 : 0)<<15) | (rColor.blue << 10) | (rColor.green << 5) | (rColor.red << 0); |
| 854 | #else |
| 855 | *((U16*)pLoc) = (rColor.blue << 1) | (rColor.green << 6) | (rColor.red << 11) | ((rColor.alpha>0) ? 1 : 0); |
| 856 | #endif |
| 857 | break; |
| 858 | |
| 859 | default: |
| 860 | AssertFatal(false, "Bad internal format"); |
| 861 | return false; |
| 862 | } |
| 863 | |
| 864 | return true; |
| 865 | } |
| 866 | |
| 867 | //-------------------------------------------------------------------------- |
| 868 | U8 GBitmap::getChanelValueAt(U32 x, U32 y, U32 chan) |
no test coverage detected