металлический шейдер: передать цвет, закодированный как 4 байта INTEGER вместо 8 байтов FLOAT - PullRequest
0 голосов
/ 26 октября 2019

Мне нужно отправить цвет, закодированный как 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;
}
...