-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModuleResource.h
More file actions
93 lines (71 loc) · 3.64 KB
/
Copy pathModuleResource.h
File metadata and controls
93 lines (71 loc) · 3.64 KB
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#pragma once
#include "Module.h"
#include <filesystem>
#include <vector>
namespace DirectX
{
class ScratchImage;
struct TexMetadata;
}
class ModuleResource : public Module
{
private:
// Comandament i Allocator dedicats a l'inicialització de recursos
ComPtr<ID3D12CommandAllocator> commandAllocator;
ComPtr<ID3D12GraphicsCommandList> commandList;
bool m_commandListOpen = false; // ADD THIS
// dades temporals per a la càrrega de textures (note: multithreading issues)
std::vector<D3D12_PLACED_SUBRESOURCE_FOOTPRINT> layouts;
std::vector<UINT> numRows;
std::vector<UINT64> rowSizes;
// Estructura per a l'alliberament segur de recursos
struct DeferredFree
{
UINT frame = 0;
ComPtr<ID3D12Resource> resource;
};
std::vector<DeferredFree> deferredFrees;
public:
ModuleResource();
~ModuleResource();
bool init() override;
void preRender() override;
bool cleanUp() override;
// Creació de Buffers
ComPtr<ID3D12Resource> createUploadBuffer(const void* data, size_t size, const char* name);
ComPtr<ID3D12Resource> createDefaultBuffer(const void* data, size_t size, const char* name);
// Creació de Textures
ComPtr<ID3D12Resource> createRawTexture2D(const void* data, size_t rowSize, size_t width, size_t height, DXGI_FORMAT format);
ComPtr<ID3D12Resource> createTextureFromMemory(const void* data, size_t size, const char* name);
ComPtr<ID3D12Resource> createTextureFromFile(const std::filesystem::path& path, bool defaultSRGB = false);
// Creació de Render Targets (RT) i Depth Stencils (DS)
ComPtr<ID3D12Resource> createRenderTarget(DXGI_FORMAT format, size_t width, size_t height, UINT sampleCount, const Vector4& clearColour, const char* name);
ComPtr<ID3D12Resource> createDepthStencil(DXGI_FORMAT format, size_t width, size_t height, UINT sampleCount, float clearDepth, uint8_t clearStencil, const char* name);
// Helpers per Cubemaps
ComPtr<ID3D12Resource> createCubemapRenderTarget(DXGI_FORMAT format, size_t size, const Vector4& clearColour, const char* name);
ComPtr<ID3D12Resource> createCubemapRenderTarget(DXGI_FORMAT format, size_t size, size_t mipLevels, const Vector4& clearColour, const char* name);
// Gestió de Recursos
void deferRelease(ComPtr<ID3D12Resource> resource);
private:
// Funcions de suport privades
ComPtr<ID3D12Resource> createTextureFromImage(const ScratchImage& image, const char* name);
ComPtr<ID3D12Resource> createRenderTarget(DXGI_FORMAT format, size_t width, size_t height, size_t arraySize, size_t mipLevels, UINT sampleCount, const Vector4& clearColour, const char* name);
ComPtr<ID3D12Resource> getUploadHeap(size_t size);
// Helper functions for command list management
bool beginCommandList();
void endCommandListAndExecute();
void ensureCommandListClosed(); // ADD THIS
};
// --- Implementacions Inline ---
inline ComPtr<ID3D12Resource> ModuleResource::createRenderTarget(DXGI_FORMAT format, size_t width, size_t height, UINT sampleCount, const Vector4& clearColour, const char* name)
{
return createRenderTarget(format, width, height, 1, 1, sampleCount, clearColour, name);
}
inline ComPtr<ID3D12Resource> ModuleResource::createCubemapRenderTarget(DXGI_FORMAT format, size_t size, const Vector4& clearColour, const char* name)
{
return createRenderTarget(format, size, size, 6, 1, 1, clearColour, name);
}
inline ComPtr<ID3D12Resource> ModuleResource::createCubemapRenderTarget(DXGI_FORMAT format, size_t size, size_t mipLevels, const Vector4& clearColour, const char* name)
{
return createRenderTarget(format, size, size, 6, mipLevels, 1, clearColour, name);
}