RenderThread.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef RenderThread_H
  2. #define RenderThread_H
  3. #include "Thread.h"
  4. #include "Critical.h"
  5. #include <functional>
  6. namespace Framework
  7. {
  8. class Bildschirm; // Bildschirm.h
  9. class ZeitMesser; // ZeitMesser.h
  10. class Bild; // Bild.h
  11. // Ein Thread, der ein Bildschirm verwaltet. Er ruft die render() und tick() funktionen automatisch auf
  12. class RenderTh : private Thread
  13. {
  14. private:
  15. bool stoppen;
  16. Bildschirm *bildschirm;
  17. ZeitMesser *zeit;
  18. double renderTickZeit;
  19. void *renderParameter;
  20. void *tickParameter;
  21. std::function< void( void*, void*, Bild* ) > renderFunktion;
  22. std::function< void( void*, void*, double ) > tickFunktion;
  23. bool pause;
  24. Critical cs;
  25. int maxFps;
  26. int ref;
  27. public:
  28. // Konstruktor
  29. __declspec( dllexport ) RenderTh();
  30. // Destruktor
  31. __declspec( dllexport ) ~RenderTh();
  32. // Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
  33. // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  34. __declspec( dllexport ) void lock();
  35. // Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
  36. // Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  37. __declspec( dllexport ) void unlock();
  38. // Setzt das Bildschirm Objekt, das verwaltet werden soll
  39. // bildschirm: Der Bildschirm
  40. __declspec( dllexport ) void setBildschirm( Bildschirm *bildschirm );
  41. // Die Funktion, die automatisch in einem neuen Thread ausgeführt wird
  42. __declspec( dllexport ) void thread() override;
  43. // Beginnt den Render Thread
  44. __declspec( dllexport ) void beginn();
  45. // Beendet den Render Thread
  46. __declspec( dllexport ) void beenden();
  47. // Setzt die maximalen Bilder pro Sekunde
  48. // fps: maximale Bilder pro Sekunde
  49. __declspec( dllexport ) void setMaxFps( int fps );
  50. // Pausiert den Render Thread
  51. // p: 1, wenn der Thread pausiert werden soll
  52. __declspec( dllexport ) void setPause( bool p );
  53. // Setzt die Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
  54. // rF: Die Rückruffunktion
  55. __declspec( dllexport ) void setRenderFunktion( std::function< void( void*, void*, Bild* ) > rF );
  56. // Setzt die Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
  57. // tF: Die Rückruffunktion
  58. __declspec( dllexport ) void setTickFunktion( std::function< void( void*, void*, double ) > tF );
  59. // Setzt den Parameter der Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
  60. // p: Der Parameter
  61. __declspec( dllexport ) void setRenderFunktionParameter( void *p );
  62. // Setzt den Parameter der Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
  63. __declspec( dllexport ) void setTickFunktionParameter( void *p );
  64. // Gibt den Bildschirm zurück, der von dem Thread verwaltet wird
  65. __declspec( dllexport ) Bildschirm *getBildschirm() const;
  66. // Gibt den Bildschirm ohne erhöhten Reference Counter zurück, der von dem Thread verwaltet wird
  67. __declspec( dllexport ) Bildschirm *zBildschirm() const;
  68. // Gibt die Zeit zurück, mit der die tick() Funktion des Bildschirms als letztes aufgerufen wurde
  69. __declspec( dllexport ) double getRenderTickZeit() const;
  70. // Erhöht den Reference Counter um 1
  71. // Return: Ein zeiger auf diesen Shader
  72. __declspec( dllexport ) RenderTh *getThis();
  73. // Verringert den Reference Counter und löscht den Shader, falls der Refeence Counter auf 0 ist
  74. // Return: 0
  75. __declspec( dllexport ) RenderTh *release();
  76. };
  77. }
  78. #endif