Shader.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #pragma once
  2. struct ID3D10Blob;
  3. struct ID3D11PixelShader;
  4. struct ID3D11VertexShader;
  5. struct ID3D11Device;
  6. struct ID3D11DeviceContext;
  7. struct D3D11_INPUT_ELEMENT_DESC;
  8. struct ID3D11Buffer;
  9. struct ID3D11InputLayout;
  10. namespace Framework
  11. {
  12. class Text;
  13. class DXBuffer;
  14. enum ShaderType
  15. {
  16. UNBEKANNT,
  17. VERTEX,
  18. PIXEL
  19. };
  20. // Eine Shader Klasse, die alle Constanten Buffers eines Shaders verwaltet
  21. class Shader
  22. {
  23. protected:
  24. ShaderType type;
  25. DXBuffer * constBuffers[ 14 ];
  26. int ref;
  27. public:
  28. // Konstruktor
  29. Shader();
  30. // Destruktor
  31. virtual ~Shader();
  32. // Setzt den Compilierten Shader
  33. // zD3d11Device: Das Device, mit welchem der Shader erstellt werden soll
  34. // bytes: Die Bytes des compilierten codes
  35. // length: die Länge des bytearrays
  36. // return: true, wenn bytes gültig ist, false sonst
  37. virtual bool setCompiledByteArray( unsigned char* bytes, int length ) = 0;
  38. // Nach dem Aufruf dieser Funktion wird dieser Shader als Pixel Shader benutzt
  39. // zD3d11Context: Das Context Objekt, mit dem der Shader verwendet werden soll
  40. virtual void benutzeShader() = 0;
  41. // erstellt ein constanten Buffer, der constante daten an den Shader übergibt
  42. // es können maximal 14 Buffer erstellt werden
  43. // zD3d11Device: Das Device, mit dem der Buffer erstellt werden soll
  44. // size: Die größe des buffers in byte
  45. // index: Die position des Buffers im Buffer Array. Bereits vorhanderner Buffer wird ersetzt. Buffer 1 kann nicht erstellt werden, wenn Buffer 0 noch nicht erstellt wurde usw.
  46. virtual bool erstelleConstBuffer( int size, int index ) = 0;
  47. // Löscht einen constanten Buffer
  48. // index: der Index des Buffers, der gelöscht werden soll. Buffer 0 kann nicht gelöscht werden, solange Buffer 1 noch existiert usw.
  49. bool removeConstBuffer( int index );
  50. // Kopiert daten in einen constanten buffer
  51. // zD3d11Context: Das Context Objekt, das zum kopieren verwendt werden soll
  52. // data: Einen zeiger auf en byte Array der größe des Buffers
  53. // index: Der Index des Buffers
  54. // len: Die Länge der Daten in Bytes (-1 für die maximale größe des Buffers)
  55. bool füllConstBuffer( char* data, int index, int len = -1 );
  56. // Gibt die Länge eines constanten Buffers zurück
  57. // index: Der Index des Buffers
  58. int getConstBufferLänge( int index ) const;
  59. // Gibt den Shadertyp zurück
  60. ShaderType getType() const;
  61. // Erhöht den Reference Counter um 1
  62. // Return: Ein zeiger auf diesen Shader
  63. Shader* getThis();
  64. // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
  65. // Return: 0
  66. Shader* release();
  67. };
  68. class DX11Shader : public Shader
  69. {
  70. protected:
  71. ID3D11Device *device;
  72. ID3D11DeviceContext *context;
  73. public:
  74. DX11Shader( ID3D11Device *device, ID3D11DeviceContext *context );
  75. virtual ~DX11Shader();
  76. // erstellt ein constanten Buffer, der constante daten an den Shader übergibt
  77. // es können maximal 14 Buffer erstellt werden
  78. // zD3d11Device: Das Device, mit dem der Buffer erstellt werden soll
  79. // size: Die größe des buffers in byte
  80. // index: Die position des Buffers im Buffer Array. Bereits vorhanderner Buffer wird ersetzt. Buffer 1 kann nicht erstellt werden, wenn Buffer 0 noch nicht erstellt wurde usw.
  81. virtual bool erstelleConstBuffer( int size, int index ) override;
  82. };
  83. // Verwaltet einen Pixel Shader
  84. class DX11PixelShader : public DX11Shader
  85. {
  86. private:
  87. ID3D11PixelShader* pixelShader;
  88. public:
  89. // Konstruktor
  90. DX11PixelShader( ID3D11Device *device, ID3D11DeviceContext *context );
  91. // Destruktor
  92. ~DX11PixelShader();
  93. // Setzt den Compilierten Shader
  94. // zD3d11Device: Das Device, mit welchem der Shader erstellt werden soll
  95. // bytes: Die Bytes des compilierten codes
  96. // length: die Länge des bytearrays
  97. // return: true, wenn bytes gültig ist, false sonst
  98. bool setCompiledByteArray(unsigned char *bytes, int length ) override;
  99. // Nach dem Aufruf dieser Funktion wird dieser Shader als Pixel Shader benutzt
  100. // zD3d11Context: Das Context Objekt, mit dem der Shader verwendet werden soll
  101. void benutzeShader() override;
  102. };
  103. // Verwaltet einen Vertex Shader
  104. class DX11VertexShader : public DX11Shader
  105. {
  106. private:
  107. ID3D11VertexShader* vertexShader;
  108. ID3D11InputLayout* inputLayout;
  109. unsigned char* shaderByteBuffer;
  110. int byteBufferSize;
  111. public:
  112. // Konstruktor
  113. DX11VertexShader( ID3D11Device *device, ID3D11DeviceContext *context );
  114. // Destruktor
  115. ~DX11VertexShader();
  116. // Setzt den Compilierten Shader
  117. // zD3d11Device: Das Device, mit welchem der Shader erstellt werden soll
  118. // bytes: Die Bytes des compilierten codes
  119. // length: die Länge des bytearrays
  120. // return: true, wenn bytes gültig ist, false sonst
  121. bool setCompiledByteArray( unsigned char *bytes, int length ) override;
  122. // erstellt ein InputLayout für den Shader
  123. // Darf erst nach compile aufgerufen werden
  124. // zD3d11Device: Das Device, mit dem das Layout erstellt werden soll
  125. // descArray: Ein Array mit initialisierungsdaten
  126. // anz: Die Anzahl der Elemente im Array
  127. bool erstelleInputLayout( D3D11_INPUT_ELEMENT_DESC* descArray, int anz );
  128. // Nach dem Aufruf dieser Funktion wird dieser Shader als Vertex Shader benutzt
  129. // zD3d11Context: Das Context Objekt, mit dem der Shader verwendet werden soll
  130. void benutzeShader() override;
  131. };
  132. }