티스토리 뷰
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);
};
'iOS > Metal' 카테고리의 다른 글
Metal: Metal Resources (0) | 2022.01.07 |
---|---|
Metal: MetalKit (0) | 2022.01.07 |
Metal: MTLTexture to CIImage 변경 시 rgb값 그대로 가져오기 (0) | 2022.01.06 |
Metal: MTKView 해상도 변경하기 (0) | 2022.01.06 |
Metal: 현재 스크린에 렌더링된 결과 가져오기 (0) | 2022.01.06 |