graphicsdeviceinterface/gdi/lookuptable/lookuptable.cpp
author bdonegan
Fri, 22 Oct 2010 10:41:04 +0100
branchbug235_bringup_0
changeset 203 71a455a885b7
parent 0 5d03bc08d59c
permissions -rw-r--r--
Code to draw a line

// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//

#include "lookuptable.h"

/**
@internalComponent
*/
// Lookup table low word for converting from 16bpp to 32bpp display modes
const TUint16 KBlt16to32Low[256] =
    {
    0x0000,
    0x0008,
    0x0010,
    0x0018,
    0x0021,
    0x0029,
    0x0031,
    0x0039,
    0x0042,
    0x004a,
    0x0052,
    0x005a,
    0x0063,
    0x006b,
    0x0073,
    0x007b,
    0x0084,
    0x008c,
    0x0094,
    0x009c,
    0x00a5,
    0x00ad,
    0x00b5,
    0x00bd,
    0x00c6,
    0x00ce,
    0x00d6,
    0x00de,
    0x00e7,
    0x00ef,
    0x00f7,
    0x00ff,
    0x0400,
    0x0408,
    0x0410,
    0x0418,
    0x0421,
    0x0429,
    0x0431,
    0x0439,
    0x0442,
    0x044a,
    0x0452,
    0x045a,
    0x0463,
    0x046b,
    0x0473,
    0x047b,
    0x0484,
    0x048c,
    0x0494,
    0x049c,
    0x04a5,
    0x04ad,
    0x04b5,
    0x04bd,
    0x04c6,
    0x04ce,
    0x04d6,
    0x04de,
    0x04e7,
    0x04ef,
    0x04f7,
    0x04ff,
    0x0800,
    0x0808,
    0x0810,
    0x0818,
    0x0821,
    0x0829,
    0x0831,
    0x0839,
    0x0842,
    0x084a,
    0x0852,
    0x085a,
    0x0863,
    0x086b,
    0x0873,
    0x087b,
    0x0884,
    0x088c,
    0x0894,
    0x089c,
    0x08a5,
    0x08ad,
    0x08b5,
    0x08bd,
    0x08c6,
    0x08ce,
    0x08d6,
    0x08de,
    0x08e7,
    0x08ef,
    0x08f7,
    0x08ff,
    0x0c00,
    0x0c08,
    0x0c10,
    0x0c18,
    0x0c21,
    0x0c29,
    0x0c31,
    0x0c39,
    0x0c42,
    0x0c4a,
    0x0c52,
    0x0c5a,
    0x0c63,
    0x0c6b,
    0x0c73,
    0x0c7b,
    0x0c84,
    0x0c8c,
    0x0c94,
    0x0c9c,
    0x0ca5,
    0x0cad,
    0x0cb5,
    0x0cbd,
    0x0cc6,
    0x0cce,
    0x0cd6,
    0x0cde,
    0x0ce7,
    0x0cef,
    0x0cf7,
    0x0cff,
    0x1000,
    0x1008,
    0x1010,
    0x1018,
    0x1021,
    0x1029,
    0x1031,
    0x1039,
    0x1042,
    0x104a,
    0x1052,
    0x105a,
    0x1063,
    0x106b,
    0x1073,
    0x107b,
    0x1084,
    0x108c,
    0x1094,
    0x109c,
    0x10a5,
    0x10ad,
    0x10b5,
    0x10bd,
    0x10c6,
    0x10ce,
    0x10d6,
    0x10de,
    0x10e7,
    0x10ef,
    0x10f7,
    0x10ff,
    0x1400,
    0x1408,
    0x1410,
    0x1418,
    0x1421,
    0x1429,
    0x1431,
    0x1439,
    0x1442,
    0x144a,
    0x1452,
    0x145a,
    0x1463,
    0x146b,
    0x1473,
    0x147b,
    0x1484,
    0x148c,
    0x1494,
    0x149c,
    0x14a5,
    0x14ad,
    0x14b5,
    0x14bd,
    0x14c6,
    0x14ce,
    0x14d6,
    0x14de,
    0x14e7,
    0x14ef,
    0x14f7,
    0x14ff,
    0x1800,
    0x1808,
    0x1810,
    0x1818,
    0x1821,
    0x1829,
    0x1831,
    0x1839,
    0x1842,
    0x184a,
    0x1852,
    0x185a,
    0x1863,
    0x186b,
    0x1873,
    0x187b,
    0x1884,
    0x188c,
    0x1894,
    0x189c,
    0x18a5,
    0x18ad,
    0x18b5,
    0x18bd,
    0x18c6,
    0x18ce,
    0x18d6,
    0x18de,
    0x18e7,
    0x18ef,
    0x18f7,
    0x18ff,
    0x1c00,
    0x1c08,
    0x1c10,
    0x1c18,
    0x1c21,
    0x1c29,
    0x1c31,
    0x1c39,
    0x1c42,
    0x1c4a,
    0x1c52,
    0x1c5a,
    0x1c63,
    0x1c6b,
    0x1c73,
    0x1c7b,
    0x1c84,
    0x1c8c,
    0x1c94,
    0x1c9c,
    0x1ca5,
    0x1cad,
    0x1cb5,
    0x1cbd,
    0x1cc6,
    0x1cce,
    0x1cd6,
    0x1cde,
    0x1ce7,
    0x1cef,
    0x1cf7,
    0x1cff
    };

