인덱스 버퍼와 상수 버퍼의자세한 설명은 다음 페이지를 통해서
확인해보세요.
인덱스 버퍼
인덱스 버퍼에는 그리려는 각 삼각형/선/점의 개별 인덱스가 들어 있습니다.
인덱스 버퍼 생성하는 함수
bool IndexBuffer::Create(const std::vector<UINT>& indices)
{
desc.ByteWidth = sizeof(UINT) * indices.size();
desc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_INDEX_BUFFER;
desc.Usage = D3D11_USAGE_DEFAULT;
desc.CPUAccessFlags = 0;
D3D11_SUBRESOURCE_DATA sub = {};
sub.pSysMem = indices.data();
if (!GetDevice()->CreateBuffer(&desc, &sub, buffer.GetAddressOf()))
assert(NULL && "indices buffer create fail!!");
return true;
}
C++
복사
인덱스 버퍼를 파이프라인에 묶어주는 함수
void IndexBuffer::Bind() const
{
GetDevice()->BindIndexBuffer(buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
}
C++
복사
상수 버퍼
상수 버퍼는 그릴 때 셰이더 단계로 전송할 데이터를 나타냅니다. 일반적으로 모델 뷰 투영 행렬이나 색상, 슬라이더 등과 같은 특정 변수 데이터를 여기에 넣습니다.
상수 버퍼를 생성해주는 함수
bool ConstantBuffer::Create(eCBType type, UINT size, void* data)
{
mType = type;
mSize = size;
desc.ByteWidth = size;
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
desc.Usage = D3D11_USAGE_DYNAMIC;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
D3D11_SUBRESOURCE_DATA sub = {};
sub.pSysMem = data;
bool succes = false;
if (data == NULL)
succes = GetDevice()->CreateBuffer(&desc, nullptr, buffer.GetAddressOf());
else
succes = GetDevice()->CreateBuffer(&desc, &sub, buffer.GetAddressOf());
if (!succes)
assert(NULL, "Create constant buffer failed!");
return true;
}
C++
복사
상수 버퍼에 데이터를 세팅해주는 함수
void ConstantBuffer::SetData(void* data) const
{
GetDevice()->SetDataBuffer(buffer.Get(), data, mSize);
}
C++
복사
상수 버퍼를 해당 파이프라인 스테이지에 묶어주는 함수
void ConstantBuffer::Bind(eShaderStage stage) const
{
GetDevice()->BindConstantBuffer(stage, mType, buffer.Get());
}
C++
복사