프로그래밍/DirectX

상수 버퍼

이재만박사 2015. 8. 7. 17:22

cbuffer cbPerOjbect

{

float4x4 gWorldViewProj;

};


cbuffer 형식의 객체 cbPerObject를 정의한다. 상수 버퍼(constant buffer)는 셰이더가 접근할 수 있는 다양한 자료를 저장하는 유연한 자료 블록이다.

지금 예의 상수 버퍼는 gWorldViewProj라는 4 x 4 행렬 하나만 저장한다.

이 행렬은 한 점을 국소 공간에서 동차 절단 공간으로 변환하는 데 쓰이는, 세계, 시야, 투영 행렬을 하나로 결합한 것이다

HLSL은 4 x 4 행렬을 위한 내장 형식 float4x4를 제공한다. 그 외에도 여러 행렬 형식이 있는데, 예를 들어 3 x 4 행렬이나 2 x 2 행렬을 선언하려면 float3x4 형식이나 float2x2 형식을 사용하면 된다.


상수 버퍼의 자료는 정점마다 바뀌는 것이 아니다. 그러나 C++ 응용 프로그램은 효과 프레임워크를 통해서 상수 버퍼의 내용을 실행시점에서 변경할 수 있다. 예를 들어 세계 행렬은 물체마다 다르므로 세계, 시야, 투영 행렬이 결합된 행렬도 물체마다 달라야 한다. 따라서 앞에 나온 정점 셰이더로 여러 개의 물체를 그리는 경우 각 물체를 그리기 전에 gWorldViewProj 변수를 적절히 갱신해 주어야 한다

- 내용을 얼마나 자주 갱신할 것인지

- 상수 버퍼를 나누어 만들라는 것인지

에 근거해서 상수 버퍼를 나누어 만들라는 것이다