@@ -346,6 +346,25 @@ 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
+ /// depth: true creates a depth render target attachment and allows
356
+ /// such a render target being used for a depth-testing cameras
357
+ pub depth : bool ,
358
+ }
359
+ impl Default for RenderTargetParams {
360
+ fn default ( ) -> RenderTargetParams {
361
+ RenderTargetParams {
362
+ sample_count : 1 ,
363
+ depth : false ,
364
+ }
365
+ }
366
+ }
367
+
349
368
impl RenderPass {
350
369
/// Returns the miniquad handle for this render pass.
351
370
pub fn raw_miniquad_id ( & self ) -> miniquad:: RenderPass {
@@ -369,55 +388,71 @@ pub struct RenderTarget {
369
388
}
370
389
371
390
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 {
391
+ render_target_ex ( width, height, RenderTargetParams :: default ( ) )
392
+ }
393
+
394
+ pub fn render_target_msaa ( width : u32 , height : u32 , sample_count : i32 ) -> RenderTarget {
395
+ render_target_ex (
374
396
width,
375
397
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
- }
398
+ RenderTargetParams {
399
+ sample_count,
400
+ ..Default :: default ( )
401
+ } ,
402
+ )
391
403
}
392
404
393
- pub fn render_target_msaa ( width : u32 , height : u32 , sample_count : i32 ) -> RenderTarget {
405
+ pub fn render_target_ex ( width : u32 , height : u32 , params : RenderTargetParams ) -> RenderTarget {
394
406
let context = get_context ( ) ;
395
407
396
408
let color_texture = get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
397
409
width,
398
410
height,
399
- sample_count,
400
- ..Default :: default ( )
401
- } ) ;
402
- let color_resolve_texture = get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
403
- width,
404
- height,
411
+ sample_count : params. sample_count ,
405
412
..Default :: default ( )
406
413
} ) ;
407
- let render_pass = get_quad_context ( ) . new_render_pass_mrt (
408
- & [ color_texture] ,
409
- Some ( & [ color_resolve_texture] ) ,
410
- None ,
411
- ) ;
414
+ let depth_texture = if params. depth {
415
+ Some (
416
+ get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
417
+ width,
418
+ height,
419
+ format : miniquad:: TextureFormat :: Depth ,
420
+ sample_count : params. sample_count ,
421
+ ..Default :: default ( )
422
+ } ) ,
423
+ )
424
+ } else {
425
+ None
426
+ } ;
427
+ let render_pass;
428
+ let texture;
429
+ if params. sample_count != 0 {
430
+ let color_resolve_texture =
431
+ get_quad_context ( ) . new_render_texture ( miniquad:: TextureParams {
432
+ width,
433
+ height,
434
+ ..Default :: default ( )
435
+ } ) ;
436
+ render_pass = get_quad_context ( ) . new_render_pass_mrt (
437
+ & [ color_texture] ,
438
+ Some ( & [ color_resolve_texture] ) ,
439
+ depth_texture,
440
+ ) ;
441
+ texture = color_resolve_texture;
442
+ } else {
443
+ render_pass = get_quad_context ( ) . new_render_pass_mrt ( & [ color_texture] , None , depth_texture) ;
444
+ texture = color_texture;
445
+ }
446
+
412
447
let texture = Texture2D {
413
- texture : context. textures . store_texture ( color_resolve_texture ) ,
448
+ texture : context. textures . store_texture ( texture ) ,
414
449
} ;
450
+
415
451
let render_pass = RenderPass {
416
452
color_texture : texture. clone ( ) ,
417
453
depth_texture : None ,
418
454
render_pass : Arc :: new ( render_pass) ,
419
455
} ;
420
-
421
456
RenderTarget {
422
457
texture,
423
458
render_pass,
0 commit comments