티스토리 뷰

iOS/Metal

Metal: Shader

0zerohyun 2022. 1. 7. 14:48

 

MSL은 Vector와 Matrix에 대한 데이터 타입을 갖고 있다.
ex) float3, float4, float4x4

 

 

Argument Table

 

 

Shader 작성 방법

shaderType returnType shaderName(parameter1,
                                 parameter2,
                                   etc....) {

     ..
}

shaderType : vertex, fragment, kernel

 

 

Vertex Shader 셋팅

// generate a large enough buffer to allow streaming vertices for 3
// semaphore controlled frames
vertexBuffer = device.makeBuffer(length: ConstantBufferSize,
                                   options: [])
vertexBuffer.label = "vertices"
let vertexColorSize = vertexData.count * MemoryLayout<Float>.size
vertexColorBuffer = device.makeBuffer(bytes: vertexColorData, 
                                      length: vertexColorSize,
                                      options: [])
vertexColorBuffer.label = "colors"

 

renderEncoder.setVertexBuffer(vertexBuffer,
                              offset: 256*bufferIndex, at: 0)
renderEncoder.setVertexBuffer(vertexColorBuffer, offset:0 , at: 1)

 

#include <metal_stdlib>
using namespace metal;

struct VertexInOut
{
   float4  position [[position]];
   float4  color;
};

vertex VertexInOut passThroughVertex(uint vid [[ vertex_id ]],
                                     constant packed_float4* position [[ buffer(0) ]],
                                     constant packed_float4* color    [[ buffer(1) ]]) {
     VertexInOut outVertex;
     outVertex.position = position[vid];
     outVertex.color = color[vid];
     return outVertex;
};

fragment half4 passThroughFragment(VertexInOut inFrag [[stage_in]]) {
     return half4(inFrag.color);
};
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함