일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Dijkstra
- union find
- two pointer
- DP
- 다익스트라
- binary search
- Two Points
- String
- 스토어드 프로시저
- MYSQL
- Hash
- Trie
- Brute Force
- 이진탐색
- Stored Procedure
- SQL
- 그래프
Archives
- Today
- Total
codingfarm
6. Direct3D의 그리기 연산 - 기하구조 보조 구조체 본문
이번절의 내용은 Direct3D에서 공식적으로 제공해주는 기능이 아니다.
기하 구조 보조 구조체
- 정의 : 하나의 기하 그룹을 정의하는 vertex buffer와 index buffer를 한데 엮는 보조 구조체
- vertex 및 index data를 system memory에 유지해서 CPU가 그 자료를 언제라도 읽을 수 있게 한다.
- 선택(picking)이나 충돌 검출을 위해서는 CPU가 기하구조 자료에 접근 해야 한다.
- 버퍼 형식이나 보폭(stride) 같은 정점 버퍼와 색인 버퍼의 주요 속성들을 담아둔다.
- 버퍼에 대한 view를 도려주는 메서드를 제공
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
struct SubmeshGeometry
{
UINT IndexCount = 0;
UINT StartIndexLocation = 0;
INT BaseVertexLocation = 0;
// Bounding box of the geometry defined by this submesh.
// This is used in later chapters of the book.
DirectX::BoundingBox Bounds;
};
struct MeshGeometry
{
// Give it a name so we can look it up by name.
std::string Name;
// System memory copies. Use Blobs because the vertex/index format can be generic.
// It is up to the client to cast appropriately.
Microsoft::WRL::ComPtr<ID3DBlob> VertexBufferCPU = nullptr;
Microsoft::WRL::ComPtr<ID3DBlob> IndexBufferCPU = nullptr;
Microsoft::WRL::ComPtr<ID3D12Resource> VertexBufferGPU = nullptr;
Microsoft::WRL::ComPtr<ID3D12Resource> IndexBufferGPU = nullptr;
Microsoft::WRL::ComPtr<ID3D12Resource> VertexBufferUploader = nullptr;
Microsoft::WRL::ComPtr<ID3D12Resource> IndexBufferUploader = nullptr;
// Data about the buffers.
UINT VertexByteStride = 0;
UINT VertexBufferByteSize = 0;
DXGI_FORMAT IndexFormat = DXGI_FORMAT_R16_UINT;
UINT IndexBufferByteSize = 0;
// A MeshGeometry may store multiple geometries in one vertex/index buffer.
// Use this container to define the Submesh geometries so we can draw
// the Submeshes individually.
std::unordered_map<std::string, SubmeshGeometry> DrawArgs;
D3D12_VERTEX_BUFFER_VIEW VertexBufferView()const
{
D3D12_VERTEX_BUFFER_VIEW vbv;
vbv.BufferLocation = VertexBufferGPU->GetGPUVirtualAddress();
vbv.StrideInBytes = VertexByteStride;
vbv.SizeInBytes = VertexBufferByteSize;
return vbv;
}
D3D12_INDEX_BUFFER_VIEW IndexBufferView()const
{
D3D12_INDEX_BUFFER_VIEW ibv;
ibv.BufferLocation = IndexBufferGPU->GetGPUVirtualAddress();
ibv.Format = IndexFormat;
ibv.SizeInBytes = IndexBufferByteSize;
return ibv;
}
// We can free this memory after we finish upload to the GPU.
void DisposeUploaders()
{
VertexBufferUploader = nullptr;
IndexBufferUploader = nullptr;
}
};
|
cs |
'computer graphics > DX12 book' 카테고리의 다른 글
6. Direct3D의 그리기 연산 - 연습문제 (0) | 2021.06.30 |
---|---|
6. Direct3D의 그리기 연산 - 박스 예제 (0) | 2021.06.30 |
6. Direct3D의 그리기 연산 - 파이프라인 상태 객체 (0) | 2021.06.19 |
6. Direct3D의 그리기 연산 - 래스터화기 상태 (0) | 2021.06.19 |
6. Direct3D의 그리기 연산 - 셰이더의 컴파일 (0) | 2021.06.16 |
Comments