원본텍스처와 사이즈를 줄인 텍스처, 마스킹용 텍스처를 합치는 간단한 샘플. (어째 원본외에 캡처한 이미지들 색상이 좀 이상..)
이전 예제에서 원본텍스처와 렌더타겟 텍스처가 존재하니 마스킹용 텍스처만 하나 추가로 로드한다.
func initMetal() {
.
.
.
.
initRederTarget()
initSwapRender()
self.imageTexture = loadTexture(name:"sample", ext:"png")
self.maskingTexture = loadTexture(name: "masking", ext: "png")
}
화면 렌더링용 쉐이더에 3개의 텍스처를 전달한다
func render(view:MTKView) {
print("render")
.
.
.
.
swapEncoder.setFragmentTexture(self.renderTargetTexture, index: 0)
swapEncoder.setFragmentTexture(self.imageTexture, index: 1)
swapEncoder.setFragmentTexture(self.maskingTexture, index: 2)
.
.
}
화면렌더링 프레그먼트 쉐이더
마스킹이 레드로 딱떨어지는 경우이므로 간단~
fragment float4 swapFragmentFunction(ImageOut in [[stage_in]],
texture2d<float> texture1 [[texture(0)]],
texture2d<float> texture2 [[texture(1)]],
texture2d<float> texture3 [[texture(2)]]) {
constexpr sampler colorSampler;
float4 bgColor = texture1.sample(colorSampler, in.texCoord);
float4 color = texture2.sample(colorSampler, in.texCoord);
float4 masking = texture3.sample(colorSampler, in.texCoord);
color = float4((bgColor.rgb * masking.r ) + (color.rgb * (1 - masking.r)), 1.0);
return color;
}
'프로그래밍 > iOS,macOS' 카테고리의 다른 글
아이폰 로컬 화면 공유 : Broadcast Extension (0) | 2021.03.19 |
---|---|
[Metal] 이미지렌더링~ 카메라 입력과 가우시안 블러~ (1) | 2021.02.13 |
CVPixelBuffer, CMSampleBuffer,Data, Metal Texture, vImage (0) | 2021.02.09 |
[Metal] 이미지 렌더링~ 가우시안 블러~ Kernel 쉐이더 (0) | 2021.02.07 |
[Metal] 이미지 렌더링~ 가우시안 블러 (0) | 2021.02.07 |
[Metal] 이미지 렌더링~ 텍스처에 렌더링 (0) | 2021.02.05 |
[Metal] 이미지 렌더링~ 텍스처 표시 (0) | 2021.02.03 |
[Metal] 이미지 렌더링~ 사각형 그리기 (0) | 2021.02.03 |
[Metal] AR 얼굴인식 및 obj 렌더링 (0) | 2021.01.16 |
[Metal] Render to Texture (0) | 2020.12.27 |