Skip to content

Commit 6f41b16

Browse files
committed
graphics: Add render_target_ex
1 parent 47918d9 commit 6f41b16

File tree

1 file changed

+66
-31
lines changed

1 file changed

+66
-31
lines changed

src/texture.rs

Lines changed: 66 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,25 @@ pub struct RenderPass {
346346
pub(crate) render_pass: Arc<miniquad::RenderPass>,
347347
}
348348

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+
349368
impl RenderPass {
350369
/// Returns the miniquad handle for this render pass.
351370
pub fn raw_miniquad_id(&self) -> miniquad::RenderPass {
@@ -369,55 +388,71 @@ pub struct RenderTarget {
369388
}
370389

371390
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(
374396
width,
375397
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+
)
391403
}
392404

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 {
394406
let context = get_context();
395407

396408
let color_texture = get_quad_context().new_render_texture(miniquad::TextureParams {
397409
width,
398410
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,
405412
..Default::default()
406413
});
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+
412447
let texture = Texture2D {
413-
texture: context.textures.store_texture(color_resolve_texture),
448+
texture: context.textures.store_texture(texture),
414449
};
450+
415451
let render_pass = RenderPass {
416452
color_texture: texture.clone(),
417453
depth_texture: None,
418454
render_pass: Arc::new(render_pass),
419455
};
420-
421456
RenderTarget {
422457
texture,
423458
render_pass,

0 commit comments

Comments
 (0)