Мне нужно отправить цвет, закодированный как 4-байтовый канал RGBA в INTEGER (не с плавающей точкой), в мой металлический шейдер, но я не знаю, может ли металлический шейдер обрабатывать цвет, сохраненный в INTEGER. На самом деле я перевожу его в шейдере на float4 (даже не знаю, лучше ли использовать half4), но я не знаю, хороший ли это способ:
struct VertexIn {
packed_float3 pos;
packed_uchar4 color;
};
struct VertexOut {
float4 pos [[position]];
float4 color;
};
vertex VertexOut vertexShader(const device VertexIn *vertexArray [[buffer(0)]],
const unsigned int vid [[vertex_id]]){
VertexIn in = vertexArray[vid];
VertexOut out;
out.color = float4(float(in.color[2])/255,float(in.color[1])/255,float(in.color[0])/255,float(in.color[3])/255);
out.pos = float4(in.pos.x, in.pos.y, in.pos.z, 1);
return out;
}
fragment float4 fragmentShader(VertexOut interpolated [[stage_in]]){
return interpolated.color;
}