uifw/ganes/src/HgVgEGL.cpp
changeset 47 2f0c06423c72
parent 46 0e1e0022bd03
child 53 3c67ea82fafc
--- a/uifw/ganes/src/HgVgEGL.cpp	Thu Jul 29 14:21:56 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,321 +0,0 @@
-/*
-* Copyright (c) 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 FILES
-#include "HgVgEGL.h"
-#include "HgVgConstants.h"
-#include <coecntrl.h>
-
-
-using namespace HgVgConstants;
-
-// ============================ MEMBER FUNCTIONS ===============================
-// -----------------------------------------------------------------------------
-// CHgVgEGL::NewL()
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CHgVgEGL* CHgVgEGL::NewL(RWindow& aWindow)
-    {
-    CHgVgEGL* self = new ( ELeave ) CHgVgEGL();
-    CleanupStack::PushL (self );
-    self->ConstructL(aWindow);
-    CleanupStack::Pop (self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgVgEGL::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CHgVgEGL::ConstructL (RWindow& aWindow)
-    {
-    InitEGL(aWindow);
-    }
-
-// -----------------------------------------------------------------------------
-// CHgVgEGL::CHgVgEGL()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CHgVgEGL::CHgVgEGL()
-    {
-    }
-        
-// -----------------------------------------------------------------------------
-// CHgVgEGL::~CHgVgEGL()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CHgVgEGL::~CHgVgEGL ( )
-    {
-    DestroyEGL();
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::InitWindowSurfaceL()
-// ---------------------------------------------------------------------------
-//     
-void CHgVgEGL::InitWindowSurfaceL(RWindow& aWindow)
-    {
-    RDebug::Print(_L("CHgVgEGL::InitWindowSurface"));
-
-    InitEGL(aWindow);
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::FreeWindowSurface()
-// ---------------------------------------------------------------------------
-//     
-void CHgVgEGL::FreeWindowSurface()
-    {
-    RDebug::Print(_L("CHgVgEGL::FreeWindowSurface"));
-
-    // make sure there is nothing pending.
-    vgFinish();
-    
-    // unbind current surface.
-    eglMakeCurrent(iDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, iContextVg);
-
-    // destroy surface
-    eglDestroySurface(iDisplay, iSurface);
-    iSurface = VG_INVALID_HANDLE;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::ReadyToRender()
-// ---------------------------------------------------------------------------
-//     
-TBool CHgVgEGL::ReadyToRender() const
-    {
-    return iSurface && iDisplay && iContextVg;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::SwapBuffers()
-// ---------------------------------------------------------------------------
-//     
-void CHgVgEGL::SwapBuffers()
-    {
-    eglSwapBuffers(iDisplay, iSurface);
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::Display()
-// ---------------------------------------------------------------------------
-//     
-EGLDisplay CHgVgEGL::Display() const
-    {
-    return iDisplay;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::Surface
-// ---------------------------------------------------------------------------
-//     
-EGLSurface CHgVgEGL::Surface() const
-    {
-    return iSurface;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::Context()
-// ---------------------------------------------------------------------------
-//     
-EGLContext CHgVgEGL::Context() const
-    {
-    return iContextVg;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::CurrentConfig()
-// ---------------------------------------------------------------------------
-//     
-EGLConfig CHgVgEGL::CurrentConfig() const
-    {
-    return iChosenConfig;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::InitEGL()
-// ---------------------------------------------------------------------------
-//     
-void CHgVgEGL::InitEGL(RWindow& aWindow)
-    {
-    
-    // if we are just resizing or recreating
-    if (iContextVg != VG_INVALID_HANDLE)
-        {
-
-        
-        // save old surface
-        EGLSurface oldSurface = VG_INVALID_HANDLE;
-        if (iSurface != VG_INVALID_HANDLE)
-            {        
-            // make sure there is nothing pending.
-            vgFinish();
-
-            oldSurface = iSurface;
-        
-            // unbind current surface.
-            eglMakeCurrent(iDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, iContextVg);            
-            }
-        
-        // create new surface
-        InitEGLWindowSurfaceL(aWindow);
-        
-        // bind new surface
-        eglMakeCurrent(iDisplay, iSurface, iSurface, iContextVg);
-        
-        if (oldSurface != VG_INVALID_HANDLE)
-            {
-            // free old surface
-            eglDestroySurface(iDisplay,oldSurface);
-            }
-
-        }
-    else
-        {
-
-        // get display
-        iDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
-        
-        // intialize egl
-        eglInitialize(iDisplay, NULL, NULL);
-        
-        // find suitable display config
-        EGLint numConfigs;
-        iChosenConfig = 0;
-        
-        const EGLint    KColorAttribList[] =
-                {
-                EGL_RED_SIZE,           KSurfaceRedBits,
-                EGL_GREEN_SIZE,         KSurfaceGreenBits,
-                EGL_BLUE_SIZE,          KSurfaceBlueBits,
-                EGL_ALPHA_SIZE,         KSurfaceAlphaBits,
-                EGL_SURFACE_TYPE,       EGL_WINDOW_BIT,
-                EGL_RENDERABLE_TYPE,    EGL_OPENVG_BIT,
-                EGL_NONE
-                };
-        
-        eglChooseConfig(iDisplay, KColorAttribList, &iChosenConfig, 1, &numConfigs);
-    
-        // we need openvg
-        eglBindAPI(EGL_OPENVG_API);
-    
-        InitEGLWindowSurfaceL(aWindow);
-            
-        // Create context for our thread.
-        iContextVg = eglCreateContext(iDisplay, iChosenConfig, EGL_NO_CONTEXT, NULL);    
-               
-        // bind surface to context
-        eglMakeCurrent(iDisplay, iSurface, iSurface, iContextVg);
-
-        }
-    
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::InitEGLWindowSurfaceL()
-// ---------------------------------------------------------------------------
-//
-void CHgVgEGL::InitEGLWindowSurfaceL(RWindow& aWindow)
-    {
-
-
-    // Create surface with premodulated alpha, on IVE3 this gives better performance.
-    const EGLint KAttriblist[] = 
-            {
-            EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE,
-            EGL_NONE
-            };
-    iSurface = eglCreateWindowSurface(iDisplay, iChosenConfig, &aWindow, KAttriblist);
-    EGLint error = eglGetError();
-    if (error == EGL_BAD_ALLOC)
-        {
-        RDebug::Print(_L("CHgVgEGL:: Can't create surface! (out of memory)"));
-        User::Leave(KErrNoMemory);
-        }
-    else if (error == EGL_BAD_SURFACE || iSurface == EGL_NO_SURFACE)
-        {
-        RDebug::Print(_L("CHgVgEGL:: Can't create surface! (general)"));
-        User::Leave(KErrGeneral);
-        }
-    
-    eglSurfaceAttrib(iDisplay, iSurface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_DESTROYED);
-    
-    }
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::DestroyEGL()
-// ---------------------------------------------------------------------------
-//     
-void CHgVgEGL::DestroyEGL()
-    {
-    // deinitialize egl
-    eglMakeCurrent(iDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-    eglDestroySurface(iDisplay,iSurface);
-    eglDestroyContext( iDisplay, iContextVg );
-    eglTerminate(iDisplay);    
-    }
-
-
-// ---------------------------------------------------------------------------
-// CHgVgEGL::GetSurfaceToBitmap()
-// ---------------------------------------------------------------------------
-//     
-CFbsBitmap* CHgVgEGL::GetSurfaceToBitmap(const TRect& aRect) const
-    {
-    // make sure every thing is in back buffer
-    vgFinish();
-
-    VGuint dataStride = 4 * aRect.Width();
-    
-    CFbsBitmap* bitmap = new CFbsBitmap();        
-    
-    if (bitmap)
-        {
-        // create temporary buffer for data
-        RBuf8 buf;
-        buf.Create(aRect.Width() * dataStride);
-        buf.Fill(0xFF);
-
-        // read data from vg (this is sloooww)
-        vgReadPixels((void*)buf.Ptr(), 
-                dataStride, VG_sARGB_8888, 0, 0, aRect.Width(), aRect.Height());                
-
-        // because of bug in vg driver we need to swap memory using for loop, because
-        // negative datastrides case crash
-        bitmap->Create(TSize(aRect.Width(), aRect.Height()), EColor16MA);
-        bitmap->BeginDataAccess();
-        TUint8* ptrTrg = (TUint8*)bitmap->DataAddress();
-        TUint8* ptrSrc = (TUint8*)buf.Ptr();
-        for (TInt i = 0; i < aRect.Height(); i++)
-            {
-            Mem::Copy(ptrTrg + dataStride * i, 
-                    ptrSrc + dataStride * (aRect.Height() - i - 1), dataStride);
-            }
-        bitmap->EndDataAccess();
-        buf.Close();
-        }
-    
-    return bitmap;    
-    }
-
-// End of File