1#pragma once
2
3#include <nn/gfx/gfx_Device.h>
4#include <nn/gfx/gfx_ResTextureData.h>
5#include <nn/gfx/gfx_TextureInfo.h>
6#include <nn/util.h>
7#include <nn/util/AccessorBase.h>
8
9namespace nn::gfx {
10
11class ResTexture : public nn::util::AccessorBase<ResTextureData> {
12 NN_NO_COPY(ResTexture);
13
14public:
15 static const int Signature = 0x49545242;
16
17 static ResTexture* ToAccessor(value_type*);
18 static ResTexture& ToAccessor(value_type&);
19 static const ResTexture* ToAccessor(const value_type*);
20 static const ResTexture& ToAccessor(const value_type&);
21
22 TextureInfo* GetTextureInfo();
23 const TextureInfo* GetTextureInfo() const;
24 detail::Caster<void> GetTexture();
25 detail::Caster<const void> GetTexture() const;
26 detail::Caster<void> GetTextureView();
27 detail::Caster<const void> GetTextureView() const;
28 const char* GetName() const;
29 size_t GetDataSize() const;
30 ResUserData* GetUserData(int);
31 const ResUserData* GetUserData(int) const;
32 const nn::util::ResDic* GetUserDataDic() const;
33 void SetUserDescriptorSlot(const DescriptorSlot&);
34 void GetUserDescriptorSlot(DescriptorSlot*) const;
35};
36
37class ResTextureFile : public nn::util::AccessorBase<ResTextureFileData> {
38 NN_NO_COPY(ResTextureFile);
39
40public:
41 static const int64_t Signature = 0x58544E42;
42 static const int MajorVersion = 4;
43 static const int MinorVersion = 0;
44 static const int MicroVersion = 0;
45
46 static size_t GetMaxFileAlignment();
47
48 static ResTextureFile* ToAccessor(value_type* pData) {
49 return static_cast<ResTextureFile*>(pData);
50 }
51
52 static ResTextureFile& ToAccessor(value_type& data) {
53 return static_cast<ResTextureFile&>(data);
54 }
55
56 static const ResTextureFile* ToAccessor(const value_type*);
57 static const ResTextureFile& ToAccessor(const value_type&);
58 static bool IsValid(const void*);
59 static ResTextureFile* ResCast(void*);
60
61 ResTexture* GetResTexture(int);
62 const ResTexture* GetResTexture(int) const;
63 const nn::util::ResDic* GetTextureDic() const;
64 nn::util::BinaryFileHeader* GetBinaryFileHeader();
65 const nn::util::BinaryFileHeader* GetBinaryFileHeader() const;
66
67 template <typename TTarget>
68 void Initialize(TDevice<TTarget>*);
69
70 template <typename TTarget>
71 void Initialize(TDevice<TTarget>*, TMemoryPool<TTarget>*, ptrdiff_t, size_t);
72
73 template <typename TTarget>
74 void Finalize(TDevice<TTarget>*);
75};
76
77} // namespace nn::gfx