인덱스 버퍼와 상수 버퍼의자세한 설명은 다음 페이지를 통해서

확인해보세요.

인덱스 버퍼, 상수 버퍼의 사용

인덱스 버퍼

Untitled

인덱스 버퍼에는 그리려는 각 삼각형/선/점의 개별 인덱스가 들어 있습니다.

인덱스 버퍼 생성하는 함수

	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;
	}

인덱스 버퍼를 파이프라인에 묶어주는 함수

	void IndexBuffer::Bind() const
	{
		GetDevice()->BindIndexBuffer(buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
	}

상수 버퍼

Untitled

상수 버퍼는 그릴 때 셰이더 단계로 전송할 데이터를 나타냅니다. 일반적으로 모델 뷰 투영 행렬이나 색상, 슬라이더 등과 같은 특정 변수 데이터를 여기에 넣습니다.

상수 버퍼를 생성해주는 함수

	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;
	}