/**
@internalComponent
*/
// Lookup table high long word for converting from 16bpp to 32bpp display modes
const TUint32 KBlt16to32High[256] =
    {
    0xff000000,
    0xff002000,
    0xff004100,
    0xff006100,
    0xff008200,
    0xff00a200,
    0xff00c300,
    0xff00e300,
    0xff080000,
    0xff082000,
    0xff084100,
    0xff086100,
    0xff088200,
    0xff08a200,
    0xff08c300,
    0xff08e300,
    0xff100000,
    0xff102000,
    0xff104100,
    0xff106100,
    0xff108200,
    0xff10a200,
    0xff10c300,
    0xff10e300,
    0xff180000,
    0xff182000,
    0xff184100,
    0xff186100,
    0xff188200,
    0xff18a200,
    0xff18c300,
    0xff18e300,
    0xff210000,
    0xff212000,
    0xff214100,
    0xff216100,
    0xff218200,
    0xff21a200,
    0xff21c300,
    0xff21e300,
    0xff290000,
    0xff292000,
    0xff294100,
    0xff296100,
    0xff298200,
    0xff29a200,
    0xff29c300,
    0xff29e300,
    0xff310000,
    0xff312000,
    0xff314100,
    0xff316100,
    0xff318200,
    0xff31a200,
    0xff31c300,
    0xff31e300,
    0xff390000,
    0xff392000,
    0xff394100,
    0xff396100,
    0xff398200,
    0xff39a200,
    0xff39c300,
    0xff39e300,
    0xff420000,
    0xff422000,
    0xff424100,
    0xff426100,
    0xff428200,
    0xff42a200,
    0xff42c300,
    0xff42e300,
    0xff4a0000,
    0xff4a2000,
    0xff4a4100,
    0xff4a6100,
    0xff4a8200,
    0xff4aa200,
    0xff4ac300,
    0xff4ae300,
    0xff520000,
    0xff522000,
    0xff524100,
    0xff526100,
    0xff528200,
    0xff52a200,
    0xff52c300,
    0xff52e300,
    0xff5a0000,
    0xff5a2000,
    0xff5a4100,
    0xff5a6100,
    0xff5a8200,
    0xff5aa200,
    0xff5ac300,
    0xff5ae300,
    0xff630000,
    0xff632000,
    0xff634100,
    0xff636100,
    0xff638200,
    0xff63a200,
    0xff63c300,
    0xff63e300,
    0xff6b0000,
    0xff6b2000,
    0xff6b4100,
    0xff6b6100,
    0xff6b8200,
    0xff6ba200,
    0xff6bc300,
    0xff6be300,
    0xff730000,
    0xff732000,
    0xff734100,
    0xff736100,
    0xff738200,
    0xff73a200,
    0xff73c300,
    0xff73e300,
    0xff7b0000,
    0xff7b2000,
    0xff7b4100,
    0xff7b6100,
    0xff7b8200,
    0xff7ba200,
    0xff7bc300,
    0xff7be300,
    0xff840000,
    0xff842000,
    0xff844100,
    0xff846100,
    0xff848200,
    0xff84a200,
    0xff84c300,
    0xff84e300,
    0xff8c0000,
    0xff8c2000,
    0xff8c4100,
    0xff8c6100,
    0xff8c8200,
    0xff8ca200,
    0xff8cc300,
    0xff8ce300,
    0xff940000,
    0xff942000,
    0xff944100,
    0xff946100,
    0xff948200,
    0xff94a200,
    0xff94c300,
    0xff94e300,
    0xff9c0000,
    0xff9c2000,
    0xff9c4100,
    0xff9c6100,
    0xff9c8200,
    0xff9ca200,
    0xff9cc300,
    0xff9ce300,
    0xffa50000,
    0xffa52000,
    0xffa54100,
    0xffa56100,
    0xffa58200,
    0xffa5a200,
    0xffa5c300,
    0xffa5e300,
    0xffad0000,
    0xffad2000,
    0xffad4100,
    0xffad6100,
    0xffad8200,
    0xffada200,
    0xffadc300,
    0xffade300,
    0xffb50000,
    0xffb52000,
    0xffb54100,
    0xffb56100,
    0xffb58200,
    0xffb5a200,
    0xffb5c300,
    0xffb5e300,
    0xffbd0000,
    0xffbd2000,
    0xffbd4100,
    0xffbd6100,
    0xffbd8200,
    0xffbda200,
    0xffbdc300,
    0xffbde300,
    0xffc60000,
    0xffc62000,
    0xffc64100,
    0xffc66100,
    0xffc68200,
    0xffc6a200,
    0xffc6c300,
    0xffc6e300,
    0xffce0000,
    0xffce2000,
    0xffce4100,
    0xffce6100,
    0xffce8200,
    0xffcea200,
    0xffcec300,
    0xffcee300,
    0xffd60000,
    0xffd62000,
    0xffd64100,
    0xffd66100,
    0xffd68200,
    0xffd6a200,
    0xffd6c300,
    0xffd6e300,
    0xffde0000,
    0xffde2000,
    0xffde4100,
    0xffde6100,
    0xffde8200,
    0xffdea200,
    0xffdec300,
    0xffdee300,
    0xffe70000,
    0xffe72000,
    0xffe74100,
    0xffe76100,
    0xffe78200,
    0xffe7a200,
    0xffe7c300,
    0xffe7e300,
    0xffef0000,
    0xffef2000,
    0xffef4100,
    0xffef6100,
    0xffef8200,
    0xffefa200,
    0xffefc300,
    0xffefe300,
    0xfff70000,
    0xfff72000,
    0xfff74100,
    0xfff76100,
    0xfff78200,
    0xfff7a200,
    0xfff7c300,
    0xfff7e300,
    0xffff0000,
    0xffff2000,
    0xffff4100,
    0xffff6100,
    0xffff8200,
    0xffffa200,
    0xffffc300,
    0xffffe300
    };
    
    
