use super::super::compiler::finite;
use super::super::{
BoolExpr, ColorExpr, Opcode, ScalarExpr, ValueKind, VectorExpr, VisualError, VisualStage,
};
use super::VisualProgramBuilder;
impl VisualProgramBuilder {
pub fn scalar(&mut self, value: f32) -> Result<ScalarExpr, VisualError> {
finite(&[value])?;
self.emit_at(
ValueKind::Scalar,
Opcode::Constant,
[0; 3],
[value, 0.0, 0.0, 0.0],
VisualStage::Uniform,
)
.map(ScalarExpr)
}
pub fn color(&mut self, value: [f32; 4]) -> Result<ColorExpr, VisualError> {
finite(&value)?;
self.emit_at(
ValueKind::Color,
Opcode::Constant,
[0; 3],
value,
VisualStage::Uniform,
)
.map(ColorExpr)
}
pub fn vector(&mut self, value: [f32; 3]) -> Result<VectorExpr, VisualError> {
finite(&value)?;
self.emit_at(
ValueKind::Vector,
Opcode::Constant,
[0; 3],
[value[0], value[1], value[2], 0.0],
VisualStage::Uniform,
)
.map(VectorExpr)
}
pub fn boolean(&mut self, value: bool) -> Result<BoolExpr, VisualError> {
self.emit_at(
ValueKind::Bool,
Opcode::Constant,
[0; 3],
[f32::from(u8::from(value)), 0.0, 0.0, 0.0],
VisualStage::Uniform,
)
.map(BoolExpr)
}
}