리소스에 액세스하는 방법에는 여러 가지가 있습니다. 그럼에도 불구하고 Direct3D는 범위를 벗어나 액세스하는 모든 리소스에 대해 0을 반환하도록 보장합니다.
- 바이트 오프셋에 의한 액세스
- 인덱스별 접근
- Mips 메서드로 액세스
- 관련 항목
바이트 오프셋을 통해 접근하기
바이트 오프셋을 사용하여 두 가지 새 버퍼 형식에 액세스할 수 있습니다.
- ByteAddressBuffer 읽기 전용 버퍼입니다.
- RWByteAddressBuffer 읽기 또는 쓰기 버퍼입니다.
인덱스별 액세스
리소스 종류는 인덱스로 리소스의 특정 위치를 참조할 수 있습니다. 다음 예제를 고려하세요.
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월 컴파일러 이상에서는 로컬 리소스 변수를 선언할 수 있습니다. 전역적으로 정의된 리소스(예: 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))"와 같습니다.
관련 항목