const TUint16 NormalisationTable16Bit[256] = {
	0,65280,32640,21760,16320,13056,10880,9326,8160,7254,6528,
	5935,5440,5022,4663,4352,4080,3840,3627,3436,3264,
	3109,2968,2839,2720,2612,2511,2418,2332,2252,2176,
	2106,2040,1979,1920,1866,1814,1765,1718,1674,1632,
	1593,1555,1519,1484,1451,1420,1389,1360,1333,1306,
	1280,1256,1232,1209,1187,1166,1146,1126,1107,1088,
	1071,1053,1037,1020,1005,990,975,960,947,933,
	920,907,895,883,871,859,848,837,827,816,
	806,797,787,778,768,760,751,742,734,726,
	718,710,702,695,688,680,673,667,660,653,
	647,640,634,628,622,616,611,605,599,594,
	589,583,578,573,568,563,558,554,549,544,
	540,536,531,527,523,519,515,510,507,503,
	499,495,491,488,484,480,477,474,470,467,
	463,460,457,454,451,448,445,442,439,436,
	433,430,427,424,422,419,416,414,411,408,
	406,403,401,399,396,394,391,389,387,384,
	382,380,378,376,374,371,369,367,365,363,
	361,359,357,355,353,351,350,348,346,344,
	342,340,339,337,335,334,332,330,329,327,
	325,324,322,320,319,317,316,314,313,311,
	310,308,307,306,304,303,301,300,299,297,
	296,295,293,292,291,289,288,287,286,284,
	283,282,281,279,278,277,276,275,274,272,
	271,270,269,268,267,266,265,264,263,262,
	261,260,259,258,256,
};


/**
This function will return value of converted 16bpp to 32bpp display modes. This lookup table is 
used to improve performance.
@internalComponent
*/

 EXPORT_C const TUint16* Convert16to32bppLow()
 	{
 	return KBlt16to32Low;
 	}
 
 EXPORT_C const TUint32* Convert16to32bppHigh()
 	{
 	return KBlt16to32High;
 	}

/**
Returns the pointer to the table of 16-bit normalisation table.
The table is currently used for performing un-multiplying Premultiplied Alpha color channels.
This lookup table for normalised alpha is compluted using this equation: Table[index] = (255*256) / index (where index is an 8 bit value)
Use: Let x be c * a/255, and y = c, then y = (x/a)*255, where a is in 0-255 range.
		To use this table, use y = (x * Table[a])>>8. i.e, the inaccurate division is converted 
		to more accurate multiplication and shift.
		
@return pointer to the normalisation table.
@internalTechnology
*/
EXPORT_C const TUint16* PtrTo16BitNormalisationTable()
	{
	return &NormalisationTable16Bit[0];
	}