OROCHI
 
Loading...
Searching...
No Matches
GxRenderTexture.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15//===========================================================================
17//===========================================================================
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
25 GX_RTTI_CLASS(GxRenderTexture, GxRenderResource)
26 // ClassBaseReference継承クラス用禁止宣言
28
29 friend class GxRenderDevice;
30
33 {
34 void* _pImage;
37 u32 _size;
38 };
39
42 {
43 //-----------------------------------------------------------
45 //-----------------------------------------------------------
47
48 private:
50 GxTextureSize(void);
51 public:
53 GxTextureSize(RENDER_FORMAT format, const GxSize& resolution, u32 mipmapIndex = 0);
54
56 //-----------------------------------------------------------
58 //-----------------------------------------------------------
60 public:
61 u32 _width;
62 u32 _height;
65
67 };
68
69#if GX_DEVELOP
71 static const GX_FLAG RENDER_ATTRIBUTE_FLAG_LIST[8];
72#endif //GX_DEVELOP
73
74#if defined(_PS5)
76 static constexpr u32 GX_MIPMAP_COUNT_MAX = GxMath::VALUE_16;
77#endif //_PS5
78
80 //-------------------------------------------------------------
82 //-------------------------------------------------------------
84public:
86 void cleanup(void) override;
87
88protected:
90 virtual b32 initialize2D(const GxSize& resolution, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
92 virtual b32 initialize3D(const GxSize& resolution, u32 depth, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
94 virtual b32 initializeCube(const GxSize& resolution, u32 mipLevel, RENDER_FORMAT format, u32 attribute);
96 virtual b32 initializeRenderTarget(const GxSize& resolution, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute);
97#if GX_USE_DX11 || GX_USE_DX12
99 virtual b32 initializeRenderTarget(GxNativeTexture pD3DTexture2D, u32 attribute);
100#endif // GX_USE_DX11 || GX_USE_DX12
101#if defined(_PS4) || defined(_PS5)
103 virtual b32 initializeFmask(const GxRenderTexture* pMultiSample);
104#endif //_PS4 || _PS5
105
107 virtual b32 initializeDepthStencil(const GxSize& resolution, RENDER_FORMAT format, RENDER_ANTI_ALIASING antiAliasing, u32 attribute);
108
109private:
111 virtual b32 initializeInner(void);
112
113protected:
115 GxRenderTexture(void);
116
118 //-------------------------------------------------------------
120 //-------------------------------------------------------------
122
123#if GX_DEVELOP
125 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
126
128 GX_FORCE_INLINE GxString getRenderNotifierName(void) const override { GxString string; return string.format("ClassName:%s Name:%s", getRtti().getClassName(), getName()); }
129public:
130#if defined(_WINDOWS)
132 void save(GX_CSTR path);
133#endif //_WINDOWS
134#endif //GX_DEVELOP
135
136public:
138 void onLostDevice(void) override;
139
141 b32 onResetDevice(void) override;
142
144 void onRender(void) override {}
145
146public:
148 virtual b32 map(u32 arrayIndex, u32 mipLevel, u32 mappingType, GxMappingInformation* pMappingInformation);
150 virtual void unmap(u32 arrayIndex, u32 mipLevel);
151#if GX_USE_DX12
152#if GX_EDITOR
154 void copyRenderTargetToTexture(void);
155#endif //GX_EDITOR
156#endif //GX_USE_DX12
157#if GX_DEVELOP
159 void getThumbnail(void* pBuffer, const GxSize& size, b32 isConstAspectRatio = false);
160#endif //GX_DEVELOP
161
162#if GX_USE_DX11 || GX_USE_DX12
164 virtual b32 freeze(void);
165#endif // GX_USE_DX11 || GX_USE_DX12
166
167protected:
169 u32 getMipSize(u32 mipLevel, u32 originalPitch);
171 u32 getMipPitch(u32 mipLevel, u32 originalPitch);
173 static u32 getMipLine(u32 mipLevel, RENDER_FORMAT format, const GxSize& resolution);
174
175#if GX_USE_DX11 || GX_USE_DX12
177 void* getMipData(u32 arrayIndex, u32 mipLevel);
178#endif // GX_USE_DX11 || GX_USE_DX12
179
181 u8 convertMsaaToSampleCount(RENDER_ANTI_ALIASING antiAliasing);
182
184 //-------------------------------------------------------------
186 //-------------------------------------------------------------
188public:
190 constexpr RENDER_TEXTURE_TYPE getType(void) const { return _type; }
192 constexpr RENDER_FORMAT getFormat(void) const { return _format; }
194 constexpr RENDER_ANTI_ALIASING getAntiAliasing(void) const { return _antiAliasing; }
196 GX_FORCE_INLINE const GxSize& getResolution(void) const { return _resolution; }
198 constexpr u32 getDepth(void) const { return _type == RENDER_TEXTURE_TYPE::_3D ? _depthOrArrayCount : 1; }
200 constexpr u32 getArrayCount(void) const { return _type == RENDER_TEXTURE_TYPE::_3D ? 1 : _depthOrArrayCount; }
202 constexpr u32 getMipLevel(void) const { return _mipLevel; }
204 constexpr u32 getAttribute(void) const { return _attribute; }
206 constexpr GX_HANDLE getHandle(void) const { return _handle; }
207
209 void setName(GX_CSTR name);
211 constexpr GX_CSTR getName(void) const { return _name.getString(); }
212
214 static u32 getBitPerPixel(RENDER_FORMAT format);
216 static u32 getPitch(RENDER_FORMAT format, u32 width);
217
219#if defined(_PS5)
220 GX_FORCE_INLINE GxNativeTexture* getTexture(void) { return &_texture; }
221#elif defined(_NX64)
222 GX_FORCE_INLINE GxNativeTexture* getTexture(void) const { return _pTexture; }
223#else //_NX64
224 GX_FORCE_INLINE GxNativeTexture getTexture(void) const { return _pTexture; }
225#endif // !_NX64
226
227#if GX_USE_DX11 || GX_USE_DX12
229 static RENDER_FORMAT getFormat(GxNativeRenderFormat nativeFormat);
230#endif //GX_USE_DX11 || GX_USE_DX12
232 static GxNativeRenderFormat getNativeFormat(RENDER_FORMAT format, u32 attribute);
233
234#if GX_USE_DX11 || GX_USE_DX12
235#if GX_USE_DX11
237 static D3D_SRV_DIMENSION getSRVDimension(RENDER_TEXTURE_TYPE type);
239 static D3D11_UAV_DIMENSION getUAVDimension(RENDER_TEXTURE_TYPE type);
240#endif //GX_USE_DX11
241
243 GxNativeRenderTarget getRenderTarget(void) const { return _pRenderTarget; }
245 GxNativeDepthStencil getDepthStencil(void) const { return _pDepthStencil; }
246#if GX_USE_DX11
248 ID3D11ShaderResourceView* getD3D11ShaderResourceView(void) const { return _pD3D11ShaderResourceView; }
250 ID3D11UnorderedAccessView* getD3D11UnorderedAccessView(void) const { return _pD3D11UnorderedAccessView; }
252 GxNativeDepthStencil getD3D11ReadOnlyDepthStencilView(void) const { return _pReadOnlyDepthStencilView; }
253#elif GX_USE_DX12
255 GX_FORCE_INLINE D3D12_CPU_DESCRIPTOR_HANDLE getD3D12RenderTargetDescriptorHandle(void) const { return _pD3D12DescriptorHeapRtv->GetCPUDescriptorHandleForHeapStart(); }
257 GX_FORCE_INLINE D3D12_CPU_DESCRIPTOR_HANDLE getD3D12DepthStencilDescriptorHandle(void) const { return _pD3D12DescriptorHeapDsv->GetCPUDescriptorHandleForHeapStart(); }
259 constexpr u32 getDescriptorHeapIndexSrv(void) const { return _descriptorHeapIndexSrv; }
261 constexpr u32 getDescriptorHeapIndexUav(void) const { return _descriptorHeapIndexUav; }
263 GX_FORCE_INLINE b32 isD3DResourceStates(D3D12_RESOURCE_STATES states) const { return _d3dResourceStates == states || (_d3dResourceStates & states) > 0; }
265 constexpr D3D12_RESOURCE_STATES getD3DResourceStates(void) const { return _d3dResourceStates; }
267 constexpr void setD3DResourceStates(D3D12_RESOURCE_STATES states) { _d3dResourceStates = states; }
268#endif //GX_USE_DX12
269#elif defined(_NX64)
271 constexpr u32 getTextureID(void) const { return _textureId; }
273 void setTexture(GxNativeTexture* pTexture, const GxSize* pOverrideResolution = nullptr);
275 static GxNativeTextureTarget getTextureTarget(RENDER_TEXTURE_TYPE format, u32 attribute, RENDER_ANTI_ALIASING antiAliasing);
277 static b32 getSwizzle(RENDER_FORMAT format, GxNativeTextureSwizzle& red, GxNativeTextureSwizzle& green, GxNativeTextureSwizzle& blue, GxNativeTextureSwizzle& alpha);
279 static u32 getAntiAliasSamples(RENDER_ANTI_ALIASING antiAliasing);
280#endif // _NX64
281
282#if GX_DEVELOP
284 const GxColorHDR getTexel( GxPoint2 position, u32 mipLevel, u32 arrayIndex = 0 );
285private:
287 const GxColorHDR getTexelTile( u32 width, const u8* pImage, u32 positionX, u32 positionY ) const;
289 const GxColorHDR getTexelDXT1( u32 width, const u8* pImage, u32 positionX, u32 positionY ) const;
291 const GxColorHDR getTexelDXT3( u32 width, const u8* pImage, u32 positionX, u32 positionY ) const;
293 const GxColorHDR getTexelDXT5( u32 width, const u8* pImage, u32 positionX, u32 positionY ) const;
295 const GxColor getDecompressColor( const u16 color ) const;
297 const GxColorHDR getCalculateColorDXT( GxColor color0, GxColor color1, u8 alpha, u8 positionCode ) const;
298#endif //GX_DEVELOP
299
301 //-------------------------------------------------------------
303 //-------------------------------------------------------------
305private:
306 RENDER_TEXTURE_TYPE _type;
307 RENDER_FORMAT _format;
308 RENDER_ANTI_ALIASING _antiAliasing;
309 GxSize _resolution;
310 u32 _depthOrArrayCount;
311 u32 _mipLevel;
312 u32 _attribute;
313 GX_HANDLE _handle;
314 GxString _name;
315 b32 _isTextureSurface;
316 u32 _mappingType;
317
318#if defined(_PS5)
319 GxNativeTexture _texture;
320#elif defined(_NX64)
321 GxNativeTexture* _pTexture;
322#else //_NX64
323 GxNativeTexture _pTexture;
324#endif // !_NX64
325#if GX_USE_DX11 || GX_USE_DX12
326 GxNativeRenderTarget _pRenderTarget;
327 GxNativeDepthStencil _pDepthStencil;
328#elif defined(_PS5)
329 GxNativeRenderTarget _renderTarget;
330 GxNativeDepthStencil _depthStencil;
331#endif //_PS5
332#if GX_USE_DX11 || GX_USE_DX12
333 GxNativeTexture _pTextureMap;
334 void* _pTextureData;
335#if GX_USE_DX11
336 ID3D11ShaderResourceView* _pD3D11ShaderResourceView;
337 ID3D11UnorderedAccessView* _pD3D11UnorderedAccessView;
338 GxNativeDepthStencil _pReadOnlyDepthStencilView;
339#elif GX_USE_DX12
340 ComPtr<ID3D12DescriptorHeap> _pD3D12DescriptorHeapRtv;
341 ComPtr<ID3D12DescriptorHeap> _pD3D12DescriptorHeapDsv;
342 u32 _descriptorHeapIndexSrv;
343 u32 _descriptorHeapIndexUav;
344 u32 _rtvDescriptorSize;
345 D3D12_RESOURCE_STATES _d3dResourceStates;
346#endif // GX_USE_DX12
347#elif defined(_PS5)
348 u32 _sliceSize;
349 GxSize _mipSizes[GX_MIPMAP_COUNT_MAX];
350 u32 _mipOffsets[GX_MIPMAP_COUNT_MAX];
351#elif defined(_NX64)
352 s32 _textureId;
353 void* _pMappedRawData;
354#endif // _NX64
355
356#if GX_DEVELOP
357 u32 _vramAllocateSize;
358#endif //GX_DEVELOP
360};
361
362GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
RENDER_ANTI_ALIASING
アンチエイリアシング
Definition GxRender.h:382
RENDER_FORMAT
フォーマット
Definition GxRender.h:269
RENDER_TEXTURE_TYPE
テクスチャ形式
Definition GxRender.h:405
static constexpr u32 VALUE_16
16
Definition GxMath.h:123
プロパティクラス
Definition GxProperty.h:48
描画関連の依存をこのクラスで吸収します
Definition GxRenderDevice.h:450
GPUリソースを管理する
Definition GxRenderResource.h:20
テクスチャクラス
Definition GxRenderTexture.h:19
constexpr RENDER_TEXTURE_TYPE getType(void) const
テクスチャタイプを取得
Definition GxRenderTexture.h:190
constexpr GX_CSTR getName(void) const
名前の取得
Definition GxRenderTexture.h:211
constexpr u32 getDepth(void) const
3D深度を取得
Definition GxRenderTexture.h:198
GX_FORCE_INLINE GxNativeTexture getTexture(void) const
テクスチャを取得
Definition GxRenderTexture.h:224
constexpr u32 getAttribute(void) const
属性を取得
Definition GxRenderTexture.h:204
void onRender(void) override
描画通知
Definition GxRenderTexture.h:144
constexpr RENDER_FORMAT getFormat(void) const
フォーマットを取得
Definition GxRenderTexture.h:192
constexpr u32 getMipLevel(void) const
ミップレベル
Definition GxRenderTexture.h:202
constexpr RENDER_ANTI_ALIASING getAntiAliasing(void) const
アンチエイリアシングを取得
Definition GxRenderTexture.h:194
constexpr GX_HANDLE getHandle(void) const
テクスチャハンドルを取得
Definition GxRenderTexture.h:206
GX_FORCE_INLINE const GxSize & getResolution(void) const
解像度を取得
Definition GxRenderTexture.h:196
constexpr u32 getArrayCount(void) const
配列数を取得
Definition GxRenderTexture.h:200
実行時型情報クラス
Definition GxRtti.h:154
GUI用フラグ型
Definition GxDefine.h:203
色(HDR)
Definition GxColor.h:241
Definition GxColor.h:21
座標
Definition GxStruct.h:867
マッピング情報
Definition GxRenderTexture.h:33
void * _pImage
マッピングされたイメージの先頭ポインタ
Definition GxRenderTexture.h:34
u32 _rowPitch
次のラインへのバイト数(DXTフォーマットの時はブロック単位 幅256dotのDXT1の場合、256[pix]/4[pix/block]*8[byte])
Definition GxRenderTexture.h:35
u32 _size
サイズ
Definition GxRenderTexture.h:37
u32 _lineCount
ライン数(DXTフォーマットの時はブロック単位 高さ256pixのの場合、256[pix]/4[pix/block])
Definition GxRenderTexture.h:36
テクスチャサイズ構造体
Definition GxRenderTexture.h:42
u32 _width
Definition GxRenderTexture.h:61
u32 _rowPitch
行単位バイト数
Definition GxRenderTexture.h:63
u32 _texelPitch
イメージブロックバイト数
Definition GxRenderTexture.h:64
u32 _height
高さ
Definition GxRenderTexture.h:62
サイズ
Definition GxStruct.h:730
文字列型クラス
Definition GxString.h:18
const GxString & format(GX_CSTR format,...)
フォーマット出力
Definition GxString.cpp:1913
32bitブーリアン
Definition GxDefine.h:173