Render3D.h 4.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #pragma once
  2. #include "Array.h"
  3. #include "Mat4.h"
  4. #include "Vec4.h"
  5. struct ID3D11Device;
  6. struct ID3D11DeviceContext;
  7. enum D3D_PRIMITIVE_TOPOLOGY;
  8. struct ID3D11ShaderResourceView;
  9. struct ID3D11RasterizerState;
  10. namespace Framework
  11. {
  12. class Shader; // Shader.h
  13. class DXVertexBuffer; // DXBuffer.h
  14. class DXIndexBuffer; // DXBuffer.h
  15. class Textur; // Textur.h
  16. class Model3D; // Model3D.h
  17. class Render3D
  18. {
  19. private:
  20. Mat4< float > matrixBuffer[ 128 ];
  21. Mat4< float > view;
  22. Mat4< float > proj;
  23. Vec4< float > frustrum[ 6 ];
  24. Vec3< float > kamPos;
  25. ID3D11Device *device;
  26. ID3D11DeviceContext *context;
  27. ID3D11RasterizerState *texturRS;
  28. ID3D11RasterizerState *meshRS;
  29. Textur *defaultTextur;
  30. RCArray< RCArray< Shader > > *shader;
  31. Array< int > *shaderId;
  32. int lastObjektId;
  33. int lastTexturId;
  34. int ref;
  35. public:
  36. // Konstruktor
  37. __declspec( dllexport ) Render3D();
  38. // Destruktor
  39. __declspec( dllexport ) ~Render3D();
  40. // Setzt das Device, was zum zeichnen verwendet werden soll
  41. // device: Das neue Device
  42. __declspec( dllexport ) void setDevice( ID3D11Device *device );
  43. // Setzt das Context Objekt, das zum Zeichnen verwendet werden soll
  44. // context: das neue Conext Objekt
  45. __declspec( dllexport ) void setContext( ID3D11DeviceContext *context );
  46. // Setzt den aktuellen Shader. Er wird hinten an die Liste mit zuletzt verwendeten Shadern angefügt
  47. // listIndex: Der Index der Liste mit zuletzt verwendeten Shadern
  48. // sh: Der Shader, der verwendet werden soll
  49. __declspec( dllexport ) void benutzeShader( int listIndex, Shader *sh );
  50. // Sprinkt in der Liste mit zuletzt benutzten Shadern zurück und benutzt wieder den dortiegen Shader
  51. // listIndex: Der Index der Liste mit zuletzt verwe deten Shadern
  52. // anz: Die Anzahl der Shader, die zurückgesprungen werden soll. Bei 0 passiert nichts
  53. __declspec( dllexport ) void releaseShader( int listIndex, int anz = 1 );
  54. // Setzt die View und Projektion Matrizen, die zum zeichnen verwendet werden sollen
  55. // view: Die View Matrix der Kamera
  56. // proj: Die Projektion Matrix der Kamera
  57. // kamPos: Die Position der Kamera in der Welt
  58. __declspec( dllexport ) void setKameraMatrix( Mat4< float > &view, Mat4< float > &proj, Vec3< float > &kamPos );
  59. // Beginnt das Zeichnen eines bestimmten objektes
  60. // zMdl: Das 3D Modelohne erhöhten Reference Counter
  61. __declspec( dllexport ) void beginnModel( Model3D *zMdl );
  62. // Zeichnet eine bestimmte struktur
  63. // zIndexBuffer: Ein IndexBuffer, der auf verschiedene Vertices aus dem Vertex Buffer des Models zeigt. Ohne erhöhten Reference Counter
  64. // textur: Ein Zeiger auf die Textur, die verwendet werden soll ohne erhöhten Reference Counter
  65. // struktur: Die Struktur der angegebenen Indices, Beispiel: D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST oder D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP ...
  66. __declspec( dllexport ) void draw( DXIndexBuffer *zIndexBuffer, Textur *zTextur, D3D_PRIMITIVE_TOPOLOGY struktur = (D3D_PRIMITIVE_TOPOLOGY)4 );
  67. // Gibt einen der aktuell verwendeten Shader zurück
  68. // listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
  69. __declspec( dllexport ) Shader *getShader( int listIndex ) const;
  70. // Gibt einen der aktuell verwendeten Shader ohne erhöhten Reference Counter zurück
  71. // listIndex: Der Index der Lise mit Shadern, von denen der aktuell benutzte zurückgegeben werden soll
  72. __declspec( dllexport ) Shader *zShader( int listIndex ) const;
  73. // Gibt das momentan verwendete Device Objekt ohne erhöhten Reference Counter zurück
  74. __declspec( dllexport ) ID3D11Device *zDevice() const;
  75. // Gibt das momentan verwendete Context Objekt ohne erhöhten Reference Counter zurück
  76. __declspec( dllexport ) ID3D11DeviceContext *zContext() const;
  77. // Überprüft, ob eine Kugel in dem Sichtbaren Raum der Welt liegt und gezeichnet werden muss
  78. // pos: Der Mittelpunkt der Kugel
  79. // radius: Der Radius der Kugel
  80. // dist: Einen Zeiger auf einen float, in dem das quadrat des Abstands zur Kammeraposition gespeichert wird, falls diese Funktion true zurückgiebt und der Zeiger nicht 0 ist
  81. __declspec( dllexport ) bool isInFrustrum( const Vec3< float > &pos, float radius, float *dist = 0 ) const;
  82. // Erhöht den Reference Counting Zähler.
  83. // return: this.
  84. __declspec( dllexport ) Render3D *getThis();
  85. // Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Zeichnung automatisch gelöscht.
  86. // return: 0.
  87. __declspec( dllexport ) Render3D *release();
  88. };
  89. }