Render3D.h 4.9 KB

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