DXBuffer.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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: D3D11_BIND_INDEX_BUFFER, D3D11_BIND_VERTEX_BUFFER.
  26. //! \param eLen Länge eines einzelnen Elements in Bytes
  27. DLLEXPORT DXBuffer(int eLen);
  28. //! Destruktor
  29. DLLEXPORT virtual ~DXBuffer();
  30. //! Setzt den geändert fläg, so das beim nächsten auruf von 'kopieren' die daten neu kopiert werden
  31. DLLEXPORT void setChanged();
  32. //! Ändert die länge des Buffers beim nächsten aufruf von 'kopieren'
  33. //! \param len Die Länge in Bytes
  34. DLLEXPORT void setLength(int len);
  35. //! Legt fest, was beim nächsten aufruf von 'kopieren' kopiert wird
  36. //! \param data Ein zeiger auf die Daten
  37. DLLEXPORT void setData(void* data);
  38. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  39. DLLEXPORT virtual void copieren(int byteCount = -1) = 0;
  40. //! Gibt die Länge eines Elementes in bytes zurück
  41. DLLEXPORT int getElementLength() const;
  42. //! Gibt die Anzahl der Elemente im Buffer zurück
  43. DLLEXPORT int getElementAnzahl() const;
  44. };
  45. #ifdef WIN32
  46. //! Ein Buffer mit Daten im Grafikspeicher
  47. class DX11Buffer : public DXBuffer
  48. {
  49. protected:
  50. D3D11_BUFFER_DESC* description;
  51. ID3D11Buffer* buffer;
  52. ID3D11Device* device;
  53. ID3D11DeviceContext* context;
  54. public:
  55. //! Konstruktor
  56. //! eSize: Die Länge eines Elementes in Bytes
  57. DLLEXPORT DX11Buffer(int eSize, ID3D11Device* device, ID3D11DeviceContext* context, int bindFlags);
  58. //! Destruktor
  59. DLLEXPORT virtual ~DX11Buffer();
  60. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  61. DLLEXPORT void copieren(int byteCount = -1) override;
  62. //! Gibt den Buffer zurück
  63. DLLEXPORT ID3D11Buffer* zBuffer() const;
  64. };
  65. //! Ein Buffer von Indizes aus dem Buffer mit Eckpunkten, wovon immer drei ein Dreieck ergeben, das gezeichnet wird
  66. class DX11StructuredBuffer : public DX11Buffer
  67. {
  68. private:
  69. ID3D11ShaderResourceView* view;
  70. public:
  71. //! Konstruktor
  72. //! eSize: Die Länge eines Elementes in Bytes
  73. DLLEXPORT DX11StructuredBuffer(int eSize, ID3D11Device* device, ID3D11DeviceContext* context);
  74. //! Destruktor
  75. DLLEXPORT virtual ~DX11StructuredBuffer();
  76. //! Kopiert die Daten in den Buffer, fals sie sich verändert haben
  77. DLLEXPORT void copieren(int byteCount = -1) override;
  78. //! Gibt die verwendtete Shader Resource View zurück
  79. DLLEXPORT operator ID3D11ShaderResourceView* () const;
  80. };
  81. #endif
  82. }