오늘은 6단계부터 쭉~ 장치 초기화를 끝낼 것이다. Descriptor Heap 이론부터 복습하고 가자. Descriptor Heap 이론 Descriptor 리소스를 설명하기 위한 자료구조이다. 셰이더 혹은 GPU에 리소스를 연결할 경우, 이 리소스가 무엇인지 설명해주어야 한다. 앞서 만든 Command Queue나 SwapChain도 이 때문에 Descriptor를 설정해준 것이다. 실제로 GPU나 셰이더는 Descriptor를 받기 때문에, 여기에는 실제 리소스의 위치도 들어있고 접근 가능하다. Descriptor Heap DX12는 모든 Descriptor에 대해서 테이블을 만든다고 한다. 이를 서술자 힙, 즉 Descriptor Heap이라고 한다. 이 테이블 안에는 Descriptor들이 있다..
18234번: 당근 훔쳐 먹기 첫 번째 줄에 N(1 ≤ N ≤ 200,000)과 T(N ≤ T ≤ 100,000,000)가 공백으로 구분되어 주어진다. 오리는 당근의 맛을 충분히 높이기 위해 항상 N이상인 T일 동안 재배한다. 다음 N개의 줄에 걸쳐서 i+1번째 www.acmicpc.net 요즘엔 발상을 하는 데에 시간이 조금 걸리지만, 그 발상을 구현하는 데에 나는 오류나 한계가 줄어든 것 같아서 기분이 좋다! 이 문제도, 발상은 꽤 시간이 걸렸다만, 그걸 구현하는 과정 자체는 나름 노련하게 한 것 같아 기분이 좋다 ^__^ 문제 발상 당근을 뽑지 않는다면, 당근은 배로 계속, 더 맛있어진다! 가장 핵심적인 문제의 내용이다. 항상 w[i] 10000+9999*2이기 때문! 하지만, 저 조건이 있기 때문..
시간이 정말 많이 지나버렸지만... 4번부터 다시 복습해볼 예정이다. Command~ 그리는 명령들을 담고 있는 CPU의 Command List, 그 리스트를 제출할 GPU의 Command Queue를 만들어볼 것이다. 일단~ 만들기 전 다시 복습해보는 Command Queue와 Command List. Command~ 이론 복습 Command Queue 이름 ID3D12CommandQueue 역할 CmdList에서 받아온 명령을 GPU에 제출 생성 ID3D12Device->CreateCommandQueue 작업 완료 전까지 작업에서 참조하는 D3D리소스들이 해제되어서는 안 된다. Command Allocator 이름 ID3D12CommandAllocator 역할 명령리스트에 추가된 명령들을 메모리에 저..
8일에 수업 받고 13일에 쓰는 DX12 정리. 정말 여전히 머리가 빙빙 돌지만... 2학년 2학기, 처음 배웠을 때는 아무 생각 없이 코드를 따라 쳤다면, 이제는 대충 이게 뭔지는 이해하고 코드를 치는 것 같다. 근데 이게 코드를 이해했다기보다는, DX12의 전체적인 흐름을 이해했다고 보는 게 빠르겠다. 코드는 아직도... 이해가 안 된다. 수업에서 장치 초기화는 이러한 순서로 이루어졌다. 오늘 복습해볼 내용들이다. Device 생성 이름 ID3D12Device 의미 그래픽 카드를 추상화한 객체 사용 Cmd List, Cmd Queue, Committed Resource, Swap Chain 등을 만들 때 사용된다. 생성 D3D12CreateDevice 함수 왜 굳이 D3D와 DXGI를 구분한 건지 필..
아니 이게 말이 돼!?!?!?!?! 수업을 들으면서 울뻔했다. DX12의 기본적인 이론들만 가지고 왔다고 말씀하시는 선생님의 고운 목소리가... 밉게만 들렸다... 내 인생도 이렇게 복잡하진 않으렷다... 다 죽었어 DX12... 이번 겨울방학 특강으로 널 꾸깃꾸깃하게 해주지... 선생님의 PPT를 기반으로 간단하게만 정리해보았다. COM 인터페이스 작년에 ComPtr을 거짓말 안 치고 100번은 친 것 같다는 생각이 들었다. 그만큼 익숙한 이름인데, 정작 정확한 개념은 모르는 친구였다. COM(Component Object Model) 인터페이스는 C++ 클래스로 보아도 무방하다. IUnknown 인터페이스를 상속받고 있다. new와 delete를 사용하여 생성, 삭제할 수 없고 별도의 API 함수를 ..
DirectX DirectX는 으레 알고 있듯이 MS가 제공하는 API이며, GPU를 제어하고 프로그래밍을 할 수 있는 저수준 API이다. 이를 이용해 우리는 3차원 세계를 렌더링할 수 있는데, 대부분의 Windows 게임과 XBOX 게임은 DX를 사용하고 있다. 게임 프로그래머로 N차 전직을 하기 위해서는 필요한 기술 스택이라고 듣기도 했다. 선생님 왈 상용 엔진의 레이어만 다룰 것이 아니라면, 꼭 거쳐야하는 관문이라고 하셨다. 그리고 DX를 배우면 다른 API 또한 쉽게 배울 수 있다고 하셨다. DX12가 전 버전에 비해서 달라진 것 DX12가 달라진 것은 간단하게 말하자면 더 저수준의 API가 되었다고 한다. Resource Binding => Root Signature / Descriptor Ta..
17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 꺄~~ 난생 처음으로 한 번에 맞힌 문제! 구현이 많은 문제였는데 너무 기쁘다~~ 구현을 이제 어느정도 할 수 있게 된 것 같지만, 최적화나 자료구조를 쓰는 부분은 아직도 구현에 비해서 훨씬... 부족한 것 같다. 사실 좋아할 게 아니라 반성해야지만... 그래도 정말정말정말 오랜만에 한 번에 맞힌 문제라 기분이 좋았다!! 알고리즘 설계 구조 우선, 원판 전체를 Deque를 담는 배열로 저장해주었다. 2차원으로 만든 이유는 원판의 숫자 개수가 모두 ..
이펙트 Niagara System 플레이어가 걸어다니는 이펙트를 만들기 위해 나이아가라 시스템을 생성해주었다. 내가 아는 나이아가라는 폭포밖에 없는데... 이번 기회에 얕은 지식을 확장시켜야겠다. Emitter이나 프리뷰나 타임라인 등이 있는 걸로 봐선 Unity의 Particle System과 비슷하다고 추측된다. 강의의 진행에 따라 Loop Behavior를 Infinite에서 Once로 바꿔주었다. 빈 Emitter를 생성해주고 Spawn Burst Instantaneous를 선택했다. 그러자 프리뷰에 동그란 친구 하나가 생성되었다! 생성 카운트를 늘려보았더니 더 진해졌다. 생성된 100개의 친구가 이동하지 않고 같은 자리에 생성되는 모양이다. Initialize Particle을 선택한 뒤 다양한..