rendiation
rendiation copied to clipboard
Implement dependency collecting in fragment in and vertex out
Should we allow every semantic shader value in the vertex stage to has auto injected vertex out?
impl ShaderGraphProvider for PhysicalMaterialGPU {
fn build(
&self,
builder: &mut ShaderGraphRenderPipelineBuilder,
) -> Result<(), ShaderGraphBuildError> {
// i don't think it's the good place for this logic, but where? <- fix this issue
builder.vertex(|builder, _| {
let uv = builder.query::<GeometryUV>()?.get();
builder.set_vertex_out::<FragmentUv>(uv);
Ok(())
})?;
builder.fragment(|builder, binding| {
let uniform = binding.uniform_by(&self.uniform, SB::Material).expand();
let sampler = binding.uniform_by(&self.sampler, SB::Material);
let albedo_tex = binding.uniform_by(&self.texture, SB::Material);
let uv = builder.query::<FragmentUv>()?.get();
let albedo = albedo_tex.sample(sampler, uv).xyz() * uniform.albedo;
builder.set_fragment_out(0, (albedo, 1.))
})
}
}
update: we impled interpolate api now:
impl ShaderGraphProvider for PhysicalMaterialGPU {
fn build(
&self,
builder: &mut ShaderGraphRenderPipelineBuilder,
) -> Result<(), ShaderGraphBuildError> {
builder.fragment(|builder, binding| {
let uniform = binding.uniform_by(&self.uniform, SB::Material).expand();
let sampler = binding.uniform_by(&self.sampler, SB::Material);
let albedo_tex = binding.uniform_by(&self.texture, SB::Material);
let uv = builder.query_or_interpolate_by::<FragmentUv, GeometryUV>();
let albedo = albedo_tex.sample(sampler, uv).xyz() * uniform.albedo;
builder.set_fragment_out(0, (albedo, 1.))
})
}
}
but still useful, if we could tree shake our dependency