암시적인 Resource Barrier 전환

<aside> 💡

  1. Copy Queue 에 대해서는 Resource Barrier 상태전환을 반드시 COMMON ↔ COPY_DEST 만 수행해야한다. 그 외에 대해 전환한다면 에러가 발생한다.

  2. Copy Queue 에서 사용하는 리소스의 초기상태는 COMMON 이어야한다. </aside>

<aside> 💡

이번 문제는 Copy Queue 에 대해서 COMMON 에서 COPY_DEST 로 변환하는 것 외에 다른 상태로 상태로 전환해서 문제가 생겼다.

</aside>

<aside> 💡

그러나 추후에 다시 공식문서를 찾아보니 Copy Queue 에 대해서는 명시적인 Resource Barrier 상태전환을 권장하지 않았다. DX12 가 내부적으로 암시적인 상태전환을 해준다고 한다.

https://microsoft.github.io/DirectX-Specs/d3d/D3D12EnhancedBarriers.html#copy-queues

COMMON ↔ COPY_DEST 같은 명시적인 Resource Barrier 상태전환은

Direct Queue 에서 Copy Queue 가 수행하는 복사작업을 할 때 사용한다.

</aside>

<aside> 💡

https://learn.microsoft.com/en-us/windows/win32/direct3d12/using-resource-barriers-to-synchronize-resource-states-in-direct3d-12

암시적인 Resource Barrier 상태전환 관련해서도 공식문서를 살펴볼 수 있었다.

되도록이면 명시적인 상태전환을 피하는 것이 좋을 것 같다.

</aside>

void Game::LoadModel()
{
    ModelLoader loader;

    std::string flightPath = "Assets/spitfirev6/spitfirev6.obj";
    flight1Mesh = loader.LoadMesh(&renderer, flightPath);
    if (!flight1Mesh) {
        MessageBox(hwnd, L"Failed to load flight mesh!", L"Error", MB_OK);
    }

    std::string bulletPath = "Assets/Bullet/bullet.obj";
    bulletMesh = loader.LoadMesh(&renderer, bulletPath);
    if (!bulletMesh) {
        MessageBox(hwnd, L"Failed to load bullet mesh!", L"Error", MB_OK);
    }
}

void Game::LoadTexture()
{
    if (!(flight1Texture = textureManager.LoadTexture(L"Assets/spitfirev6/spitfirev6_Textures/base_Base_Color_1002.png"))) {
        MessageBox(hwnd, L"Failed to load flight1 texture!", L"Error", MB_OK);
    }

    if (!(bulletTexture = textureManager.LoadTexture(L"Assets/Bullet/Textures/bullet_DefaultMaterial_BaseColor.png"))) {
        MessageBox(hwnd, L"Failed to load bullet texture!", L"Error", MB_OK);
    }
}