#pragma once #include "Resource.h" struct LockedTextureData { void* Data; uint32 RowPitch; }; struct TextureInitialData { TextureInitialData() : Data(NULL) , Pitch(0) , Owner(true) {} TextureInitialData(void* Data, uint32 Pitch) : Data(Data) , Pitch(Pitch) , Owner(true) {} ~TextureInitialData() { if (Owner && Data != NULL) delete [] Data; } void* Data; uint32 Pitch; bool Owner; }; struct CreateTextureDescriptor { uint32 Width; uint32 Height; uint32 Elements; uint32 MipLevels; DataFormat::Enumeration Format; DataAccessType::Enumeration AccessType; TextureInitialData* InitialData_; static CreateTextureDescriptor AsSingleTexture(uint32 Width, uint32 Height, uint32 MipLevels = 1, DataFormat::Enumeration Format = DataFormat::R8G8B8A8_SignedNormalized, TextureInitialData* InitialData_ = NULL, DataAccessType::Enumeration AccessType = DataAccessType::Dynamic) { CreateTextureDescriptor Desc; Desc.Width = Width; Desc.Height = Height; Desc.Elements = 0; Desc.Format = Format; Desc.AccessType = AccessType; Desc.InitialData_ = InitialData_; Desc.MipLevels = MipLevels; return Desc; } static CreateTextureDescriptor AsArrayTexture(uint32 Width, uint32 Height, uint32 MipLevels = 1, uint32 Elements = 1, DataFormat::Enumeration Format = DataFormat::R8G8B8A8_SignedNormalized, TextureInitialData* InitialData_ = NULL) { CreateTextureDescriptor Desc; Desc.Width = Width; Desc.Height = Height; Desc.Elements = Elements; Desc.Format = Format; Desc.AccessType = DataAccessType::Static; Desc.InitialData_ = InitialData_; Desc.MipLevels = MipLevels; return Desc; } }; struct IFile; struct __declspec(novtable) ITexture { virtual string8 get_BindingName() const = 0; virtual void set_BindingName(const string8& argName) = 0; virtual string16 get_FileName() const = 0; virtual uint32 get_TextureWidth() const = 0; virtual uint32 get_TextureHeight() const = 0; virtual uint32 get_TextureArraySize() const = 0; virtual DataFormat::Enumeration get_TextureFormat() const = 0; virtual void LoadFromFile(const string16& argFileName, DataAccessType::Enumeration argAccessType = DataAccessType::Static) = 0; virtual void CreateTexture(const CreateTextureDescriptor& argDesc) = 0; virtual LockedTextureData LockTextureBuffer(DataAccessMode::Enumeration argAccessMode, uint32 argArrayElement = 0) = 0; virtual void UnlockTextureBuffer() = 0; virtual void CreateRenderTargetTexture(uint32 argWidth, uint32 argHeight, DataFormat::Enumeration argFormat, uint32 argMultiSampleCount, uint32 argMultiSampleQuality) = 0; virtual ID3D10ShaderResourceView* get_ResourceViewFromTexture() const = 0; virtual ID3D10Texture2D* get_Texture2D() const = 0; };