| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- #pragma once
- #include "OperatingSystem.h"
- #include "ReferenceCounter.h"
- #ifdef WIN32
- struct ID3D11Buffer;
- struct D3D11_BUFFER_DESC;
- struct ID3D11ShaderResourceView;
- struct ID3D11Device;
- struct ID3D11DeviceContext;
- #endif
- namespace Framework
- {
- class DX12CopyCommandQueue;
- class DX12DirectCommandQueue;
- //! An interface between main memory and graphics memory
- class DXBuffer : public virtual ReferenceCounter
- {
- protected:
- void* data;
- bool changed;
- int len;
- int elLen;
- public:
- //! Constructor
- //! \param bind The usage of the buffer. Example:
- //! D3D11_BIND_INDEX_BUFFER, D3D11_BIND_VERTEX_BUFFER. \param eLen
- //! Length of a single element in bytes
- DLLEXPORT DXBuffer(int eLen);
- //! Destructor
- DLLEXPORT virtual ~DXBuffer();
- //! Sets the changed flag so that the data is copied again on the
- //! next call of 'copy'
- DLLEXPORT void setChanged();
- //! Changes the length of the buffer on the next call of 'copy'
- //! \param len The length in bytes
- DLLEXPORT void setLength(int len);
- //! Sets what will be copied on the next call of 'copy'
- //! \param data A pointer to the data
- DLLEXPORT void setData(void* data);
- //! Copies the data into the buffer if it has changed
- DLLEXPORT virtual void copyData(int byteCount = -1) = 0;
- //! Returns the length of an element in bytes
- DLLEXPORT int getElementLength() const;
- //! Returns the number of elements in the buffer
- DLLEXPORT int getElementCount() const;
- };
- #ifdef WIN32
- //! A buffer with data in graphics memory
- class DX11Buffer : public DXBuffer
- {
- protected:
- D3D11_BUFFER_DESC* description;
- ID3D11Buffer* buffer;
- ID3D11Device* device;
- ID3D11DeviceContext* context;
- public:
- //! Constructor
- //! eSize: The length of an element in bytes
- DLLEXPORT DX11Buffer(int eSize,
- ID3D11Device* device,
- ID3D11DeviceContext* context,
- int bindFlags);
- //! Destructor
- DLLEXPORT virtual ~DX11Buffer();
- //! Copies the data into the buffer if it has changed
- DLLEXPORT virtual void copyData(int byteCount = -1) override;
- //! Returns the buffer
- DLLEXPORT ID3D11Buffer* zBuffer() const;
- };
- //! A buffer of indices from the vertex buffer, where every three
- //! form a triangle that is drawn
- class DX11StructuredBuffer : public DX11Buffer
- {
- private:
- ID3D11ShaderResourceView* view;
- public:
- //! Constructor
- //! eSize: The length of an element in bytes
- DLLEXPORT DX11StructuredBuffer(
- int eSize, ID3D11Device* device, ID3D11DeviceContext* context);
- //! Destructor
- DLLEXPORT virtual ~DX11StructuredBuffer();
- //! Copies the data into the buffer if it has changed
- DLLEXPORT void copyData(int byteCount = -1) override;
- //! Returns the used shader resource view
- DLLEXPORT operator ID3D11ShaderResourceView*() const;
- };
- #endif
- } // namespace Framework
|