uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OnscreenRenderbuffer.cpp
branchRCL_3
changeset 17 3ac8bf5c5014
parent 0 15bf7259bb7c
--- a/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OnscreenRenderbuffer.cpp	Wed Apr 14 16:53:50 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10OnscreenRenderbuffer.cpp	Tue Apr 27 17:34:42 2010 +0300
@@ -36,33 +36,12 @@
     iPlugin = &aPlugin;
     iSurface = &aSurface;
     iTextureUsage = ERenderbufferUsageReadWrite;
-    
-#ifndef __WINS__ // Should possibly query the supported mode instead?
-    VGImageFormat imageInternalFormat = VG_sARGB_8888_PRE;
-#else
-    VGImageFormat imageInternalFormat = VG_sARGB_8888;
-#endif
-    
-    iImage = vgCreateImage(imageInternalFormat, Size().iWidth, Size().iHeight, VG_IMAGE_QUALITY_NONANTIALIASED);
-    HUIFX_VG_INVARIANT();
-    
-    // Initialize the context
-    iGc = iPlugin->CreateGcL();
-    BindAsRenderTarget();
-    iGc->InitState();
-    UnbindAsRenderTarget();
-    
-    // Let renderer know that we have been fiddlling with OpenVg state directly
-    // "iGc->InitState" confuses scissoring setting, so lets notify it.
-    CHuiVg10RenderPlugin& renderer = CHuiStatic::Vg10Renderer();
-    renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyScissor);    
-    renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyBlendMode);        
     }
 
+
 CHuiFxVg10OnscreenRenderbuffer::~CHuiFxVg10OnscreenRenderbuffer()
     {
-    vgDestroyImage(iImage);
-    HUIFX_VG_INVARIANT();
+    ReleaseVgImage();
     
     delete iGc;
     }
@@ -87,6 +66,7 @@
     iTextureUsage = aUsage;
     if (aUsage == ERenderbufferUsageReadWrite || aUsage == ERenderbufferUsageReadOnly)
         {
+        CreateVgImage();
         BindAsRenderTarget();
         vgGetPixels(iImage, 0, 0, 0, 0, Size().iWidth, Size().iHeight);
         HUIFX_VG_INVARIANT();
@@ -103,6 +83,7 @@
         vgSetPixels(0, 0, iImage, 0, 0, Size().iWidth, Size().iHeight);
         HUIFX_VG_INVARIANT();
         UnbindAsRenderTarget();
+        ReleaseVgImage();
         }
     }
 
@@ -123,3 +104,34 @@
     // this should never happen.
     ASSERT(FALSE);
     }
+
+void CHuiFxVg10OnscreenRenderbuffer::CreateVgImage()
+    {
+#ifndef __WINS__ // Should possibly query the supported mode instead?
+    VGImageFormat imageInternalFormat = VG_sARGB_8888_PRE;
+#else
+    VGImageFormat imageInternalFormat = VG_sARGB_8888;
+#endif
+    
+    iImage = vgCreateImage(imageInternalFormat, Size().iWidth, Size().iHeight, VG_IMAGE_QUALITY_NONANTIALIASED);
+    HUIFX_VG_INVARIANT();
+    
+    // Initialize the context
+    iGc = iPlugin->CreateGcL();
+    BindAsRenderTarget();
+    iGc->InitState();
+    UnbindAsRenderTarget();
+    
+    // Let renderer know that we have been fiddlling with OpenVg state directly
+    // "iGc->InitState" confuses scissoring setting, so lets notify it.
+    CHuiVg10RenderPlugin& renderer = CHuiStatic::Vg10Renderer();
+    renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyScissor);    
+    renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyBlendMode);        
+    }
+
+void CHuiFxVg10OnscreenRenderbuffer::ReleaseVgImage()
+    {
+    vgDestroyImage(iImage);
+    HUIFX_VG_INVARIANT();
+    }
+