@@ -346,6 +346,24 @@ pub struct RenderPass {
346
346
pub ( crate ) render_pass : Arc < miniquad:: RenderPass > ,
347
347
}
348
348
349
+ #[ derive( Debug , Clone ) ]
350
+ pub struct RenderTargetParams {
351
+ /// 1 means no multi sampling.
352
+ /// Note that sample_count > 1 is not supported on GL2, GLES2 and WebGL1
353
+ pub sample_count : i32 ,
354
+
355
+ ///
356
+ pub depth_texture : bool ,
357
+ }
358
+ impl Default for RenderTargetParams {
359
+ fn default ( ) -> RenderTargetParams {
360
+ RenderTargetParams {
361
+ sample_count : 1 ,
362
+ depth_texture : false ,
363
+ }
364
+ }
365
+ }
366
+
349
367
impl RenderPass {
350
368
/// Returns the miniquad handle for this render pass.
351
369
pub fn raw_miniquad_id ( & self ) -> miniquad:: RenderPass {
@@ -369,55 +387,71 @@ pub struct RenderTarget {
369
387
}
370
388
371
389
pub fn render_target ( width : u32 , height : u32 ) -> RenderTarget {
372
- let context = get_context ( ) ;
373
- let texture_id = get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
390
+ render_target_ex ( width, height, RenderTargetParams :: default ( ) )
391
+ }
392
+
393
+ pub fn render_target_msaa ( width : u32 , height : u32 , sample_count : i32 ) -> RenderTarget {
394
+ render_target_ex (
374
395
width,
375
396
height,
376
- ..Default :: default ( )
377
- } ) ;
378
- let render_pass = get_quad_context ( ) . new_render_pass_mrt ( & [ texture_id] , None , None ) ;
379
- let texture = Texture2D {
380
- texture : context. textures . store_texture ( texture_id) ,
381
- } ;
382
- let render_pass = RenderPass {
383
- color_texture : texture. clone ( ) ,
384
- depth_texture : None ,
385
- render_pass : Arc :: new ( render_pass) ,
386
- } ;
387
- RenderTarget {
388
- texture,
389
- render_pass,
390
- }
397
+ RenderTargetParams {
398
+ sample_count,
399
+ ..Default :: default ( )
400
+ } ,
401
+ )
391
402
}
392
403
393
- pub fn render_target_msaa ( width : u32 , height : u32 , sample_count : i32 ) -> RenderTarget {
404
+ pub fn render_target_ex ( width : u32 , height : u32 , params : RenderTargetParams ) -> RenderTarget {
394
405
let context = get_context ( ) ;
395
406
396
407
let color_texture = get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
397
408
width,
398
409
height,
399
- sample_count,
410
+ sample_count : params . sample_count ,
400
411
..Default :: default ( )
401
412
} ) ;
402
- let color_resolve_texture = get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
403
- width,
404
- height,
405
- ..Default :: default ( )
406
- } ) ;
407
- let render_pass = get_quad_context ( ) . new_render_pass_mrt (
408
- & [ color_texture] ,
409
- Some ( & [ color_resolve_texture] ) ,
410
- None ,
411
- ) ;
413
+ let depth_texture = if params. depth_texture {
414
+ Some (
415
+ get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
416
+ width,
417
+ height,
418
+ format : miniquad:: TextureFormat :: Depth ,
419
+ sample_count : params. sample_count ,
420
+ ..Default :: default ( )
421
+ } ) ,
422
+ )
423
+ } else {
424
+ None
425
+ } ;
426
+ let render_pass;
427
+ let texture;
428
+ if params. sample_count != 0 {
429
+ let color_resolve_texture =
430
+ get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
431
+ width,
432
+ height,
433
+ ..Default :: default ( )
434
+ } ) ;
435
+ render_pass = get_quad_context ( ) . new_render_pass_mrt (
436
+ & [ color_texture] ,
437
+ Some ( & [ color_resolve_texture] ) ,
438
+ depth_texture,
439
+ ) ;
440
+ texture = color_resolve_texture;
441
+ } else {
442
+ render_pass = get_quad_context ( ) . new_render_pass_mrt ( & [ color_texture] , None , depth_texture) ;
443
+ texture = color_texture;
444
+ }
445
+
412
446
let texture = Texture2D {
413
- texture : context. textures . store_texture ( color_resolve_texture ) ,
447
+ texture : context. textures . store_texture ( texture ) ,
414
448
} ;
449
+
415
450
let render_pass = RenderPass {
416
451
color_texture : texture. clone ( ) ,
417
452
depth_texture : None ,
418
453
render_pass : Arc :: new ( render_pass) ,
419
454
} ;
420
-
421
455
RenderTarget {
422
456
texture,
423
457
render_pass,
0 commit comments