RenderThread.h 3.8 KB

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