다음을 통해 공유


리소스 액세스

리소스에 액세스하는 방법에는 여러 가지가 있습니다. 그럼에도 불구하고 Direct3D는 범위를 벗어나 액세스하는 모든 리소스에 대해 0을 반환하도록 보장합니다.

바이트 오프셋을 통해 접근하기

바이트 오프셋을 사용하여 두 가지 새 버퍼 형식에 액세스할 수 있습니다.

인덱스별 액세스

리소스 종류는 인덱스로 리소스의 특정 위치를 참조할 수 있습니다. 다음 예제를 고려하세요.

uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];

이 예제에서는 myTexture 2D 텍스처 리소스의 pos 위치에 있는 텍셀에 저장된 4개의 부동 소수점 값을 myVar 변수에 할당합니다.

메모

이러한 방식으로 텍스처에 액세스하는 기본값은 mipmap 수준 0(가장 자세한 수준)입니다.

 

메모

"float4 myVar = myTexture[pos];" 줄은 "float4 myVar = myTexture.Load(uint3(pos,0));"와 같습니다. 인덱스별 액세스는 새로운 HLSL 구문 개선 사항입니다.

 

메모

2010년 6월 버전의 DirectX SDK 이상에서 컴파일러를 사용하면 바이트 주소 버퍼를 제외한 모든 리소스 유형을 인덱싱할 수 있습니다.

 

메모

2010년 6월 컴파일러 이상에서는 로컬 리소스 변수를 선언할 수 있습니다. 전역적으로 정의된 리소스(예: myTexture)를 이러한 변수에 할당하고 전역 리소스와 동일한 방식으로 사용할 수 있습니다.

 

Mips 메서드로 액세스

텍스처 개체에는 mipmap 수준을 지정하는 데 사용할 수 있는 mips 메서드(예: Texture2D.mips)가 있습니다. 이 예제에서는 2D 텍스처에서 Mipmap 수준 2의 (7,16)에 저장된 색을 읽습니다.

uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];

이는 2010년 6월 컴파일러 이상에서 향상된 기능입니다. "myTexture.mips[2][uint2(x,y)]" 식은 "myTexture.Load(uint3(x,y,2))"와 같습니다.

컴퓨팅 셰이더 개요