equal
deleted
inserted
replaced
34 { |
34 { |
35 CHuiFxRenderbuffer::ConstructL(aSurface.Size(), EBufferTypeOnscreen); |
35 CHuiFxRenderbuffer::ConstructL(aSurface.Size(), EBufferTypeOnscreen); |
36 iPlugin = &aPlugin; |
36 iPlugin = &aPlugin; |
37 iSurface = &aSurface; |
37 iSurface = &aSurface; |
38 iTextureUsage = ERenderbufferUsageReadWrite; |
38 iTextureUsage = ERenderbufferUsageReadWrite; |
39 |
|
40 #ifndef __WINS__ // Should possibly query the supported mode instead? |
|
41 VGImageFormat imageInternalFormat = VG_sARGB_8888_PRE; |
|
42 #else |
|
43 VGImageFormat imageInternalFormat = VG_sARGB_8888; |
|
44 #endif |
|
45 |
|
46 iImage = vgCreateImage(imageInternalFormat, Size().iWidth, Size().iHeight, VG_IMAGE_QUALITY_NONANTIALIASED); |
|
47 HUIFX_VG_INVARIANT(); |
|
48 |
|
49 // Initialize the context |
|
50 iGc = iPlugin->CreateGcL(); |
|
51 BindAsRenderTarget(); |
|
52 iGc->InitState(); |
|
53 UnbindAsRenderTarget(); |
|
54 |
|
55 // Let renderer know that we have been fiddlling with OpenVg state directly |
|
56 // "iGc->InitState" confuses scissoring setting, so lets notify it. |
|
57 CHuiVg10RenderPlugin& renderer = CHuiStatic::Vg10Renderer(); |
|
58 renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyScissor); |
|
59 renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyBlendMode); |
|
60 } |
39 } |
|
40 |
61 |
41 |
62 CHuiFxVg10OnscreenRenderbuffer::~CHuiFxVg10OnscreenRenderbuffer() |
42 CHuiFxVg10OnscreenRenderbuffer::~CHuiFxVg10OnscreenRenderbuffer() |
63 { |
43 { |
64 vgDestroyImage(iImage); |
44 ReleaseVgImage(); |
65 HUIFX_VG_INVARIANT(); |
|
66 |
45 |
67 delete iGc; |
46 delete iGc; |
68 } |
47 } |
69 |
48 |
70 CHuiGc& CHuiFxVg10OnscreenRenderbuffer::BindAsRenderTarget() |
49 CHuiGc& CHuiFxVg10OnscreenRenderbuffer::BindAsRenderTarget() |
85 // Copy the contents of the framebuffer into our backbuffer image |
64 // Copy the contents of the framebuffer into our backbuffer image |
86 // TODO: figure out a more efficient way of doing this |
65 // TODO: figure out a more efficient way of doing this |
87 iTextureUsage = aUsage; |
66 iTextureUsage = aUsage; |
88 if (aUsage == ERenderbufferUsageReadWrite || aUsage == ERenderbufferUsageReadOnly) |
67 if (aUsage == ERenderbufferUsageReadWrite || aUsage == ERenderbufferUsageReadOnly) |
89 { |
68 { |
|
69 CreateVgImage(); |
90 BindAsRenderTarget(); |
70 BindAsRenderTarget(); |
91 vgGetPixels(iImage, 0, 0, 0, 0, Size().iWidth, Size().iHeight); |
71 vgGetPixels(iImage, 0, 0, 0, 0, Size().iWidth, Size().iHeight); |
92 HUIFX_VG_INVARIANT(); |
72 HUIFX_VG_INVARIANT(); |
93 UnbindAsRenderTarget(); |
73 UnbindAsRenderTarget(); |
94 } |
74 } |
101 { |
81 { |
102 BindAsRenderTarget(); |
82 BindAsRenderTarget(); |
103 vgSetPixels(0, 0, iImage, 0, 0, Size().iWidth, Size().iHeight); |
83 vgSetPixels(0, 0, iImage, 0, 0, Size().iWidth, Size().iHeight); |
104 HUIFX_VG_INVARIANT(); |
84 HUIFX_VG_INVARIANT(); |
105 UnbindAsRenderTarget(); |
85 UnbindAsRenderTarget(); |
|
86 ReleaseVgImage(); |
106 } |
87 } |
107 } |
88 } |
108 |
89 |
109 void CHuiFxVg10OnscreenRenderbuffer::UnbindAsRenderTarget() |
90 void CHuiFxVg10OnscreenRenderbuffer::UnbindAsRenderTarget() |
110 { |
91 { |
121 void CHuiFxVg10OnscreenRenderbuffer::PrepareForReuse(const TSize& /* aReusedRect */) |
102 void CHuiFxVg10OnscreenRenderbuffer::PrepareForReuse(const TSize& /* aReusedRect */) |
122 { |
103 { |
123 // this should never happen. |
104 // this should never happen. |
124 ASSERT(FALSE); |
105 ASSERT(FALSE); |
125 } |
106 } |
|
107 |
|
108 void CHuiFxVg10OnscreenRenderbuffer::CreateVgImage() |
|
109 { |
|
110 #ifndef __WINS__ // Should possibly query the supported mode instead? |
|
111 VGImageFormat imageInternalFormat = VG_sARGB_8888_PRE; |
|
112 #else |
|
113 VGImageFormat imageInternalFormat = VG_sARGB_8888; |
|
114 #endif |
|
115 |
|
116 iImage = vgCreateImage(imageInternalFormat, Size().iWidth, Size().iHeight, VG_IMAGE_QUALITY_NONANTIALIASED); |
|
117 HUIFX_VG_INVARIANT(); |
|
118 |
|
119 // Initialize the context |
|
120 iGc = iPlugin->CreateGcL(); |
|
121 BindAsRenderTarget(); |
|
122 iGc->InitState(); |
|
123 UnbindAsRenderTarget(); |
|
124 |
|
125 // Let renderer know that we have been fiddlling with OpenVg state directly |
|
126 // "iGc->InitState" confuses scissoring setting, so lets notify it. |
|
127 CHuiVg10RenderPlugin& renderer = CHuiStatic::Vg10Renderer(); |
|
128 renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyScissor); |
|
129 renderer.AddRestoreStateFlags(EHuiVg10GcStateFlagDirtyBlendMode); |
|
130 } |
|
131 |
|
132 void CHuiFxVg10OnscreenRenderbuffer::ReleaseVgImage() |
|
133 { |
|
134 vgDestroyImage(iImage); |
|
135 HUIFX_VG_INVARIANT(); |
|
136 } |
|
137 |