Open Source Tomb Raider Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*!
  2. * \file include/GLString.h
  3. * \brief Open GL rendering font/string class
  4. *
  5. * \author Mongoose
  6. * \author xythobuz
  7. */
  8. #ifndef _GLSTRING_H_
  9. #define _GLSTRING_H_
  10. /*!
  11. * \brief Internal data structure representing GL Strings
  12. */
  13. typedef struct gl_string_s {
  14. int x; //!< X Coordinate
  15. int y; //!< Y Coordinate
  16. float scale; //!< Scale factor
  17. char *text; //!< Text buffer
  18. bool active; //!< active state
  19. unsigned short int len; //!< length
  20. } gl_string_t;
  21. /*!
  22. * \brief Open GL rendering font/string class
  23. */
  24. class GLString {
  25. public:
  26. /*!
  27. * \brief Constructs an object of GLString
  28. */
  29. GLString();
  30. /*!
  31. * \brief Deconstructs an object of GLString
  32. */
  33. ~GLString();
  34. /*!
  35. * \brief Set max number of strings
  36. * \param max_strings maximum number of strings
  37. */
  38. void Init(unsigned int max_strings);
  39. /*!
  40. * \brief Sets a single byte in a string
  41. * \param string valid gl string id
  42. * \param pos position in that gl string to set
  43. * \param c character to set in gl string
  44. */
  45. void SetChar(unsigned int string, unsigned int pos, char c);
  46. /*!
  47. * \brief Gets number of bytes in a string buffer
  48. * \param string valid gl string id
  49. * \returns length/number of bytes of string
  50. */
  51. unsigned int GetStringLen(unsigned int string);
  52. /*!
  53. * \brief Returns string buffer
  54. * \param string valid gl string id
  55. * \returns pointer to string buffer
  56. */
  57. char *GetBuffer(unsigned int string);
  58. void setActive(unsigned int string, bool active);
  59. /*!
  60. * \brief Sets text in a string.
  61. * It will be truncated as needed to fit
  62. * \param string valid string id
  63. * \param s format string and args like for printf
  64. */
  65. void SetString(unsigned int string, const char *s, ...) __attribute__((format(printf, 3, 4)));
  66. /*!
  67. * \brief Sets default text scaling
  68. * \param scale new scale factor > 0.0
  69. */
  70. void Scale(float scale);
  71. /*!
  72. * \brief Generates a new string and renders it to the gl target
  73. * \param x valid X screen coordinate
  74. * \param y valid Y screen coordinate
  75. * \param string valid format string with args like for printf
  76. * \returns 0 on success, -1 on invalid string, -2 on full string list
  77. */
  78. int glPrintf(int x, int y, const char *string, ...) __attribute__((format(printf, 4, 5)));
  79. /*!
  80. * \brief Renders strings over GL scene.
  81. * Should be called after scene is rendered.
  82. * GL Culling should be disabled.
  83. */
  84. void Render();
  85. /*!
  86. * \brief Get the String data structure for a string id
  87. * \param id valid string id
  88. * \returns string for id, or NULL if it does not exist
  89. */
  90. gl_string_t *GetString(unsigned int id);
  91. private:
  92. unsigned int _num_string_max; //!< Max number of strings buffered
  93. unsigned int _num_string; //!< Current number of strings buffered
  94. gl_string_t *_string; //!< Buffered strings and their properities
  95. float _scale; //!< Default scale factor for new strings
  96. };
  97. #endif