DX12Shader.h 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #pragma once
  2. #include "DX12Buffer.h"
  3. #include "Shader.h"
  4. struct ID3D12Device;
  5. struct ID3D12GraphicsCommandList;
  6. struct D3D12_INPUT_ELEMENT_DESC;
  7. struct D3D12_ROOT_PARAMETER1;
  8. struct D3D12_CONSTANT_BUFFER_VIEW_DESC;
  9. namespace Framework
  10. {
  11. class DX12Shader : public Shader
  12. {
  13. protected:
  14. ID3D12Device* device;
  15. DX12CopyCommandQueue* copy;
  16. DX12DirectCommandQueue* direct;
  17. unsigned char* shaderByteBuffer;
  18. int byteBufferSize;
  19. public:
  20. DX12Shader(ID3D12Device* device,
  21. DX12CopyCommandQueue* copy,
  22. DX12DirectCommandQueue* direct);
  23. virtual ~DX12Shader();
  24. //! erstellt ein constanten Buffer, der constante daten an den Shader
  25. //! übergibt es können maximal 14 Buffer erstellt werden
  26. //! zD3d11Device: Das Device, mit dem der Buffer erstellt werden soll
  27. //! \param size Die größe des buffers in byte
  28. //! \param index Die position des Buffers im Buffer Array. Bereits
  29. //! vorhanderner Buffer wird ersetzt. Buffer 1 kann nicht erstellt
  30. //! werden, wenn Buffer 0 noch nicht erstellt wurde usw.
  31. virtual bool erstelleConstBuffer(int size, int index) override;
  32. //! Setzt den Compilierten Shader
  33. //! zD3d11Device: Das Device, mit welchem der Shader erstellt werden
  34. //! soll
  35. //! \param bytes Die Bytes des compilierten codes
  36. //! \param length die Länge des bytearrays
  37. //! \return true, wenn bytes gültig ist, false sonst
  38. bool setCompiledByteArray(unsigned char* bytes, int length) override;
  39. //! Nach dem Aufruf dieser Funktion wird dieser Shader als Pixel Shader
  40. //! benutzt
  41. //! zD3d11Context: Das Context Objekt, mit dem der Shader verwendet
  42. //! werden soll
  43. void benutzeShader() override;
  44. //! gibt die compilierten bytes zurück
  45. unsigned char* getCompiledShader() const;
  46. //! gitbt die anzahl der compilierten bytes zurück
  47. int getCompiledLength() const;
  48. //! Erstellt den RootParameter zu einem constanten buffer
  49. //! \param index Der Index des Buffers
  50. //! \param view enthält nach dem Aufruf die position und größe des
  51. //! buffers im speicher
  52. virtual void getViewDesc(
  53. int index, D3D12_CONSTANT_BUFFER_VIEW_DESC& view);
  54. };
  55. class DX12PixelShader : public DX12Shader
  56. {
  57. public:
  58. DX12PixelShader(ID3D12Device* device,
  59. DX12CopyCommandQueue* copy,
  60. DX12DirectCommandQueue* direct);
  61. };
  62. class DX12VertexShader : public DX12Shader
  63. {
  64. private:
  65. D3D12_INPUT_ELEMENT_DESC* inputLayout;
  66. int inputLayoutSize;
  67. public:
  68. //! Konstruktor
  69. DX12VertexShader(ID3D12Device* device,
  70. DX12CopyCommandQueue* copy,
  71. DX12DirectCommandQueue* direct);
  72. //! Destruktor
  73. ~DX12VertexShader();
  74. //! erstellt ein InputLayout für den Shader
  75. //! Darf erst nach compile aufgerufen werden
  76. //! zD3d11Device: Das Device, mit dem das Layout erstellt werden soll
  77. //! \param descArray Ein Array mit initialisierungsdaten
  78. //! \param anz Die Anzahl der Elemente im Array
  79. bool erstelleInputLayout(D3D12_INPUT_ELEMENT_DESC* descArray, int anz);
  80. //! Gint die Anzahl an eingabeparametern des Shaders zurück
  81. int getInputLayoutSize() const;
  82. //! Gibt eine Liste mit formaten für jeden Eingabewert zurück
  83. D3D12_INPUT_ELEMENT_DESC* zInputLayout() const;
  84. };
  85. } // namespace Framework