RenderThread.h 3.5 KB

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