DXBuffer.h 3.5 KB

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