DXBuffer.h 3.8 KB

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