@@ -87,7 +87,7 @@ impl GLContextWrapper {
8787
8888enum WebGLPaintTaskData {
8989 WebRender ( webrender_traits:: RenderApi , webrender_traits:: WebGLContextId ) ,
90- Readback ( GLContextWrapper , ( Option < ( webrender_traits:: RenderApi , webrender_traits:: ImageKey ) > ) ) ,
90+ Readback ( GLContextWrapper , webrender_traits:: RenderApi , webrender_traits:: ImageKey ) ,
9191}
9292
9393pub struct WebGLPaintThread {
@@ -97,17 +97,14 @@ pub struct WebGLPaintThread {
9797
9898fn create_readback_painter ( size : Size2D < i32 > ,
9999 attrs : GLContextAttributes ,
100- webrender_api : Option < webrender_traits:: RenderApi > )
100+ webrender_api : webrender_traits:: RenderApi )
101101 -> Result < ( WebGLPaintThread , GLLimits ) , String > {
102102 let context = try!( GLContextWrapper :: new ( size, attrs) ) ;
103103 let limits = context. get_limits ( ) ;
104- let webrender_api_and_image_key = webrender_api. map ( |wr| {
105- let key = wr. alloc_image ( ) ;
106- ( wr, key)
107- } ) ;
104+ let image_key = webrender_api. alloc_image ( ) ;
108105 let painter = WebGLPaintThread {
109106 size : size,
110- data : WebGLPaintTaskData :: Readback ( context, webrender_api_and_image_key )
107+ data : WebGLPaintTaskData :: Readback ( context, webrender_api , image_key )
111108 } ;
112109
113110 Ok ( ( painter, limits) )
@@ -116,25 +113,21 @@ fn create_readback_painter(size: Size2D<i32>,
116113impl WebGLPaintThread {
117114 fn new ( size : Size2D < i32 > ,
118115 attrs : GLContextAttributes ,
119- webrender_api_sender : Option < webrender_traits:: RenderApiSender > )
116+ webrender_api_sender : webrender_traits:: RenderApiSender )
120117 -> Result < ( WebGLPaintThread , GLLimits ) , String > {
121- if let Some ( sender) = webrender_api_sender {
122- let wr_api = sender. create_api ( ) ;
123- match wr_api. request_webgl_context ( & size, attrs) {
124- Ok ( ( id, limits) ) => {
125- let painter = WebGLPaintThread {
126- data : WebGLPaintTaskData :: WebRender ( wr_api, id) ,
127- size : size
128- } ;
129- Ok ( ( painter, limits) )
130- } ,
131- Err ( msg) => {
132- warn ! ( "Initial context creation failed, falling back to readback: {}" , msg) ;
133- create_readback_painter ( size, attrs, Some ( wr_api) )
134- }
118+ let wr_api = webrender_api_sender. create_api ( ) ;
119+ match wr_api. request_webgl_context ( & size, attrs) {
120+ Ok ( ( id, limits) ) => {
121+ let painter = WebGLPaintThread {
122+ data : WebGLPaintTaskData :: WebRender ( wr_api, id) ,
123+ size : size
124+ } ;
125+ Ok ( ( painter, limits) )
126+ } ,
127+ Err ( msg) => {
128+ warn ! ( "Initial context creation failed, falling back to readback: {}" , msg) ;
129+ create_readback_painter ( size, attrs, wr_api)
135130 }
136- } else {
137- create_readback_painter ( size, attrs, None )
138131 }
139132 }
140133
@@ -144,7 +137,7 @@ impl WebGLPaintThread {
144137 WebGLPaintTaskData :: WebRender ( ref api, id) => {
145138 api. send_webgl_command ( id, message) ;
146139 }
147- WebGLPaintTaskData :: Readback ( ref ctx, _) => {
140+ WebGLPaintTaskData :: Readback ( ref ctx, _, _ ) => {
148141 ctx. apply_command ( message) ;
149142 }
150143 }
@@ -154,7 +147,7 @@ impl WebGLPaintThread {
154147 /// communicate with it.
155148 pub fn start ( size : Size2D < i32 > ,
156149 attrs : GLContextAttributes ,
157- webrender_api_sender : Option < webrender_traits:: RenderApiSender > )
150+ webrender_api_sender : webrender_traits:: RenderApiSender )
158151 -> Result < ( IpcSender < CanvasMsg > , GLLimits ) , String > {
159152 let ( sender, receiver) = ipc:: channel :: < CanvasMsg > ( ) . unwrap ( ) ;
160153 let ( result_chan, result_port) = channel ( ) ;
@@ -196,7 +189,7 @@ impl WebGLPaintThread {
196189
197190 fn send_data ( & mut self , chan : IpcSender < CanvasData > ) {
198191 match self . data {
199- WebGLPaintTaskData :: Readback ( _, ref webrender_api_and_image_key ) => {
192+ WebGLPaintTaskData :: Readback ( _, ref webrender_api , image_key ) => {
200193 let width = self . size . width as usize ;
201194 let height = self . size . height as usize ;
202195
@@ -217,19 +210,17 @@ impl WebGLPaintThread {
217210 // rgba -> bgra
218211 byte_swap ( & mut pixels) ;
219212
220- if let Some ( ( ref wr, wr_image_key) ) = * webrender_api_and_image_key {
221- // TODO: This shouldn't be a common path, but try to avoid
222- // the spurious clone().
223- wr. update_image ( wr_image_key,
224- width as u32 ,
225- height as u32 ,
226- webrender_traits:: ImageFormat :: RGBA8 ,
227- pixels. clone ( ) ) ;
228- }
213+ // TODO: This shouldn't be a common path, but try to avoid
214+ // the spurious clone().
215+ webrender_api. update_image ( image_key,
216+ width as u32 ,
217+ height as u32 ,
218+ webrender_traits:: ImageFormat :: RGBA8 ,
219+ pixels. clone ( ) ) ;
229220
230221 let pixel_data = CanvasPixelData {
231222 image_data : IpcSharedMemory :: from_bytes ( & pixels[ ..] ) ,
232- image_key : webrender_api_and_image_key . as_ref ( ) . map ( | & ( _ , key ) | key ) ,
223+ image_key : image_key ,
233224 } ;
234225
235226 chan. send ( CanvasData :: Pixels ( pixel_data) ) . unwrap ( ) ;
@@ -243,7 +234,7 @@ impl WebGLPaintThread {
243234 #[ allow( unsafe_code) ]
244235 fn recreate ( & mut self , size : Size2D < i32 > ) -> Result < ( ) , & ' static str > {
245236 match self . data {
246- WebGLPaintTaskData :: Readback ( ref mut context, _) => {
237+ WebGLPaintTaskData :: Readback ( ref mut context, _, _ ) => {
247238 if size. width > self . size . width ||
248239 size. height > self . size . height {
249240 self . size = try!( context. resize ( size) ) ;
@@ -261,15 +252,15 @@ impl WebGLPaintThread {
261252 }
262253
263254 fn init ( & mut self ) {
264- if let WebGLPaintTaskData :: Readback ( ref context, _) = self . data {
255+ if let WebGLPaintTaskData :: Readback ( ref context, _, _ ) = self . data {
265256 context. make_current ( ) ;
266257 }
267258 }
268259}
269260
270261impl Drop for WebGLPaintThread {
271262 fn drop ( & mut self ) {
272- if let WebGLPaintTaskData :: Readback ( _, Some ( ( ref mut wr, image_key) ) ) = self . data {
263+ if let WebGLPaintTaskData :: Readback ( _, ref mut wr, image_key) = self . data {
273264 wr. delete_image ( image_key) ;
274265 }
275266 }
0 commit comments