Don't alpha blend when rasterizing paths
Co-Authored-By: Piotr <piotr@zed.dev>
This commit is contained in:
parent
8ac8a6f1d9
commit
6a0789c88e
1 changed files with 35 additions and 2 deletions
|
@ -87,7 +87,7 @@ impl MetalRenderer {
|
||||||
MTLResourceOptions::StorageModeManaged,
|
MTLResourceOptions::StorageModeManaged,
|
||||||
);
|
);
|
||||||
|
|
||||||
let paths_rasterization_pipeline_state = build_pipeline_state(
|
let paths_rasterization_pipeline_state = build_path_rasterization_pipeline_state(
|
||||||
&device,
|
&device,
|
||||||
&library,
|
&library,
|
||||||
"paths_rasterization",
|
"paths_rasterization",
|
||||||
|
@ -823,7 +823,40 @@ fn build_pipeline_state(
|
||||||
color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One);
|
color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One);
|
||||||
color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::OneMinusSourceAlpha);
|
color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::OneMinusSourceAlpha);
|
||||||
color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One);
|
color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One);
|
||||||
descriptor.set_depth_attachment_pixel_format(MTLPixelFormat::Invalid);
|
|
||||||
|
device
|
||||||
|
.new_render_pipeline_state(&descriptor)
|
||||||
|
.expect("could not create render pipeline state")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn build_path_rasterization_pipeline_state(
|
||||||
|
device: &metal::DeviceRef,
|
||||||
|
library: &metal::LibraryRef,
|
||||||
|
label: &str,
|
||||||
|
vertex_fn_name: &str,
|
||||||
|
fragment_fn_name: &str,
|
||||||
|
pixel_format: metal::MTLPixelFormat,
|
||||||
|
) -> metal::RenderPipelineState {
|
||||||
|
let vertex_fn = library
|
||||||
|
.get_function(vertex_fn_name, None)
|
||||||
|
.expect("error locating vertex function");
|
||||||
|
let fragment_fn = library
|
||||||
|
.get_function(fragment_fn_name, None)
|
||||||
|
.expect("error locating fragment function");
|
||||||
|
|
||||||
|
let descriptor = metal::RenderPipelineDescriptor::new();
|
||||||
|
descriptor.set_label(label);
|
||||||
|
descriptor.set_vertex_function(Some(vertex_fn.as_ref()));
|
||||||
|
descriptor.set_fragment_function(Some(fragment_fn.as_ref()));
|
||||||
|
let color_attachment = descriptor.color_attachments().object_at(0).unwrap();
|
||||||
|
color_attachment.set_pixel_format(pixel_format);
|
||||||
|
color_attachment.set_blending_enabled(true);
|
||||||
|
color_attachment.set_rgb_blend_operation(metal::MTLBlendOperation::Add);
|
||||||
|
color_attachment.set_alpha_blend_operation(metal::MTLBlendOperation::Add);
|
||||||
|
color_attachment.set_source_rgb_blend_factor(metal::MTLBlendFactor::One);
|
||||||
|
color_attachment.set_source_alpha_blend_factor(metal::MTLBlendFactor::One);
|
||||||
|
color_attachment.set_destination_rgb_blend_factor(metal::MTLBlendFactor::One);
|
||||||
|
color_attachment.set_destination_alpha_blend_factor(metal::MTLBlendFactor::One);
|
||||||
|
|
||||||
device
|
device
|
||||||
.new_render_pipeline_state(&descriptor)
|
.new_render_pipeline_state(&descriptor)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue