AppSrc/TextureLoader.cpp
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     1
/*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     3
* All rights reserved.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     4
* This component and the accompanying materials are made available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     6
* which accompanies this distribution, and is available
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     8
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
     9
* Initial Contributors:
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    11
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    12
* Contributors: Juha Kauppinen, Mika Hokkanen
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    13
* 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    14
* Description: Photo Browser
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    15
*
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    16
*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    17
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    18
// INCLUDE FILES
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    19
#include "TextureLoader.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    20
#include <GLES\egl.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    21
#include "ImagicContainerBrowser.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    22
#include "ImagicViewBrowser.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    23
#include <hal.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    24
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    25
// INCLUDES
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    26
#include <coecntrl.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    27
#include <aknnotewrappers.h>
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    28
#include "ImagicAppUi.h"
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    29
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    30
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    31
// Constructor and destructor
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    32
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    33
CTextureLoader::CTextureLoader(CImagicAppUi* aImagicAppUi, CImagicContainerBrowser* aContainer, CImagicViewBrowser* aView, 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    34
                               RCriticalSection* aDrawLock) :
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    35
        //CActive(CActive::EPriorityStandard),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    36
        CActive(CActive::EPriorityLow),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    37
        //CActive(CActive::EPriorityStandard),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    38
        //CActive(CActive::EPriorityUserInput),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    39
        //CActive(CActive::EPriorityHigh),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    40
        iImagicAppUi(aImagicAppUi),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    41
        iContainer(aContainer),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    42
        iView(aView),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    43
        iDrawLock(aDrawLock),
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    44
        iData(NULL)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    45
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    46
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    47
    DP0_IMAGIC(_L("CTextureLoader::CTextureLoader++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    48
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    49
    // Add loader to active scheduler
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    50
    CActiveScheduler::Add(this);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    51
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    52
    DP0_IMAGIC(_L("CTextureLoader::CTextureLoader--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    53
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    54
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    55
void CTextureLoader::ConstructL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    56
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    57
    DP0_IMAGIC(_L("CTextureLoader::ConstructL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    58
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    59
    // Create small default bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    60
    iBitmap = new (ELeave) CFbsBitmap();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    61
    iSmileBitmap = new (ELeave) CFbsBitmap();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    62
    iZoomBitmap = new (ELeave) CFbsBitmap();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    63
#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    64
    iBitmap->Create(TSize(10, 10), EColor16MU);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    65
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    66
    iBitmap->Create(TSize(10, 10), EColor16M);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    67
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    68
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    69
    // Create bitmap scaler
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    70
    iBitmapScaler = CBitmapScaler::NewL();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    71
    iBitmapScaler->UseLowMemoryAlgorithm(ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    72
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    73
    iRGB2BGRDone = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    74
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    75
#ifdef ICONS_ENABLAD
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    76
    LoadIcons();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    77
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    78
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    79
    DP0_IMAGIC(_L("CTextureLoader::ConstructL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    80
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    81
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    82
CTextureLoader::~CTextureLoader()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    83
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    84
    DP0_IMAGIC(_L("CTextureLoader::~CTextureLoader++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    85
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    86
    // Cancel ongoing process
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    87
    Cancel();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    88
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    89
    // Free memory
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    90
    delete iBitmapScaler;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    91
    delete iBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    92
    delete iSmileBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    93
    delete iZoomBitmap;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    94
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    95
    iBitmapArray.Close();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    96
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    97
    DP0_IMAGIC(_L("CTextureLoader::~CTextureLoader--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    98
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
    99
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   100
void CTextureLoader::GetPngL(TFileName& afilepath, CFbsBitmap* aBitmap) 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   101
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   102
    DP0_IMAGIC(_L("CTextureLoader::GetPngL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   103
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   104
    CImageDecoder* idecoder = CImageDecoder::FileNewL(CEikonEnv::Static()->FsSession(), 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   105
            afilepath, _L8("image/png")/*, CImageDecoder::EOptionAlwaysThread*/);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   106
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   107
    TFrameInfo iFrameInfo = idecoder->FrameInfo(0);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   108
    aBitmap->Create(iFrameInfo.iOverallSizeInPixels, EColor16MA );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   109
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   110
    TRequestStatus aStatus = KRequestPending; 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   111
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   112
    TRAPD(err1, idecoder->Convert( &aStatus, *aBitmap, 0 ));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   113
    if(err1 == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   114
        User::WaitForRequest( aStatus );   
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   115
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   116
    delete idecoder;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   117
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   118
    DP0_IMAGIC(_L("CTextureLoader::GetPngL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   119
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   120
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   121
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   122
void CTextureLoader::LoadIcons()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   123
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   124
    TInt err = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   125
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   126
    TFileName filename;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   127
    filename = KSmileFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   128
    TRAP(err, GetPngL(filename, iSmileBitmap));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   129
    if(err == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   130
        iBitmapArray.Append(iSmileBitmap);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   131
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   132
    err = KErrNone;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   133
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   134
    filename = KZoomFileName;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   135
    TRAP(err, GetPngL(filename, iZoomBitmap));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   136
    if(err == KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   137
        iBitmapArray.Append(iZoomBitmap);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   138
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   139
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   140
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   141
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   142
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   143
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   144
// Returns loader loading status
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   145
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   146
TBool CTextureLoader::IsActiveAndRunning()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   147
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   148
    // Make sure that loader is not active
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   149
    if (IsRunning())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   150
        return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   151
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   152
        return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   153
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   154
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   155
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   156
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   157
// Loads picture and stores the OpenGL index into specified variable
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   158
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   159
void CTextureLoader::LoadL(CImageData* aData, TThumbSize aResolution)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   160
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   161
    DP1_IMAGIC(_L("CTextureLoader::LoadL++ - resolution: %d"), aResolution);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   162
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   163
    // Make sure that loader is not active
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   164
    if (IsRunning())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   165
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   166
        DP0_IMAGIC(_L("CTextureLoader::LoadL - already running, KErrInUse"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   167
        User::Leave(KErrInUse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   168
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   169
    // Check that image is not already loaded
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   170
    else if (aData->iGridData.iGlSuperHQTextIndex && aResolution == EFullSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   171
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   172
        DP0_IMAGIC(_L("CTextureLoader::LoadL - EFullRes KErrAlreadyExists"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   173
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   174
        User::Leave(KErrAlreadyExists);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   175
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   176
    else if (aData->iGridData.iGlHQ512TextIndex && aResolution == ESize512x512)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   177
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   178
        DP0_IMAGIC(_L("CTextureLoader::LoadL - ESize512x512 KErrAlreadyExists"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   179
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   180
        User::Leave(KErrAlreadyExists);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   181
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   182
    else if (aData->iGridData.iGlLQ128TextIndex && aResolution == ESize128x128)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   183
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   184
        DP0_IMAGIC(_L("CTextureLoader::LoadL -  ESize128x128 KErrAlreadyExists"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   185
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   186
        User::Leave(KErrAlreadyExists);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   187
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   188
    else if (aData->iGridData.iGlLQ32TextIndex && aResolution == ESize32x32)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   189
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   190
        DP0_IMAGIC(_L("CTextureLoader::LoadL - ESize32x32 KErrAlreadyExists"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   191
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   192
        User::Leave(KErrAlreadyExists);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   193
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   194
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   195
    iContainer->DynamicUnLoading();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   196
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   197
    // Store image data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   198
    iData = aData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   199
    iResolution = aResolution;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   200
    iHighQuality = EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   201
    if(aResolution == EFullSize || aResolution == ESize512x512)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   202
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   203
        iHighQuality = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   204
        //iContainer->DynamicUnLoading();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   205
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   206
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   207
    // Call engine to load picture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   208
    TRAPD(err, iView->LoadBitmapsToBrowserL(iData, aResolution));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   209
    if (err != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   210
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   211
        //if (err == KErrNotFound || err == KErrPathNotFound)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   212
            iData->SetImageReady(aResolution, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   213
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   214
        User::Leave(err);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   215
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   216
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   217
    DP0_IMAGIC(_L("CTextureLoader::LoadL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   218
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   219
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   220
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   221
// Releases 512x512 and Max resolution textures
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   222
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   223
void CTextureLoader::ReleaseSuperHResTexture(CImageData* aGridData)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   224
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   225
    DP0_IMAGIC(_L("CTextureLoader::ReleaseHResTextures++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   226
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   227
    if(aGridData->iGridData.iGlSuperHQTextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   228
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   229
        glDeleteTextures(1, &(aGridData->iGridData.iGlSuperHQTextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   230
        aGridData->iGridData.iGlSuperHQTextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   231
        DP0_IMAGIC(_L("CTextureLoader::ReleaseHResTextures - glSuperHQTextIndex released"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   232
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   233
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   234
    DP0_IMAGIC(_L("CTextureLoader::ReleaseHResTextures--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   235
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   236
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   237
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   238
// Unloads picture from specified index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   239
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   240
void CTextureLoader::ReleaseHQ512Textures()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   241
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   242
    DP0_IMAGIC(_L("CTextureLoader::ReleaseQ512Textures++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   243
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   244
    TInt mem = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   245
    TInt ret = HAL::Get(HALData::EMemoryRAMFree, mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   246
    DP1_IMAGIC(_L("CTextureLoader::ReleaseQ512Textures - Free RAM: %d"), mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   247
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   248
    for(TInt i=0; i<iContainer->iIEngine->GetTotalNumOfImages(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   249
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   250
        if(i >= iContainer->GetCurrentIndex() + CImagicContainerBrowser::K512TNImageBuffer || 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   251
           i <= iContainer->GetCurrentIndex() - CImagicContainerBrowser::K512TNImageBuffer)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   252
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   253
            CImageData* imageData = iImagicAppUi->GetEngine()->GetImageData(i);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   254
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   255
            if(imageData->iGridData.iGlSuperHQTextIndex!=0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   256
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   257
                glDeleteTextures(1, &(imageData->iGridData.iGlSuperHQTextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   258
                imageData->iGridData.iGlSuperHQTextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   259
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   260
            
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   261
            if(i != iContainer->GetCurrentIndex())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   262
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   263
                if (imageData->iGridData.iGlHQ512TextIndex!=0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   264
                    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   265
                    glDeleteTextures(1, &(imageData->iGridData.iGlHQ512TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   266
                    imageData->iGridData.iGlHQ512TextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   267
                    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   268
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   269
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   270
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   271
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   272
    ret = HAL::Get(HALData::EMemoryRAMFree, mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   273
    DP1_IMAGIC(_L("CTextureLoader::ReleaseQ512Textures - Free RAM: %d"), mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   274
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   275
    DP0_IMAGIC(_L("CTextureLoader::ReleaseQ512Textures--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   276
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   277
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   278
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   279
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   280
// Unloads picture from specified index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   281
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   282
void CTextureLoader::UnloadLQ512Tex(CImageData* aData) const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   283
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   284
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ512Tex++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   285
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   286
    /*TInt mem = 0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   287
    TInt ret = HAL::Get(HALData::EMemoryRAMFree, mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   288
    DP1_IMAGIC(_L("CTextureLoader::UnloadLQ512Tex - Free RAM: %d"), mem);*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   289
                
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   290
    // Delete the picture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   291
    if (aData->iGridData.iGlHQ512TextIndex!=0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   292
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   293
        glDeleteTextures(1, &(aData->iGridData.iGlHQ512TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   294
        aData->iGridData.iGlHQ512TextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   295
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   296
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   297
    /*ret = HAL::Get(HALData::EMemoryRAMFree, mem);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   298
    DP1_IMAGIC(_L("CTextureLoader::UnloadLQ512Tex - Free RAM: %d"), mem);*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   299
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   300
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ512Tex--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   301
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   302
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   303
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   304
// Unloads picture from specified index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   305
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   306
void CTextureLoader::UnloadLQ128Tex(CImageData* aData) const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   307
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   308
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ128Tex++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   309
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   310
    // Delete the picture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   311
    if (aData->iGridData.iGlLQ128TextIndex!=0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   312
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   313
        glDeleteTextures(1, &(aData->iGridData.iGlLQ128TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   314
        aData->iGridData.iGlLQ128TextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   315
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   316
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   317
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ128Tex--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   318
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   319
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   320
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   321
// Unloads picture from specified index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   322
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   323
void CTextureLoader::UnloadLQ32Tex(CImageData* aData) const
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   324
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   325
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ32Tex++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   326
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   327
    if (aData->iGridData.iGlLQ32TextIndex!=0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   328
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   329
        glDeleteTextures(1, &(aData->iGridData.iGlLQ32TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   330
        aData->iGridData.iGlLQ32TextIndex=0;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   331
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   332
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   333
    DP0_IMAGIC(_L("CTextureLoader::UnloadLQ32Tex--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   334
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   335
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   336
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   337
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   338
// Image is loaded by engine, iScale it for OpenGL if needed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   339
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   340
void CTextureLoader::ImageLoadedL(TInt aError, CFbsBitmap* aBitmap, TInt aGLMaxRes)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   341
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   342
    DP0_IMAGIC(_L("CTextureLoader::ImageLoadedL++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   343
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   344
    if(aError == KErrNotFound || aError == KErrPathNotFound)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   345
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   346
        DP0_IMAGIC(_L("CTextureLoader::ImageLoadedL - Error: KErrNotFound/KErrPathNotFound"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   347
        iData->SetImageReady(iResolution, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   348
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   349
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   350
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   351
    else if(aError == KErrCorrupt)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   352
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   353
        DP0_IMAGIC(_L("CTextureLoader::ImageLoadedL - Error: KErrCorrupt"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   354
        iData->SetImageReady(iResolution, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   355
        iData->iGridData.iCorrupted = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   356
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   357
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   358
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   359
    else if(aError == KErrCancel)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   360
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   361
        //Image loading is cancelled only for superzoom iage loading
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   362
        DP1_IMAGIC(_L("CTextureLoader::ImageLoadedL - Error: %d"), aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   363
        //iData->SetImageReady(iResolution, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   364
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   365
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   366
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   367
    else if(aError != KErrNone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   368
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   369
        DP1_IMAGIC(_L("CTextureLoader::ImageLoadedL - Error: %d"), aError);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   370
        iData->SetImageReady(iResolution, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   371
        iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   372
        return;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   373
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   374
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   375
    // Set image ready to database
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   376
    //iData->SetImageReady(iResolution, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   377
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   378
    iGLMaxRes = aGLMaxRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   379
    iImageSize = aBitmap->SizeInPixels();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   380
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   381
    //Check loaded image real size and check if scaling is needed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   382
    iScalingNeeded = IsScalingNeeded(iImageSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   383
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   384
    TSize size;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   385
    // Check does image need to be scaled
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   386
    if(!iScalingNeeded)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   387
        { //Image is already proper size, just create texture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   388
        CreateThumbnailTexture(aBitmap);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   389
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   390
    //Calculate new image size if scaling is needed(in case size is not pow^2)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   391
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   392
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   393
        size.iWidth = ScaleDown( iImageSize.iWidth );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   394
        size.iHeight = ScaleDown( iImageSize.iHeight );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   395
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   396
        // Setup target bitmap to be large enough
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   397
        iBitmap->Reset();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   398
#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   399
        iBitmap->Create(size, EColor16MU);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   400
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   401
        iBitmap->Create(size, EColor16M);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   402
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   403
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   404
        // Setup image quality
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   405
        CBitmapScaler::TQualityAlgorithm quality = CBitmapScaler::EMinimumQuality;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   406
        /*if(iHighQuality)*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   407
            quality=CBitmapScaler::EMaximumQuality;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   408
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   409
        iBitmapScaler->SetQualityAlgorithm(quality);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   410
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   411
        // Start scaling the bitmap, RunL will be called when complete
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   412
        iBitmapScaler->Scale(&iStatus, *aBitmap, *iBitmap, EFalse);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   413
        if(!IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   414
            SetActive();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   415
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   416
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   417
    DP0_IMAGIC(_L("CTextureLoader::ImageLoadedL--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   418
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   419
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   420
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   421
// Creates OpenGL texture of given bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   422
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   423
TInt CTextureLoader::CreateTexture(CFbsBitmap* aBitmap, TBool aHighQuality)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   424
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   425
    DP0_IMAGIC(_L("CTextureLoader::CreateTexture++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   426
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   427
    // Get image data size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   428
    TInt width = aBitmap->SizeInPixels().iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   429
    TInt height = aBitmap->SizeInPixels().iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   430
    TInt dataSize = width * height;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   431
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   432
    // Lock bitmap before modifying its data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   433
    aBitmap->LockHeap( EFalse );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   434
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   435
    // The data in the texture are in RGBA order but is read in BGRA order.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   436
    // So we have to swap the 1st and 3rd bytes.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   437
    TUint8* data = (TUint8 *)aBitmap->DataAddress();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   438
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   439
#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   440
    dataSize*=4;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   441
    for (TInt i=0; i<dataSize; i+=4)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   442
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   443
        TUint8 temp = data[i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   444
        data[i] = data[i+2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   445
        data[i+2] = temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   446
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   447
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   448
    dataSize*=3;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   449
    //RDebug::Print(_L("CTextureLoader::CreateTexture - Bitmap Data seize: %d"), dataSize);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   450
    for(TInt i=0; i<dataSize; i+=3)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   451
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   452
        TUint8 temp = data[i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   453
        data[i] = data[i+2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   454
        data[i+2] = temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   455
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   456
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   457
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   458
    // Generate OpenGL texture index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   459
    GLuint index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   460
    glGenTextures(1, &index);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   461
    glBindTexture(GL_TEXTURE_2D, index);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   462
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   463
//#define MIPMAPPING
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   464
#ifdef MIPMAPPING
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   465
       //Set mipmapping on
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   466
       //glHint( GL_GENERATE_MIPMAP_HINT, GL_NICEST );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   467
       glHint( GL_GENERATE_MIPMAP_HINT, GL_FASTEST );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   468
       glTexParameteri( GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   469
       //Select mipmapping filtering mode
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   470
       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   471
       //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);//linear gives better image quality but slover rendering
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   472
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   473
       
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   474
    // Set texture parameters
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   475
    //GL_NEAREST is faster than GL_LINEAR but quality is better in linear
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   476
    if(!aHighQuality)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   477
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   478
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   479
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   480
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   481
    else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   482
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   483
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   484
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   485
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   486
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   487
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   488
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   489
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   490
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   491
#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   492
    // Load texture into OpenGL memory
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   493
    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height,
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   494
                  0, GL_RGBA, GL_UNSIGNED_BYTE, data );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   495
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   496
       glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   497
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   498
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   499
    // Unlock bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   500
    aBitmap->UnlockHeap( EFalse );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   501
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   502
    return index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   503
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   504
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   505
void CTextureLoader::CreateThumbnailTexture(CFbsBitmap* aBitmap)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   506
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   507
    DP0_IMAGIC(_L("CTextureLoader::CreateThumbnailTexture++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   508
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   509
    TInt index = CreateTexture(aBitmap, iHighQuality);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   510
    iContainer->SetTextIndex(index);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   511
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   512
    //Image has been loaded, store index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   513
    if(iResolution == ESize512x512)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   514
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   515
        //Check that we really have high resolution image
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   516
        if((aBitmap->SizeInPixels().iHeight == 512 && aBitmap->SizeInPixels().iWidth == 1024) || 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   517
           (aBitmap->SizeInPixels().iHeight == 1024 && aBitmap->SizeInPixels().iWidth == 512) ||
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   518
           (aBitmap->SizeInPixels().iHeight == 512 && aBitmap->SizeInPixels().iWidth == 512))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   519
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   520
            iData->iGridData.iGlHQ512TextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   521
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   522
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   523
            {//if no high resolution image, delete existing texture from 128x128 slot and bind newly created texture there
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   524
            if(aBitmap->SizeInPixels().iHeight == 128)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   525
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   526
                if(iData->iGridData.iGlLQ128TextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   527
                    glDeleteTextures(1, &(iData->iGridData.iGlLQ128TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   528
                iData->iGridData.iGlLQ128TextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   529
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   530
            if(aBitmap->SizeInPixels().iHeight == 32)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   531
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   532
                if(iData->iGridData.iGlLQ32TextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   533
                    glDeleteTextures(1, &(iData->iGridData.iGlLQ32TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   534
                iData->iGridData.iGlLQ32TextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   535
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   536
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   537
        iPreviousData = iData;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   538
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   539
    else if(iResolution == ESize128x128)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   540
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   541
        //Check if we had exif tn already binded and delete it
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   542
        if(iData->iGridData.iGlLQ128TextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   543
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   544
            glDeleteTextures(1, &(iData->iGridData.iGlLQ128TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   545
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   546
        iData->iGridData.iGlLQ128TextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   547
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   548
    else if(iResolution == ESize32x32)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   549
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   550
        //Check if we had exif tn already binded and delete it
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   551
        if(iData->iGridData.iGlLQ32TextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   552
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   553
            glDeleteTextures(1, &(iData->iGridData.iGlLQ32TextIndex));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   554
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   555
        iData->iGridData.iGlLQ32TextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   556
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   557
#ifdef SUPERZOOM
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   558
    else if(iResolution == EFullSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   559
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   560
        iData->iGridData.iGlSuperHQTextIndex = index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   561
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   562
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   563
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   564
    //Order container to draw scaled image
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   565
    /*if(iContainer->GetDrawMode() == EOneByOne)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   566
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   567
        //Check if loaded image is current one and draw it
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   568
        CImageData* imageData = iImagicAppUi->GetEngineL()->GetImageData(iContainer->GetCurrentIndex(), iImagicAppUi->GetUIDrawMode());
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   569
        if(imageData->iGridData.iGlSuperHQTextIndex != 0)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   570
            iContainer->DrawNow();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   571
        else if(imageData->iGridData.iGlHQ512TextIndex == iData->iGridData.iGlHQ512TextIndex )
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   572
            iContainer->DrawNow();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   573
        else if(imageData->iGridData.iGlLQ128TextIndex == iData->iGridData.iGlLQ128TextIndex )
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   574
            iContainer->DrawNow();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   575
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   576
    else*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   577
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   578
        iContainer->DrawNow();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   579
        DP0_IMAGIC(_L("<----------- CTextureLoader DrawNow ----------->"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   580
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   581
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   582
    //Loader is finished
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   583
    iData = NULL;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   584
    aBitmap->Reset();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   585
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   586
    //Set loader back on
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   587
    //iContainer->SetLoadingOn(ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   588
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   589
    DP0_IMAGIC(_L("CTextureLoader::CreateThumbnailTexture--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   590
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   591
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   592
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   593
// Active object's RunL
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   594
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   595
void CTextureLoader::RunL()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   596
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   597
    ASSERT(iBitmap);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   598
    CreateThumbnailTexture(iBitmap);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   599
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   600
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   601
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   602
// Active object's DoCancel
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   603
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   604
void CTextureLoader::DoCancel()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   605
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   606
    DP0_IMAGIC(_L("CTextureLoader::DoCancel++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   607
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   608
    // Reset bitmap and cancel scaler
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   609
    if (IsActive())
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   610
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   611
        iBitmap->Reset();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   612
        iBitmapScaler->Cancel();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   613
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   614
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   615
    DP0_IMAGIC(_L("CTextureLoader::DoCancel--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   616
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   617
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   618
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   619
// Active object's RunError
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   620
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   621
void CTextureLoader::RunError()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   622
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   623
    // Nothing here
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   624
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   625
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   626
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   627
// Scales given value to power of two
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   628
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   629
TInt CTextureLoader::ScaleDown(TInt aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   630
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   631
    DP0_IMAGIC(_L("CTextureLoader::ScaleDown++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   632
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   633
    if(iResolution == ESize32x32)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   634
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   635
        return 32;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   636
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   637
    else if(iResolution == ESize128x128 || iResolution == ESize512x512)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   638
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   639
        return 128;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   640
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   641
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   642
    // Find new size for picture
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   643
    TInt newSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   644
    for (newSize=1; newSize<aSize; newSize*=2)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   645
        ;   // Just do nothing
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   646
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   647
    // Do not iScale up
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   648
    if(newSize > aSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   649
        newSize/=2;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   650
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   651
    // Limit size to some maximum value
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   652
    TInt maxSize=256;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   653
    TInt minSize = 32;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   654
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   655
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   656
    if(iHighQuality)    // High quality pictures are lot bigger
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   657
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   658
/*#ifdef __WINS__
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   659
        maxSize=512;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   660
#endif*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   661
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   662
#ifdef SUPERZOOM
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   663
        //maxSize=iGLMaxRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   664
        if(iGLMaxRes >= 1024)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   665
            maxSize=1024;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   666
        else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   667
            maxSize=iGLMaxRes;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   668
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   669
#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   670
        maxSize=512;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   671
#endif
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   672
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   673
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   674
    // Check that size is below maximum and min size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   675
    if(newSize > maxSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   676
        newSize=maxSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   677
    if(newSize < minSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   678
        newSize=minSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   679
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   680
    DP0_IMAGIC(_L("CTextureLoader::ScaleDown--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   681
    return newSize;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   682
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   683
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   684
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   685
// Creates OpenGL texture of given bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   686
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   687
void CTextureLoader::CreateIconTextures()
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   688
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   689
    DP0_IMAGIC(_L("CTextureLoader::CreateIconTextures++"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   690
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   691
    for(TInt i=0; i<iBitmapArray.Count(); i++)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   692
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   693
        // Get image data size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   694
        TInt width = iBitmapArray[i]->SizeInPixels().iWidth;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   695
        TInt height = iBitmapArray[i]->SizeInPixels().iHeight;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   696
        TInt dataSize = width * height;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   697
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   698
        // Lock bitmap before modifying its data
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   699
        iBitmapArray[i]->LockHeap( EFalse );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   700
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   701
        // The data in the texture are in RGBA order but is read in BGRA order.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   702
        // So we have to swap the 1st and 3rd bytes.
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   703
        TUint8* data = (TUint8 *)iBitmapArray[i]->DataAddress();
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   704
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   705
        if(!iRGB2BGRDone)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   706
            {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   707
//#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   708
            dataSize*=4;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   709
            for (TInt i=0; i<dataSize; i+=4)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   710
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   711
                TUint8 temp = data[i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   712
                data[i] = data[i+2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   713
                data[i+2] = temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   714
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   715
/*#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   716
            dataSize*=3;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   717
            for(TInt i=0; i<dataSize; i+=3)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   718
                {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   719
                TUint8 temp = data[i];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   720
                data[i] = data[i+2];
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   721
                data[i+2] = temp;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   722
                }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   723
#endif*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   724
            }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   725
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   726
        // Generate OpenGL texture index
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   727
        //GLuint index;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   728
        glGenTextures(1, &iSmileTexIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   729
        glBindTexture(GL_TEXTURE_2D, iSmileTexIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   730
        iIconTextureIndexes.Append(iSmileTexIndex);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   731
        //iContainer->SetTextIndex(index);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   732
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   733
        // Set texture parameters
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   734
        //GL_NEAREST is faster than GL_LINEAR but quality is better in linear
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   735
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   736
        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   737
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   738
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   739
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   740
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   741
    //#ifdef USE_RGBA
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   742
        // Load texture into OpenGL memory
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   743
        glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   744
    /*#else
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   745
           glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   746
    #endif*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   747
        
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   748
        // Unlock bitmap
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   749
       iBitmapArray[i]->UnlockHeap( EFalse );
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   750
       }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   751
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   752
    iRGB2BGRDone = ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   753
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   754
    iContainer->IconTexturesLoaded(iIconTextureIndexes);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   755
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   756
    DP0_IMAGIC(_L("CTextureLoader::CreateIconTextures--"));
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   757
    }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   758
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   759
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   760
/*----------------------------------------------------------------------*/
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   761
// Check if scaling is needed
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   762
//
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   763
TBool CTextureLoader::IsScalingNeeded(TSize aImageSize)
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   764
    {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   765
//Check loaded image real size and over write high quality flag
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   766
    if((aImageSize.iHeight == 1024 && aImageSize.iWidth == 1024) ||
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   767
       (aImageSize.iHeight == 512 && aImageSize.iWidth == 1024) || 
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   768
       (aImageSize.iHeight == 1024 && aImageSize.iWidth == 512) ||
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   769
       (aImageSize.iHeight == 512 && aImageSize.iWidth == 512))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   770
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   771
        // Set image ready to database, only if resolution was maching with Imagic TN size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   772
        iData->SetImageReady(ESize512x512, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   773
        return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   774
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   775
    if((aImageSize.iHeight == 128 && aImageSize.iWidth == 128))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   776
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   777
        // Set image ready to database, only if resolution was maching with Imagic TN size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   778
        iData->SetImageReady(ESize128x128, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   779
        return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   780
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   781
    if((aImageSize.iHeight == 32 && aImageSize.iWidth == 32))
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   782
        {
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   783
        // Set image ready to database, only if resolution was maching with Imagic TN size
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   784
        iData->SetImageReady(ESize32x32, ETrue);
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   785
        return EFalse;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   786
        }
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   787
    
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   788
    return ETrue;
93fff7023be8 Initial version
jkauppin
parents:
diff changeset
   789
    }