09.08

신승빈·2022년 9월 8일
0

KGCA 수업

목록 보기
37/128

IndexBuffer

ID3D11Buffer* _indexBuffer;
Create()
{
	//VertexBuffer와 동일한 방식으로 생성
	D3D11_BUFFER_DESC       bd;
    ZeroMemory(&bd, sizeof(bd));
    bd.ByteWidth = sizeof(DWORD) * m_IndexList.size();
    // GPU 메모리에 할당
    bd.Usage = D3D11_USAGE_DEFAULT; 
    bd.BindFlags = D3D11_BIND_INDEX_BUFFER; //Vertex버퍼와 다른 flag 설정

    D3D11_SUBRESOURCE_DATA  sd;
    ZeroMemory(&sd, sizeof(sd));
    sd.pSysMem = &m_IndexList.at(0);
    hr = m_pd3dDevice->CreateBuffer(
        &bd, // 버퍼 할당
        &sd, // 초기 할당된 버퍼를 체우는 CPU메모리 주소
        &m_pIndexBuffer);
}
Render()
{
    m_pImmediateContext->IASetIndexBuffer(m_pIndexBuffer, DXGI_FORMAT_R32_UINT, 0); // 사용 전 DeviceContext에 설정
    m_pImmediateContext->DrawIndexed(m_IndexList.size(),0,0); // IndexBuffer사용 시 DrawIndexed사용
}

정점 쉐이더를 원본 정점의 개수만큼만 호출할 수 있음(호출 횟수 감소)
정점을 원본 정점만큼만 저장할 수 있음(메모리 감소)

IA에 넘어가는 정점에 대하여

struct SimpleVertex
{
	TVector    p;	
	TVector4D  c;
	TVector2D  t;
};

일반적으로 대부분의 Object들은 자신의 Texture를 갖기 때문에 Color부분을 직접 출력할 일은 거의 없음
그러나 effect, particle같은 경우 동일한 texture * color 방식의 연산을 통해 동일한 Texture에 다른 표현이 가능

참고
HRSULT S_OK, S_FALSE

S_OK와 S_FALSE는 SUCCEEDED()에서 모두 통과, 실패는 다른 코드

참고
CreateWICTextureFromFile()
CreateDDSTextureFromFile()

WIC을 통해 읽어들일 경우 DDS의 파일을 못 읽을수도 있음

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글