Textur.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #pragma once
  2. #include "Punkt.h"
  3. #include "ReferenceCounter.h"
  4. struct ID3D11Texture2D;
  5. struct ID3D11ShaderResourceView;
  6. struct ID3D11Device;
  7. struct ID3D11DeviceContext;
  8. struct ID3D12Device2;
  9. struct D3D12_RESOURCE_DESC;
  10. struct ID3D12Resource;
  11. struct ID3D12GraphicsCommandList2;
  12. namespace Framework
  13. {
  14. class Bild; //! Bild.h
  15. class Render3D; //! Render3D.h
  16. class TexturList; //! TexturList.h
  17. class DX12CopyCommandQueue;
  18. class DX12DirectCommandQueue;
  19. //! Wandelt ein Bild in eine Textur um, die an die Grafikkarte zum rendern übergeben werden kann
  20. class Textur : public virtual ReferenceCounter
  21. {
  22. protected:
  23. Bild *bild;
  24. Punkt lastGr;
  25. int id;
  26. public:
  27. //! Konstruktor
  28. DLLEXPORT Textur();
  29. //! Destruktor
  30. DLLEXPORT virtual ~Textur();
  31. //! Setzt einen Zeiger auf das Bild, welches die Textur enthält
  32. //! \param b Der Zeiger auf das Bild
  33. DLLEXPORT void setBildZ( Bild *b );
  34. //! Setzt das Bild welches die Textur enthält, indem es kopiert wird
  35. //! \param b Das Bild, was kopiert werden soll
  36. DLLEXPORT void setBild( Bild *b );
  37. //! Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
  38. DLLEXPORT virtual bool updateTextur() = 0;
  39. //! Gibt true zurük, wenn updateTextur aufgerufen werden muss
  40. DLLEXPORT virtual bool brauchtUpdate() const = 0;
  41. //! Gibt einen Zeiger auf das Bild zurück
  42. DLLEXPORT Bild *getBild() const;
  43. //! Gibt einen Zeiger auf das Bild ohne erhöhten Reference Counter zurück
  44. DLLEXPORT Bild *zBild() const;
  45. //! Gibt die Id der Textur zurück, wenn sie in einer TexturList registriert wurde. (siehe Framework::zTexturRegister())
  46. DLLEXPORT int getId() const;
  47. friend TexturList;
  48. };
  49. //! Wandelt ein Bild in eine Textur um, die an die Grafikkarte zum rendern übergeben werden kann
  50. class DX9Textur : public Textur
  51. {
  52. public:
  53. //! Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
  54. DLLEXPORT virtual bool updateTextur() override;
  55. //! Gibt true zurük, wenn updateTextur aufgerufen werden muss
  56. DLLEXPORT virtual bool brauchtUpdate() const override;
  57. };
  58. class DX11Textur : public Textur
  59. {
  60. private:
  61. ID3D11Texture2D *txt;
  62. ID3D11ShaderResourceView *view;
  63. ID3D11Device *device;
  64. ID3D11DeviceContext *context;
  65. public:
  66. DLLEXPORT DX11Textur( ID3D11Device *device, ID3D11DeviceContext *context );
  67. DLLEXPORT ~DX11Textur();
  68. //! Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
  69. DLLEXPORT bool updateTextur() override;
  70. //! Gibt true zurük, wenn updateTextur aufgerufen werden muss
  71. DLLEXPORT bool brauchtUpdate() const override;
  72. //! Gibt die verwendtete Shader Resource View zurück
  73. DLLEXPORT operator ID3D11ShaderResourceView *( ) const;
  74. };
  75. class DX12Textur : public Textur
  76. {
  77. private:
  78. ID3D12Resource *buffer;
  79. ID3D12Resource *intermediate;
  80. ID3D12Device2 *device;
  81. DX12CopyCommandQueue *copy;
  82. DX12DirectCommandQueue *direct;
  83. bool shaderResource;
  84. public:
  85. DLLEXPORT DX12Textur( ID3D12Device2 *device, DX12CopyCommandQueue *copy, DX12DirectCommandQueue *direct );
  86. DLLEXPORT ~DX12Textur();
  87. //! Aktualisiert die Textur. Die Pixel des aktuellen Bildes werden in den Graphikspeicher kopiert
  88. DLLEXPORT bool updateTextur() override;
  89. //! Gibt true zurük, wenn updateTextur aufgerufen werden muss
  90. DLLEXPORT bool brauchtUpdate() const override;
  91. //! Gibt die DX12 Resource zurück
  92. DLLEXPORT ID3D12Resource *getResource();
  93. };
  94. }