--- 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();
+ }
+