use concinnity_core::render::error::{RenderError, RenderResult};
use objc2_metal::{
MTLDevice as _, MTLSamplerAddressMode, MTLSamplerDescriptor, MTLSamplerMinMagFilter,
};
use super::InitGpu;
use crate::metal::context::CompositeState;
use crate::metal::pipeline::build_post_pipeline;
pub(super) fn build_composite(gpu: &InitGpu<'_>) -> RenderResult<CompositeState> {
let device = &*gpu.hw.device;
let pipeline = build_post_pipeline(device, gpu.hw.swap_pixel_format, gpu.hot_reload)?;
let sampler = {
let desc = MTLSamplerDescriptor::new();
desc.setMinFilter(MTLSamplerMinMagFilter::Linear);
desc.setMagFilter(MTLSamplerMinMagFilter::Linear);
desc.setSAddressMode(MTLSamplerAddressMode::ClampToEdge);
desc.setTAddressMode(MTLSamplerAddressMode::ClampToEdge);
desc.setRAddressMode(MTLSamplerAddressMode::ClampToEdge);
device
.newSamplerStateWithDescriptor(&desc)
.ok_or_else(|| RenderError::Other("failed to create post sampler state".into()))?
};
Ok(CompositeState { pipeline, sampler })
}