uifw/ganes/src/HgVgEGL.cpp
branchRCL_3
changeset 25 941195f2d488
parent 10 9f56a4e1b8ab
child 51 fcdfafb36fe7
equal deleted inserted replaced
23:3d340a0166ff 25:941195f2d488
   290     
   290     
   291     if (bitmap)
   291     if (bitmap)
   292         {
   292         {
   293         // create temporary buffer for data
   293         // create temporary buffer for data
   294         RBuf8 buf;
   294         RBuf8 buf;
   295         buf.Create(aRect.Width() * aRect.Height() * 4);
   295         TInt bufCreateErr = buf.Create(aRect.Width() * aRect.Height() * 4);
       
   296         if(bufCreateErr != KErrNone) {
       
   297             buf.Close(); //just in case
       
   298             delete bitmap;
       
   299             bitmap = NULL;
       
   300             return NULL;
       
   301         }
   296         buf.Fill(0xFF);
   302         buf.Fill(0xFF);
   297 
   303 
   298         // read data back from vg (this is sloooww)
   304         // read data back from vg (this is sloooww)
   299         VGint dataStride = 0;
   305         VGint dataStride = 0;
   300         if (aLandscape)
   306         if (aLandscape)
   301             {
   307             {
   302             dataStride = 4 * aRect.Height();
   308             dataStride = 4 * aRect.Height();
   303             vgReadPixels((void*)buf.Ptr(), 
   309             vgReadPixels((void*)buf.Ptr(), 
   304                     dataStride, VG_sARGB_8888, 0, 0, aRect.Height(), aRect.Width());
   310                          dataStride, VG_sARGB_8888, 0, 0, aRect.Height(), aRect.Width());
   305             }
   311             }
   306         else
   312         else
   307             {
   313             {
   308             dataStride = 4 * aRect.Width();
   314             dataStride = 4 * aRect.Width();
   309             vgReadPixels((void*)buf.Ptr(), 
   315             vgReadPixels((void*)buf.Ptr(), 
   310                     dataStride, VG_sARGB_8888, 0, 0, aRect.Width(), aRect.Height());            
   316                          dataStride, VG_sARGB_8888, 0, 0, aRect.Width(), aRect.Height());
   311             }
   317             }
   312 
   318 
   313         // because of bug in vg driver we need to swap memory using for loop, because
   319         // because of bug in vg driver we need to swap memory using for loop, because
   314         // negative datastrides cause crash
   320         // negative datastrides cause crash
   315         bitmap->Create(TSize(aRect.Width(), aRect.Height()), EColor16MA);
   321         TInt bitmapCreateErr = bitmap->Create(TSize(aRect.Width(), aRect.Height()), EColor16MA);
       
   322         if(bitmapCreateErr != KErrNone) {
       
   323             buf.Close();
       
   324             delete bitmap;
       
   325             bitmap = NULL;
       
   326             return NULL;
       
   327         }
       
   328         
   316         bitmap->BeginDataAccess();
   329         bitmap->BeginDataAccess();
   317         if (!aLandscape)
   330         if (!aLandscape)
   318             {
   331             {
   319             TUint8* ptrTrg = (TUint8*)bitmap->DataAddress();
   332             TUint8* ptrTrg = (TUint8*)bitmap->DataAddress();
   320             TUint8* ptrSrc = (TUint8*)buf.Ptr();
   333             TUint8* ptrSrc = (TUint8*)buf.Ptr();