DXBuffer.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #pragma once
  2. #include "Betriebssystem.h"
  3. #include "ReferenceCounter.h"
  4. #ifdef WIN32
  5. struct ID3D11Buffer;
  6. struct D3D11_BUFFER_DESC;
  7. struct ID3D11ShaderResourceView;
  8. struct ID3D11Device;
  9. struct ID3D11DeviceContext;
  10. #endif
  11. namespace Framework
  12. {
  13. class DX12CopyCommandQueue;
  14. class DX12DirectCommandQueue;
  15. //! Eine Schnittstelle zwischen dem Arbeitsspeicher und dem Grafikspeicher
  16. class DXBuffer : public virtual ReferenceCounter
  17. {
  18. protected:
  19. void* data;
  20. bool changed;
  21. int len;
  22. int elLen;
  23. public:
  24. //! Konstruktor
  25. //! \param bind Der verwendungszweck des Buffers. Beispiel:
  26. //! D3D11_BIND_INDEX_BUFFER, D3D11_BIND_VERTEX_BUFFER. \param eLen Länge
  27. //! eines einzelnen Elements in Bytes
  28. DLLEXPORT DXBuffer(int eLen);
  29. //! Destruktor
  30. DLLEXPORT virtual ~DXBuffer();
  31. //! Setzt den geändert fläg, so das beim nächsten auruf von 'kopieren'
  32. //! die daten neu kopiert werden
  33. DLLEXPORT void setChanged();
  34. //! Ändert die länge des Buffers beim nächsten aufruf von 'kopieren'
  35. //! \param len Die Länge in Bytes
  36. DLLEXPORT void setLength(int len);
  37. //! Legt fest, was beim nächsten aufruf von 'kopieren' kopiert wird
  38. //! \param data Ein zeiger auf die Daten
  39. DLLEXPORT void setData(void* data);
  40. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  41. DLLEXPORT virtual void copieren(int byteCount = -1) = 0;
  42. //! Gibt die Länge eines Elementes in bytes zurück
  43. DLLEXPORT int getElementLength() const;
  44. //! Gibt die Anzahl der Elemente im Buffer zurück
  45. DLLEXPORT int getElementAnzahl() const;
  46. };
  47. #ifdef WIN32
  48. //! Ein Buffer mit Daten im Grafikspeicher
  49. class DX11Buffer : public DXBuffer
  50. {
  51. protected:
  52. D3D11_BUFFER_DESC* description;
  53. ID3D11Buffer* buffer;
  54. ID3D11Device* device;
  55. ID3D11DeviceContext* context;
  56. public:
  57. //! Konstruktor
  58. //! eSize: Die Länge eines Elementes in Bytes
  59. DLLEXPORT DX11Buffer(int eSize,
  60. ID3D11Device* device,
  61. ID3D11DeviceContext* context,
  62. int bindFlags);
  63. //! Destruktor
  64. DLLEXPORT virtual ~DX11Buffer();
  65. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  66. DLLEXPORT void copieren(int byteCount = -1) override;
  67. //! Gibt den Buffer zurück
  68. DLLEXPORT ID3D11Buffer* zBuffer() const;
  69. };
  70. //! Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei
  71. //! ein Dreieck ergeben, das gezeichnet wird
  72. class DX11StructuredBuffer : public DX11Buffer
  73. {
  74. private:
  75. ID3D11ShaderResourceView* view;
  76. public:
  77. //! Konstruktor
  78. //! eSize: Die Länge eines Elementes in Bytes
  79. DLLEXPORT DX11StructuredBuffer(
  80. int eSize, ID3D11Device* device, ID3D11DeviceContext* context);
  81. //! Destruktor
  82. DLLEXPORT virtual ~DX11StructuredBuffer();
  83. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  84. DLLEXPORT void copieren(int byteCount = -1) override;
  85. //! Gibt die verwendtete Shader Resource View zurück
  86. DLLEXPORT operator ID3D11ShaderResourceView*() const;
  87. };
  88. #endif
  89. } // namespace Framework