@@ -251,7 +251,7 @@ namespace robot_dart {
251
251
#endif
252
252
}
253
253
254
- void Camera::draw (Magnum::SceneGraph::DrawableGroup3D& drawables, Magnum::GL::AbstractFramebuffer& framebuffer, Magnum::PixelFormat format, RobotDARTSimu* simu, Magnum::Shaders::VertexColor3D& axes_shader, Magnum::GL::Mesh& axes_mesh, Magnum::Shaders::DistanceFieldVector2D* text_shader, Magnum::Text::Renderer2D* text_renderer , bool draw_debug)
254
+ void Camera::draw (Magnum::SceneGraph::DrawableGroup3D& drawables, Magnum::GL::AbstractFramebuffer& framebuffer, Magnum::PixelFormat format, RobotDARTSimu* simu, const DebugDrawData& debug_data , bool draw_debug)
255
255
{
256
256
// TO-DO: Maybe check if world moved?
257
257
std::vector<std::pair<std::reference_wrapper<Magnum::SceneGraph::Drawable3D>, Magnum::Matrix4>>
@@ -287,29 +287,53 @@ namespace robot_dart {
287
287
Magnum::Matrix4 world_transform = Magnum::Matrix4 (Magnum::Matrix4d (axis.first ->getWorldTransform ().matrix ()));
288
288
Magnum::Matrix4 scaling = Magnum::Matrix4::scaling (Magnum::Vector3 (axis.second , axis.second , axis.second ));
289
289
290
- axes_shader. setTransformationProjectionMatrix (_camera->projectionMatrix () * _camera->cameraMatrix () * world_transform * scaling)
291
- .draw (axes_mesh);
290
+ debug_data. axes_shader -> setTransformationProjectionMatrix (_camera->projectionMatrix () * _camera->cameraMatrix () * world_transform * scaling)
291
+ .draw (*debug_data. axes_mesh );
292
292
}
293
293
294
294
/* Draw text */
295
- if (text_shader && text_renderer ) {
295
+ if (debug_data. text_shader && debug_data. text_vertices ) {
296
296
using namespace Magnum ::Math::Literals;
297
297
Magnum::GL::Renderer::disable (Magnum::GL::Renderer::Feature::DepthTest);
298
298
Magnum::GL::Renderer::disable (Magnum::GL::Renderer::Feature::FaceCulling);
299
299
300
+ // bind glyph texture
301
+ debug_data.text_shader ->bindVectorTexture (debug_data.cache ->texture ());
302
+
300
303
for (auto & text : simu->gui_data ()->drawing_texts ()) {
301
- text_renderer->render (text->text );
302
- // std::cout << text_renderer->rectangle().sizeX() << std::endl;
304
+ if (text->text .empty ()) // ignore empty strings
305
+ continue ;
306
+
307
+ Magnum::GL::Mesh mesh;
308
+ Magnum::Range2D rectangle;
309
+ std::tie (mesh, rectangle) = Magnum::Text::Renderer2D::render (*debug_data.font , *debug_data.cache , 28 .f , text->text , *debug_data.text_vertices , *debug_data.text_indices , Magnum::GL::BufferUsage::StaticDraw, Magnum::Text::Alignment (text->alignment ));
310
+
303
311
auto viewport = Magnum::Vector2{_camera->viewport ()};
304
312
auto big = viewport.max ();
305
- auto scaling = Magnum::Vector2{big / 1024 .f };
306
- (*text_shader)
307
- .setTransformationProjectionMatrix (Magnum::Matrix3::projection (viewport) * Magnum::Matrix3 (Magnum::Matrix3d (text->transformation )) * Magnum::Matrix3::scaling (scaling))
313
+ auto text_scaling = Magnum::Matrix3::scaling (Magnum::Vector2{big / 1024 .f });
314
+ auto extra_tr = Magnum::Matrix3 (Magnum::Math::IdentityInit);
315
+ if ((text->alignment & Magnum::Text::Implementation::AlignmentVertical) == Magnum::Text::Implementation::AlignmentLine) // if line (bottom) alignment, push the text a bit above
316
+ extra_tr = Magnum::Matrix3::translation ({0 .f , 0 .25f * rectangle.sizeY ()});
317
+
318
+ auto text_tr = Magnum::Matrix3 (Magnum::Matrix3d (text->transformation ));
319
+
320
+ if (text->draw_background ) {
321
+ auto bg_scaling = Magnum::Matrix3::scaling (Magnum::Vector2{viewport[0 ], rectangle.sizeY ()});
322
+
323
+ // draw the background
324
+ (*debug_data.background_shader )
325
+ .setTransformationProjectionMatrix (Magnum::Matrix3::projection (viewport) * text_tr * text_scaling * bg_scaling)
326
+ .setColor (Magnum::Vector4 (Magnum::Vector4d (text->background_color )))
327
+ .draw (*debug_data.background_mesh );
328
+ }
329
+
330
+ (*debug_data.text_shader )
331
+ .setTransformationProjectionMatrix (Magnum::Matrix3::projection (viewport) * text_tr * extra_tr * text_scaling)
308
332
// .setTransformationProjectionMatrix(Magnum::Matrix3::projection(Magnum::Vector2{_camera->viewport()}) * Magnum::Matrix3::translation(Magnum::Vector2{-text_renderer->rectangle().sizeX() / 2.f, -text_renderer->rectangle().sizeY() / 2.f}) * Magnum::Matrix3(Magnum::Matrix3d(text.transformation)))
309
333
.setColor (Magnum::Vector4 (Magnum::Vector4d (text->color )))
310
- .setOutlineRange (0 .5f , 1 . 0f )
334
+ .setOutlineRange (0 .4f , 0 . 45f )
311
335
.setSmoothness (0 .075f )
312
- .draw (text_renderer-> mesh () );
336
+ .draw (mesh);
313
337
}
314
338
315
339
Magnum::GL::Renderer::enable (Magnum::GL::Renderer::Feature::DepthTest);
0 commit comments