Skip to content

Commit b279c29

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

File tree

1 file changed

+65
-31
lines changed

1 file changed

+65
-31
lines changed

src/texture.rs

Lines changed: 65 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,24 @@ 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+
///
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+
349367
impl RenderPass {
350368
/// Returns the miniquad handle for this render pass.
351369
pub fn raw_miniquad_id(&self) -> miniquad::RenderPass {
@@ -369,55 +387,71 @@ pub struct RenderTarget {
369387
}
370388

371389
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(
374395
width,
375396
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+
)
391402
}
392403

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

396407
let color_texture = get_quad_context().new_render_texture(miniquad::TextureParams {
397408
width,
398409
height,
399-
sample_count,
410+
sample_count: params.sample_count,
400411
..Default::default()
401412
});
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+
412446
let texture = Texture2D {
413-
texture: context.textures.store_texture(color_resolve_texture),
447+
texture: context.textures.store_texture(texture),
414448
};
449+
415450
let render_pass = RenderPass {
416451
color_texture: texture.clone(),
417452
depth_texture: None,
418453
render_pass: Arc::new(render_pass),
419454
};
420-
421455
RenderTarget {
422456
texture,
423457
render_pass,

0 commit comments

Comments
 (0)