31 #define MAX_GL_TEXTURE_IDS 0x10000 32 #define MAX_GL_TEXTURE_IDS_MASK 0x0FFFF 41 unsigned int next_free_texture{1};
42 std::recursive_mutex
cs;
52 CRenderizable::CRenderizable()
55 m_color(255, 255, 255, 255),
71 std::lock_guard<std::recursive_mutex> lock(booker.cs);
73 unsigned int ret = booker.next_free_texture;
74 unsigned int tries = 0;
75 while (ret != 0 && booker.freeTextureNames[ret])
82 "Maximum number of textures (%u) excedeed! (are you deleting " 87 booker.freeTextureNames[ret] =
true;
88 booker.next_free_texture = ret + 1;
96 std::lock_guard<std::recursive_mutex> lock(booker.
cs);
117 const uint8_t serialization_version =
120 const bool all_scales_equal =
122 const bool all_scales_unity = (all_scales_equal &&
m_scale_x == 1.0f);
124 const uint8_t magic_signature[2] = {
130 serialization_version |
131 (all_scales_unity ? 0xC0 : (all_scales_equal ? 0xA0 : 0x80)))};
133 out << magic_signature[0] << magic_signature[1];
147 if (!all_scales_unity)
149 if (all_scales_equal)
167 uint8_t magic_signature[2 + 2];
173 in >> magic_signature[0] >> magic_signature[1];
175 const bool is_new_format =
176 (magic_signature[0] == 0xFF) && ((magic_signature[1] & 0x80) != 0);
181 uint8_t serialization_version = (magic_signature[1] & 0x1F);
182 const bool all_scales_unity = ((magic_signature[1] & 0x40) != 0);
183 const bool all_scales_equal_but_not_unity =
184 ((magic_signature[1] & 0x20) != 0);
186 switch (serialization_version)
207 if (all_scales_unity)
211 if (all_scales_equal_but_not_unity)
225 "Can't parse CRenderizable standard data field: corrupt " 226 "data stream or format in a newer MRPT format? " 227 "(serialization version=%u)",
228 static_cast<unsigned int>(serialization_version));
236 in >> magic_signature[2] >> magic_signature[3];
239 magic_signature_uint32;
246 float yaw_deg, pitch_deg, roll_deg;
249 in >> col.
R >> col.
G >> col.
B >> col.
A;
251 col.
R / 255, col.
G / 255, col.
B / 255,
268 if (f != 16.0f && f != 17.0f)
void renderTextBitmap(const char *str, void *fontStyle)
This method is safe for calling from within ::render() methods.
#define IMPLEMENTS_VIRTUAL_SERIALIZABLE(class_name, base_class, NS)
This must be inserted as implementation of some required members for virtual CSerializable classes: ...
mrpt::math::TPose3D asTPose() const
static TOpenGLNameBooker & instance()
std::vector< bool > freeTextureNames
unsigned int next_free_texture
unsigned __int16 uint16_t
mrpt::serialization::CArchive & operator<<(mrpt::serialization::CArchive &out, const mrpt::opengl::CLight &o)
#define MAX_GL_TEXTURE_IDS
~CRenderizable() override
double DEG2RAD(const double x)
Degrees to radians.
virtual bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const
Simulation of ray-trace, given a pose.
void setYawPitchRoll(const double yaw_, const double pitch_, const double roll_)
Set the 3 angles of the 3D pose (in radians) - This method recomputes the internal rotation coordinat...
#define MAX_GL_TEXTURE_IDS_MASK
The base class of 3D objects that can be directly rendered through OpenGL.
double pitch() const
Get the PITCH angle (in radians)
double yaw() const
Get the YAW angle (in radians)
void WriteBuffer(const void *Buffer, size_t Count)
Writes a block of bytes to the stream from Buffer.
mrpt::poses::CPose3D m_pose
6D pose wrt the parent coordinate reference.
float m_scale_x
Scale components to apply to the object (default=1)
virtual CRenderizable & setColor_u8(const mrpt::img::TColor &c)
TOpenGLFont
Existing fonts for 2D texts in mrpt::opengl methods.
void writeToStreamRender(mrpt::serialization::CArchive &out) const
double x() const
Common members of all points & poses classes.
GLsizei const GLchar ** string
A class used to store a 2D point.
A class used to store a 3D point.
double roll() const
Get the ROLL angle (in radians)
mrpt::img::TColor m_color
Color components in the range [0,255].
static void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
Virtual base class for "archives": classes abstracting I/O streams.
GLdouble GLdouble GLdouble r
static unsigned int getNewTextureNumber()
Returns the lowest next free texture name (avoid using OpenGL's own function since we may call them f...
static int textBitmapWidth(const std::string &str, mrpt::opengl::TOpenGLFont font=mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24)
Return the exact width in pixels for a given string, as will be rendered by renderTextBitmap().
A class used to store a 2D pose, including the 2D coordinate point and a heading (phi) angle...
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
int textBitmapWidth(const std::string &str, mrpt::opengl::TOpenGLFont font=mrpt::opengl::MRPT_GLUT_BITMAP_TIMES_ROMAN_24)
Return the exact width in pixels for a given string, as will be rendered by renderTextBitmap().
void checkOpenGLError()
Checks glGetError and throws an exception if an error situation is found.
A RGB color - floats in the range [0,1].
void setFromValues(const double x0, const double y0, const double z0, const double yaw=0, const double pitch=0, const double roll=0)
Set the pose from a 3D position (meters) and yaw/pitch/roll angles (radians) - This method recomputes...
Lightweight 3D pose (three spatial coordinates, plus three angular coordinates).
The namespace for 3D scene representation and rendering.
CRenderizable & setPose(const mrpt::poses::CPose3D &o)
Set the 3D pose from a mrpt::poses::CPose3D object (return a ref to this)
void readFromStreamRender(mrpt::serialization::CArchive &in)
static void renderTextBitmap(const char *str, void *fontStyle)
This method is safe for calling from within ::render() methods.
bool m_visible
Is the object visible? (default=true)
#define THROW_EXCEPTION_FMT(_FORMAT_STRING,...)
unsigned __int32 uint32_t
mrpt::math::TPose3D getPose() const
Returns the 3D pose of the object as TPose3D.
static void releaseTextureName(unsigned int i)