Advertisement
Ember

buffer wip

Jan 22nd, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. /*
  2. -----------------------------------------------------------------------------
  3. Filename: Buffer.hpp
  4. -----------------------------------------------------------------------------
  5.  
  6. -----------------------------------------------------------------------------
  7. */
  8.  
  9. // Declare Once
  10. #pragma once
  11. // Includes
  12. #include "Defines.hpp"
  13.  
  14. // Namespace ------------------------------------------------------------------------------
  15. namespace R3D
  16. {
  17.     // Class definition -------------------------------------------------------------------
  18.     template <typename T> class Buffer
  19.     {
  20.     public:
  21.         enum class Usage : UByte
  22.         {
  23.             Default = 0,
  24.             Immutable = 1,
  25.             Dynamic = 2,
  26.             Staging = 3
  27.         };
  28.  
  29.         enum class Type : UInt
  30.         {
  31.             VertexBuffer = 0x1L,
  32.             IndexBuffer = 0x2L,
  33.             ConstantBuffer = 0x4L,
  34.             ShaderResource = 0x8L,
  35.             StreamOutput = 0x10L,
  36.             RenderTarget = 0x20L,
  37.             DepthStencil = 0x40L,
  38.             UnorderedAccess = 0x80L,
  39.             Decoder = 0x200L,
  40.             VideoEncoder = 0x400L
  41.         };
  42.  
  43.         enum class CPUAccess : UInt
  44.         {
  45.             None = 0,
  46.             Write = 0x10000L,
  47.             Read = 0x20000L
  48.         };
  49.  
  50.         enum class MiscFlags : UInt
  51.         {
  52.             None = 0,
  53.             GenerateMips = 0x1L,
  54.             Shared = 0x2L,
  55.             TextureCUBE = 0x4L,
  56.             DrawIndirectArgs = 0x10L,
  57.             BufferAllowRawViews = 0x20L,
  58.             BufferStructured = 0x40L,
  59.             ResourceClamp = 0x80L,
  60.             SharedKeyedMutex = 0x100L,
  61.             GDICompatible = 0x200L,
  62.             SharedNTHandle = 0x800L,
  63.             RestrictedContent = 0x1000L,
  64.             RestrictSharedResource = 0x2000L,
  65.             RestrictSharedResourceDriver = 0x4000L,
  66.             Guarded = 0x8000L,
  67.             TilePool = 0x20000L,
  68.             Tiled = 0x40000L
  69.         };
  70.  
  71.         struct Description
  72.         {
  73.             UInt Size;
  74.             Type Type;
  75.             CPUAccess CPUAccess = CPUAccess::None;
  76.             MiscFlags MiscFlags = MiscFlags::None;
  77.             UInt StructureByteStride = 0;
  78.             Usage Usage = Usage::Default;
  79.         };
  80.  
  81.         struct Data
  82.         {
  83.         public:
  84.             Pointer Memory = nullptr;
  85.             UInt Width = 0;
  86.             UInt Height = 0;
  87.  
  88.             Data(Pointer data) : Memory(data), Width(0), Height(0) {};
  89.         };
  90.  
  91.     public:
  92.         ID3D11Buffer* mBuffer;
  93.         UInt Size;
  94.  
  95.     public:
  96.         // Constructors
  97.         Buffer() = default;
  98.         Buffer(const Buffer& other) = delete;
  99.         ~Buffer() { Release(); };
  100.        
  101.         // Methods
  102.         bool Create(Buffer::Description description, Buffer::Data data = nullptr);
  103.         void Update(Pointer data);
  104.         Pointer Map();
  105.         void Unmap();
  106.         void Release() { if(mBuffer) { mBuffer->Release(); delete mBuffer; mBuffer = nullptr; } };
  107.     };
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement