묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨DirectX Raytracing Programming
MeshObject 공용 사용 방법
CGame::CreateGameObjectAsBox에서 "meshobject를 공용으로 쓰도록 한다."는 주석이 있는데, 실제로 디버깅해보면 오브젝트마다 새로운 메쉬오브젝트를 할당하는거 같습니다.각 게임 오브젝트가 메쉬 오브젝트를 공용으로 사용하도록 바꿔도 렌더링이 잘 안되는데, 이건 BLAS Instance는 결국 하나니까 TLAS에 존재하는 Instance는 하나만 생기게 돼서 그런건가요?맞다면 핸들이 참조하는 pBLAS(D3D 리소스)는 공용으로 사용하고, 게임 오브젝트가 들고있는 BLAS 핸들(CreateBLAS가 반환하는 BLAS_INSTANCE*)을 오브젝트마다 다른걸 들고 있으면 되는걸까요? 계속 바꿔가면서 시도해보는데 잘 안되네요ㅠ
-
해결됨DirectX Raytracing Programming
BuildBLAS 할당 리소스 사이즈
BuildBLAS함수에서 pBlasInstance->pBLAS = m_pResourceBinBLAS->Alloc(info.ScratchDataSizeInBytes);이렇게 하고 있는데 info.ResultDataMaxSizeInBytes 맞지 않나요?감사합니다.
-
해결됨DirectX Raytracing Programming
ConstnatBufferPool관련 질문
안녕하세요. 강의 잘 듣고 있습니다.CConstantBufferManager.cpp -> CONSTANT_BUFFER_PROPERTY에서 enum값의 사이즈인 sizeof(CONSTANT_BUFFER_TYPE_RAY_TRACING)가 아니라 버퍼 구조체의 사이즈인 sizeof(CONSTANT_BUFFER_RAY_TRACING)를 저장해야 하는거 아닌가요?이후에 다른 타입들을 추가할땐 구조체 사이즈를 넣는데, 레이트레이싱은 다른지 궁금해서 여쭤봅니다.
-
미해결D3D12 프로그래밍 - 기초편
CommandList의 GraphicsCommandList 변경이유
코드를 따라가다 보니 기존엔 ID3D12CommandList를 사용하던걸 ID3D12GraphicsCommandList로 바꾸신 부분들이 있으신데 혹시 특별한 이유가 있을까요?
-
해결됨D3D12 프로그래밍 - 기초편
[25:13] Virtual Interface 와 COM Interface간의 차이가 궁금합니다.
안녕하세요. 먼저 좋은 강의 감사드립니다.해당 강의 부분에서 pDebugController 변수를 Virtual Interface라고 말씀하셨는데,COM Interface와 차이가 있는지 궁금합니다!다른 COM 인터페이스 변수들에 대해서 디버깅으로 값을 확인해봐도 pDebugController처럼 IUnknown을 상속받고 가상함수 테이블을 가리키는 포인터가 있으므로 동의어라고 봐도 될까요?
-
미해결D3D12 프로그래밍 - 기초편
Descriptor를 복사하는 이유
안녕하세요 강의 잘 보고 있습니다. 공부를 하다가 의문점이 하나 생겼습니다. Descriptor Heap을 Shader Visible하지 않은 거에 내용을 채우고 렌더링시 Shader Visible한 Descriptor Heap으로 복사하여 사용하는 이유가 어떤 건가요?처음부터 CBV Pool의 Descriptor Heap을 Shader Visible로 사용해도 작동하던데, 혹시 시스템 메모리가 VRAM보다 상대적으로 메모리가 많아서 그런 건가요? 실제 사용할 Descriptor만 VRAM에 올려서 쓰려는 일종의 최적화 기법인가요?
-
미해결D3D12 프로그래밍 - 기초편
코드에 대한질문있습니다.
처음 디바이스 생성부분에서 어댑터를 순환하면서 Device 를 생성하는데저같은경우에는 그래픽카드를 2개 사용중인데 1080과 4090을 사용중인데 첫번째 어댑터에 1080으로 인식되면서 1080을 이용해서 Device 를 생성하는것 같은데 , 이럴경우 문제가되지않나요? 4090 을 이용못하는거아닐까요? } for (DWORD featerLevelIndex = 0; featerLevelIndex < FeatureLevelNum; featerLevelIndex++) { UINT adapterIndex = 0; while (DXGI_ERROR_NOT_FOUND != _factory->EnumAdapters1(adapterIndex, &pAdapter)) { pAdapter->GetDesc1(&AdapterDesc); if (SUCCEEDED(D3D12CreateDevice(pAdapter.Get(), featureLevels[featerLevelIndex], IID_PPV_ARGS(&_device)))) { break; } adapterIndex++; } if (_device) { break; }
-
미해결D3D12 프로그래밍 - 기초편
Comptr 을 안쓸시 메모리 해제순서
혹시 Comptr 을 안쓸시 메모리해제를 직접해주고있는데 ,Device 를 먼저 해제할시 ref값이 0 이 안나와서 DebugLeak 에 걸리게되던데D3D12 객체들의 메모리 해제할때도 순서가 중요한건가요?
-
해결됨D3D12 프로그래밍 - 기초편
raw pointer 쓰시는 이유가 따로 있으신가요?
혹시 ComPtr 안쓰시고 raw pointer 쓰시는 이유가 있으신가요?
-
미해결D3D12 프로그래밍 - 기초편
질문있습니다.
안녕하세요 공부하다가 몇가지 궁금한게 생겨 여쭤봅니다. 질문1) D3D12_DESCRIPTOR_RANGE ranges[2] ={{ D3D12_DESCRIPTOR_RANGE_TYPE_CBV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND }, // b0 ~ b4{ D3D12_DESCRIPTOR_RANGE_TYPE_SRV, 5, 0, 0, D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND } // t0 ~ t4}; CD3DX12_ROOT_PARAMETER rootParameters[1] = {};rootParameters[0].InitAsDescriptorTable(_countof(ranges), ranges, D3D12_SHADER_VISIBILITY_ALL); 와 같이 루트시그니처에서 테이블의 사용범위를 넓게잡아두고사용할때만 Shader 에서 buffer를 정의 ( ex :cbuffer WVP: register(b0 )해서사용해주고있는데 테이블힙의 메모리 낭비를 제외하면 성능에 큰 악영향이 있을까요?런타임에 터지거나 하는 오류는 현재 없는데 궁금해서 여쭤봅니다. 질문2)제가 이해한게 맞는건지 모르겠습니다. 현재 영천님 의 코드처럼 pool 방식으로 디스크럽터를 넓게만들어두고 할당받는 방식으로 코드를 만들어보고있는데질문1의 방식처럼 rootSignature 를 만들었다고 하였을때 ,SetGraphicsRootDescriptorTable 함수인자에 핸들값을 넣을때그림에 빨간 화살표에 있는 선두에 있는 handle 값만 넣어주면RootSignature 에서는 b0~b5 ,t0~t5 의 총10개를 사용한다고 서명했기떄문에 ,DX에서 읽을때 10개단위로 읽어주기 때문에 10개가 모두 테이블에 바인딩되는 구조인가요?다음 오브젝트를 그릴때는 , 오프셋 10칸을 건너뛴 다음 b0 부터 할당받아서 테이블에 바인딩해주고