diff --git a/applications/Mapple/paint_canvas.cpp b/applications/Mapple/paint_canvas.cpp index c7e59a2d..e01fc06e 100644 --- a/applications/Mapple/paint_canvas.cpp +++ b/applications/Mapple/paint_canvas.cpp @@ -1878,17 +1878,24 @@ void PaintCanvas::showCoordinatesUnderMouse(bool b) { void PaintCanvas::draw() { - // To have split views of different rendering styles for the same object/scene. - //glEnable(GL_SCISSOR_TEST); - //int scissor[4]; - //glGetIntegerv(GL_SCISSOR_BOX, scissor); - //glScissor(scissor[0], scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(false); - //Viewer::draw(); - //glScissor(scissor[2] * 0.5f, scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(true); - //Viewer::draw(); - //glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); +#if 0 + // Example code: split the view to have different rendering styles for the same object/scene. + glEnable(GL_SCISSOR_TEST); + int viewport[4]; + glGetIntegerv(GL_VIEWPORT, viewport); + glScissor(viewport[0], viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->triangles_drawables()) + d->draw(camera()); + } + glScissor(viewport[2] * 0.5f, viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->lines_drawables()) + d->draw(camera()); + } + glScissor(viewport[0], viewport[1], viewport[2], viewport[3]); + +#else if (models_.empty()) return; @@ -1965,4 +1972,5 @@ void PaintCanvas::draw() { if (edl()) edl()->end(); +#endif } diff --git a/easy3d/viewer/viewer.cpp b/easy3d/viewer/viewer.cpp index c745390c..dc673064 100644 --- a/easy3d/viewer/viewer.cpp +++ b/easy3d/viewer/viewer.cpp @@ -1729,17 +1729,24 @@ namespace easy3d { void Viewer::draw() const { - // To have split views of different rendering styles for the same object/scene. - //glEnable(GL_SCISSOR_TEST); - //int scissor[4]; - //glGetIntegerv(GL_SCISSOR_BOX, scissor); - //glScissor(scissor[0], scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(false); - //Viewer::draw(); - //glScissor(scissor[2] * 0.5f, scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(true); - //Viewer::draw(); - //glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); +#if 0 + // Example code: split the view to have different rendering styles for the same object/scene. + glEnable(GL_SCISSOR_TEST); + int viewport[4]; + glGetIntegerv(GL_VIEWPORT, viewport); + glScissor(viewport[0], viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->triangles_drawables()) + d->draw(camera()); + } + glScissor(viewport[2] * 0.5f, viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->lines_drawables()) + d->draw(camera()); + } + glScissor(viewport[0], viewport[1], viewport[2], viewport[3]); + +#else for (const auto m : models_) { if (!m->renderer()->is_visible()) @@ -1786,6 +1793,7 @@ namespace easy3d { draw_face_labels(current_model(), texter_, 1, vec3(0, 0, 1)); draw_vertex_labels(current_model(), texter_, 1, vec3(0, 1, 0)); } +#endif #endif } diff --git a/tutorials/Tutorial_203_Viewer_wxWidgets/viewer.cpp b/tutorials/Tutorial_203_Viewer_wxWidgets/viewer.cpp index 01986d8c..7fbb68b8 100644 --- a/tutorials/Tutorial_203_Viewer_wxWidgets/viewer.cpp +++ b/tutorials/Tutorial_203_Viewer_wxWidgets/viewer.cpp @@ -789,17 +789,24 @@ namespace easy3d { void Viewer::draw() const { - // To have split views of different rendering styles for the same object/scene. - //glEnable(GL_SCISSOR_TEST); - //int scissor[4]; - //glGetIntegerv(GL_SCISSOR_BOX, scissor); - //glScissor(scissor[0], scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(false); - //Viewer::draw(); - //glScissor(scissor[2] * 0.5f, scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(true); - //Viewer::draw(); - //glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); +#if 0 + // Example code: split the view to have different rendering styles for the same object/scene. + glEnable(GL_SCISSOR_TEST); + int viewport[4]; + glGetIntegerv(GL_VIEWPORT, viewport); + glScissor(viewport[0], viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->triangles_drawables()) + d->draw(camera()); + } + glScissor(viewport[2] * 0.5f, viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->lines_drawables()) + d->draw(camera()); + } + glScissor(viewport[0], viewport[1], viewport[2], viewport[3]); + +#else for (const auto m : models_) { if (!m->renderer()->is_visible()) @@ -837,5 +844,6 @@ namespace easy3d { if (d->is_visible()) d->draw(camera()); } +#endif } } \ No newline at end of file diff --git a/tutorials/Tutorial_204_Viewer_Qt/viewer.cpp b/tutorials/Tutorial_204_Viewer_Qt/viewer.cpp index c8305241..0b95daf1 100644 --- a/tutorials/Tutorial_204_Viewer_Qt/viewer.cpp +++ b/tutorials/Tutorial_204_Viewer_Qt/viewer.cpp @@ -984,17 +984,24 @@ namespace easy3d { void Viewer::draw() { - // To have split views of different rendering styles for the same object/scene. - //glEnable(GL_SCISSOR_TEST); - //int scissor[4]; - //glGetIntegerv(GL_SCISSOR_BOX, scissor); - //glScissor(scissor[0], scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(false); - //Viewer::draw(); - //glScissor(scissor[2] * 0.5f, scissor[1], scissor[2] * 0.5f, scissor[3]); - //current_model()->renderer()->get_lines_drawable("edges")->set_visible(true); - //Viewer::draw(); - //glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); +#if 0 + // Example code: split the view to have different rendering styles for the same object/scene. + glEnable(GL_SCISSOR_TEST); + int viewport[4]; + glGetIntegerv(GL_VIEWPORT, viewport); + glScissor(viewport[0], viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->triangles_drawables()) + d->draw(camera()); + } + glScissor(viewport[2] * 0.5f, viewport[1], viewport[2] * 0.5f, viewport[3]); + for (const auto m : models_) { + for (auto d : m->renderer()->lines_drawables()) + d->draw(camera()); + } + glScissor(viewport[0], viewport[1], viewport[2], viewport[3]); + +#else easy3d_debug_log_gl_error @@ -1030,6 +1037,7 @@ namespace easy3d { if (d->is_visible()) d->draw(camera()); } +#endif } } \ No newline at end of file