Background rendering moved to c++
This commit is contained in:
parent
bf7b9eb3e7
commit
0f035d0bae
@ -46,7 +46,6 @@ __PACKAGE__->mk_accessors( qw(_quat init
|
|||||||
on_move
|
on_move
|
||||||
on_model_update
|
on_model_update
|
||||||
volumes
|
volumes
|
||||||
background
|
|
||||||
_mouse_pos
|
_mouse_pos
|
||||||
_hover_volume_idx
|
_hover_volume_idx
|
||||||
|
|
||||||
@ -183,7 +182,9 @@ sub new {
|
|||||||
#==============================================================================================================================
|
#==============================================================================================================================
|
||||||
|
|
||||||
$self->{can_multisample} = $can_multisample;
|
$self->{can_multisample} = $can_multisample;
|
||||||
$self->background(1);
|
#==============================================================================================================================
|
||||||
|
# $self->background(1);
|
||||||
|
#==============================================================================================================================
|
||||||
$self->_quat((0, 0, 0, 1));
|
$self->_quat((0, 0, 0, 1));
|
||||||
#==============================================================================================================================
|
#==============================================================================================================================
|
||||||
# $self->_stheta(45);
|
# $self->_stheta(45);
|
||||||
@ -1491,38 +1492,40 @@ sub Render {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# draw fixed background
|
|
||||||
if ($self->background) {
|
|
||||||
glDisable(GL_LIGHTING);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glPushMatrix();
|
|
||||||
glLoadIdentity();
|
|
||||||
|
|
||||||
# Draws a bluish bottom to top gradient over the complete screen.
|
|
||||||
glDisable(GL_DEPTH_TEST);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glColor3f(0.0,0.0,0.0);
|
|
||||||
glVertex3f(-1.0,-1.0, 1.0);
|
|
||||||
glVertex3f( 1.0,-1.0, 1.0);
|
|
||||||
glColor3f(10/255,98/255,144/255);
|
|
||||||
glVertex3f( 1.0, 1.0, 1.0);
|
|
||||||
glVertex3f(-1.0, 1.0, 1.0);
|
|
||||||
glEnd();
|
|
||||||
glPopMatrix();
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glPopMatrix();
|
|
||||||
glEnable(GL_LIGHTING);
|
|
||||||
}
|
|
||||||
|
|
||||||
# draw ground and axes
|
|
||||||
glDisable(GL_LIGHTING);
|
|
||||||
|
|
||||||
#==============================================================================================================================
|
#==============================================================================================================================
|
||||||
|
Slic3r::GUI::_3DScene::render_background($self);
|
||||||
|
|
||||||
|
# # draw fixed background
|
||||||
|
# if ($self->background) {
|
||||||
|
# glDisable(GL_LIGHTING);
|
||||||
|
# glPushMatrix();
|
||||||
|
# glLoadIdentity();
|
||||||
|
#
|
||||||
|
# glMatrixMode(GL_PROJECTION);
|
||||||
|
# glPushMatrix();
|
||||||
|
# glLoadIdentity();
|
||||||
|
#
|
||||||
|
# # Draws a bluish bottom to top gradient over the complete screen.
|
||||||
|
# glDisable(GL_DEPTH_TEST);
|
||||||
|
# glBegin(GL_QUADS);
|
||||||
|
# glColor3f(0.0,0.0,0.0);
|
||||||
|
# glVertex3f(-1.0,-1.0, 1.0);
|
||||||
|
# glVertex3f( 1.0,-1.0, 1.0);
|
||||||
|
# glColor3f(10/255,98/255,144/255);
|
||||||
|
# glVertex3f( 1.0, 1.0, 1.0);
|
||||||
|
# glVertex3f(-1.0, 1.0, 1.0);
|
||||||
|
# glEnd();
|
||||||
|
# glPopMatrix();
|
||||||
|
# glEnable(GL_DEPTH_TEST);
|
||||||
|
#
|
||||||
|
# glMatrixMode(GL_MODELVIEW);
|
||||||
|
# glPopMatrix();
|
||||||
|
# glEnable(GL_LIGHTING);
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# # draw ground and axes
|
||||||
|
# glDisable(GL_LIGHTING);
|
||||||
|
#
|
||||||
# # draw ground
|
# # draw ground
|
||||||
# my $ground_z = GROUND_Z;
|
# my $ground_z = GROUND_Z;
|
||||||
#==============================================================================================================================
|
#==============================================================================================================================
|
||||||
|
@ -1923,6 +1923,11 @@ void _3DScene::select_view(wxGLCanvas* canvas, const std::string& direction)
|
|||||||
s_canvas_mgr.select_view(canvas, direction);
|
s_canvas_mgr.select_view(canvas, direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _3DScene::render_background(wxGLCanvas* canvas)
|
||||||
|
{
|
||||||
|
s_canvas_mgr.render_background(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
void _3DScene::render_bed(wxGLCanvas* canvas)
|
void _3DScene::render_bed(wxGLCanvas* canvas)
|
||||||
{
|
{
|
||||||
s_canvas_mgr.render_bed(canvas);
|
s_canvas_mgr.render_bed(canvas);
|
||||||
|
@ -597,6 +597,7 @@ public:
|
|||||||
static void zoom_to_volumes(wxGLCanvas* canvas);
|
static void zoom_to_volumes(wxGLCanvas* canvas);
|
||||||
static void select_view(wxGLCanvas* canvas, const std::string& direction);
|
static void select_view(wxGLCanvas* canvas, const std::string& direction);
|
||||||
|
|
||||||
|
static void render_background(wxGLCanvas* canvas);
|
||||||
static void render_bed(wxGLCanvas* canvas);
|
static void render_bed(wxGLCanvas* canvas);
|
||||||
static void render_axes(wxGLCanvas* canvas);
|
static void render_axes(wxGLCanvas* canvas);
|
||||||
static void render_cutting_plane(wxGLCanvas* canvas);
|
static void render_cutting_plane(wxGLCanvas* canvas);
|
||||||
|
@ -208,6 +208,7 @@ void GLCanvas3D::Bed::render()
|
|||||||
unsigned int triangles_vcount = m_triangles.get_data_size() / 3;
|
unsigned int triangles_vcount = m_triangles.get_data_size() / 3;
|
||||||
if (triangles_vcount > 0)
|
if (triangles_vcount > 0)
|
||||||
{
|
{
|
||||||
|
::glDisable(GL_LIGHTING);
|
||||||
::glDisable(GL_DEPTH_TEST);
|
::glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
::glEnable(GL_BLEND);
|
::glEnable(GL_BLEND);
|
||||||
@ -312,6 +313,7 @@ void GLCanvas3D::Axes::set_length(float length)
|
|||||||
|
|
||||||
void GLCanvas3D::Axes::render()
|
void GLCanvas3D::Axes::render()
|
||||||
{
|
{
|
||||||
|
::glDisable(GL_LIGHTING);
|
||||||
// disable depth testing so that axes are not covered by ground
|
// disable depth testing so that axes are not covered by ground
|
||||||
::glDisable(GL_DEPTH_TEST);
|
::glDisable(GL_DEPTH_TEST);
|
||||||
::glLineWidth(2.0f);
|
::glLineWidth(2.0f);
|
||||||
@ -350,12 +352,18 @@ bool GLCanvas3D::CuttingPlane::set(float z, const ExPolygons& polygons)
|
|||||||
return m_lines.set_from_lines(lines, m_z);
|
return m_lines.set_from_lines(lines, m_z);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::CuttingPlane::render_plane(const BoundingBoxf3& bb)
|
void GLCanvas3D::CuttingPlane::render(const BoundingBoxf3& bb)
|
||||||
|
{
|
||||||
|
::glDisable(GL_LIGHTING);
|
||||||
|
_render_plane(bb);
|
||||||
|
_render_contour();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLCanvas3D::CuttingPlane::_render_plane(const BoundingBoxf3& bb)
|
||||||
{
|
{
|
||||||
if (m_z >= 0.0f)
|
if (m_z >= 0.0f)
|
||||||
{
|
{
|
||||||
::glDisable(GL_CULL_FACE);
|
::glDisable(GL_CULL_FACE);
|
||||||
::glDisable(GL_LIGHTING);
|
|
||||||
::glEnable(GL_BLEND);
|
::glEnable(GL_BLEND);
|
||||||
::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
@ -378,7 +386,7 @@ void GLCanvas3D::CuttingPlane::render_plane(const BoundingBoxf3& bb)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::CuttingPlane::render_contour()
|
void GLCanvas3D::CuttingPlane::_render_contour()
|
||||||
{
|
{
|
||||||
::glEnableClientState(GL_VERTEX_ARRAY);
|
::glEnableClientState(GL_VERTEX_ARRAY);
|
||||||
|
|
||||||
@ -737,22 +745,50 @@ void GLCanvas3D::select_view(const std::string& direction)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLCanvas3D::render_background()
|
||||||
|
{
|
||||||
|
static const float COLOR[3] = { 10.0f / 255.0f, 98.0f / 255.0f, 144.0f / 255.0f };
|
||||||
|
|
||||||
|
::glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
|
::glPushMatrix();
|
||||||
|
::glLoadIdentity();
|
||||||
|
::glMatrixMode(GL_PROJECTION);
|
||||||
|
::glPushMatrix();
|
||||||
|
::glLoadIdentity();
|
||||||
|
|
||||||
|
// Draws a bluish bottom to top gradient over the complete screen.
|
||||||
|
::glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
::glBegin(GL_QUADS);
|
||||||
|
::glColor3f(0.0f, 0.0f, 0.0f);
|
||||||
|
::glVertex3f(-1.0f, -1.0f, 1.0f);
|
||||||
|
::glVertex3f(1.0f, -1.0f, 1.0f);
|
||||||
|
::glColor3f(COLOR[0], COLOR[1], COLOR[2]);
|
||||||
|
::glVertex3f(1.0f, 1.0f, 1.0f);
|
||||||
|
::glVertex3f(-1.0f, 1.0f, 1.0f);
|
||||||
|
::glEnd();
|
||||||
|
|
||||||
|
::glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
|
::glPopMatrix();
|
||||||
|
::glMatrixMode(GL_MODELVIEW);
|
||||||
|
::glPopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
void GLCanvas3D::render_bed()
|
void GLCanvas3D::render_bed()
|
||||||
{
|
{
|
||||||
::glDisable(GL_LIGHTING);
|
|
||||||
m_bed.render();
|
m_bed.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::render_axes()
|
void GLCanvas3D::render_axes()
|
||||||
{
|
{
|
||||||
::glDisable(GL_LIGHTING);
|
|
||||||
m_axes.render();
|
m_axes.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::render_cutting_plane()
|
void GLCanvas3D::render_cutting_plane()
|
||||||
{
|
{
|
||||||
m_cutting_plane.render_plane(volumes_bounding_box());
|
m_cutting_plane.render(volumes_bounding_box());
|
||||||
m_cutting_plane.render_contour();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::render_warning_texture()
|
void GLCanvas3D::render_warning_texture()
|
||||||
|
@ -124,8 +124,11 @@ public:
|
|||||||
|
|
||||||
bool set(float z, const ExPolygons& polygons);
|
bool set(float z, const ExPolygons& polygons);
|
||||||
|
|
||||||
void render_plane(const BoundingBoxf3& bb);
|
void render(const BoundingBoxf3& bb);
|
||||||
void render_contour();
|
|
||||||
|
private:
|
||||||
|
void _render_plane(const BoundingBoxf3& bb);
|
||||||
|
void _render_contour();
|
||||||
};
|
};
|
||||||
|
|
||||||
class LayersEditing
|
class LayersEditing
|
||||||
@ -222,6 +225,7 @@ public:
|
|||||||
void zoom_to_volumes();
|
void zoom_to_volumes();
|
||||||
void select_view(const std::string& direction);
|
void select_view(const std::string& direction);
|
||||||
|
|
||||||
|
void render_background();
|
||||||
void render_bed();
|
void render_bed();
|
||||||
void render_axes();
|
void render_axes();
|
||||||
void render_cutting_plane();
|
void render_cutting_plane();
|
||||||
|
@ -390,6 +390,13 @@ void GLCanvas3DManager::select_view(wxGLCanvas* canvas, const std::string& direc
|
|||||||
it->second->select_view(direction);
|
it->second->select_view(direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLCanvas3DManager::render_background(wxGLCanvas* canvas)
|
||||||
|
{
|
||||||
|
CanvasesMap::iterator it = _get_canvas(canvas);
|
||||||
|
if (it != m_canvases.end())
|
||||||
|
it->second->render_background();
|
||||||
|
}
|
||||||
|
|
||||||
void GLCanvas3DManager::render_bed(wxGLCanvas* canvas)
|
void GLCanvas3DManager::render_bed(wxGLCanvas* canvas)
|
||||||
{
|
{
|
||||||
CanvasesMap::iterator it = _get_canvas(canvas);
|
CanvasesMap::iterator it = _get_canvas(canvas);
|
||||||
|
@ -107,6 +107,7 @@ public:
|
|||||||
void zoom_to_volumes(wxGLCanvas* canvas);
|
void zoom_to_volumes(wxGLCanvas* canvas);
|
||||||
void select_view(wxGLCanvas* canvas, const std::string& direction);
|
void select_view(wxGLCanvas* canvas, const std::string& direction);
|
||||||
|
|
||||||
|
void render_background(wxGLCanvas* canvas);
|
||||||
void render_bed(wxGLCanvas* canvas);
|
void render_bed(wxGLCanvas* canvas);
|
||||||
void render_axes(wxGLCanvas* canvas);
|
void render_axes(wxGLCanvas* canvas);
|
||||||
void render_cutting_plane(wxGLCanvas* canvas);
|
void render_cutting_plane(wxGLCanvas* canvas);
|
||||||
|
@ -444,6 +444,12 @@ select_view(canvas, direction)
|
|||||||
CODE:
|
CODE:
|
||||||
_3DScene::select_view((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), direction);
|
_3DScene::select_view((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"), direction);
|
||||||
|
|
||||||
|
void
|
||||||
|
render_background(canvas)
|
||||||
|
SV *canvas;
|
||||||
|
CODE:
|
||||||
|
_3DScene::render_background((wxGLCanvas*)wxPli_sv_2_object(aTHX_ canvas, "Wx::GLCanvas"));
|
||||||
|
|
||||||
void
|
void
|
||||||
render_bed(canvas)
|
render_bed(canvas)
|
||||||
SV *canvas;
|
SV *canvas;
|
||||||
|
Loading…
Reference in New Issue
Block a user