From b139f3878483f6c4dddc5de21559037280950a15 Mon Sep 17 00:00:00 2001 From: Enrico Turri <enricoturri@seznam.cz> Date: Thu, 21 Jun 2018 13:03:53 +0200 Subject: [PATCH] Attempt to fix texture rendering on OpenGL 1.1 cards --- xs/src/slic3r/GUI/3DScene.cpp | 6 ++++++ xs/src/slic3r/GUI/GLCanvas3D.cpp | 15 ++++++++++++--- xs/src/slic3r/GUI/GLTexture.cpp | 12 ++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index e404a9d51..a389bded0 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -396,6 +396,9 @@ void GLVolume::render_using_layer_height() const GLsizei half_w = w / 2; GLsizei half_h = h / 2; +//####################################################################################################################### + ::glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +//####################################################################################################################### glBindTexture(GL_TEXTURE_2D, layer_height_texture_data.texture_id); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA8, half_w, half_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); @@ -1582,6 +1585,9 @@ unsigned int _3DScene::TextureBase::finalize() { if (!m_data.empty()) { // sends buffer to gpu +//####################################################################################################################### + ::glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +//####################################################################################################################### ::glGenTextures(1, &m_tex_id); ::glBindTexture(GL_TEXTURE_2D, m_tex_id); ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_tex_width, (GLsizei)m_tex_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const GLvoid*)m_data.data()); diff --git a/xs/src/slic3r/GUI/GLCanvas3D.cpp b/xs/src/slic3r/GUI/GLCanvas3D.cpp index 4f816b2d8..be67c335a 100644 --- a/xs/src/slic3r/GUI/GLCanvas3D.cpp +++ b/xs/src/slic3r/GUI/GLCanvas3D.cpp @@ -498,7 +498,9 @@ void GLCanvas3D::Bed::_render_prusa(float theta) const ::glEnable(GL_BLEND); ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -// ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### + ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### ::glEnableClientState(GL_VERTEX_ARRAY); ::glEnableClientState(GL_TEXTURE_COORD_ARRAY); @@ -519,7 +521,9 @@ void GLCanvas3D::Bed::_render_prusa(float theta) const ::glDisableClientState(GL_TEXTURE_COORD_ARRAY); ::glDisableClientState(GL_VERTEX_ARRAY); -// ::glDisable(GL_TEXTURE_2D); +//####################################################################################################################### + ::glDisable(GL_TEXTURE_2D); +//####################################################################################################################### ::glDisable(GL_BLEND); } @@ -983,6 +987,9 @@ void GLCanvas3D::LayersEditing::_render_active_object_annotations(const GLCanvas GLsizei half_w = w / 2; GLsizei half_h = h / 2; +//####################################################################################################################### + ::glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +//####################################################################################################################### ::glBindTexture(GL_TEXTURE_2D, m_z_texture_id); ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); ::glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA8, half_w, half_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); @@ -1555,7 +1562,9 @@ bool GLCanvas3D::init(bool useVBOs, bool use_legacy_opengl) if (m_gizmos.is_enabled() && !m_gizmos.init()) return false; - ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### +// ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### m_initialized = true; diff --git a/xs/src/slic3r/GUI/GLTexture.cpp b/xs/src/slic3r/GUI/GLTexture.cpp index d1059a400..1256aca58 100644 --- a/xs/src/slic3r/GUI/GLTexture.cpp +++ b/xs/src/slic3r/GUI/GLTexture.cpp @@ -72,6 +72,10 @@ bool GLTexture::load_from_file(const std::string& filename, bool generate_mipmap } // sends data to gpu + +//####################################################################################################################### + ::glPixelStorei(GL_UNPACK_ALIGNMENT, 1); +//####################################################################################################################### ::glGenTextures(1, &m_id); ::glBindTexture(GL_TEXTURE_2D, m_id); ::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data()); @@ -132,7 +136,9 @@ void GLTexture::render_texture(unsigned int tex_id, float left, float right, flo ::glDisable(GL_LIGHTING); ::glEnable(GL_BLEND); ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); -// ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### + ::glEnable(GL_TEXTURE_2D); +//####################################################################################################################### ::glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id); @@ -145,7 +151,9 @@ void GLTexture::render_texture(unsigned int tex_id, float left, float right, flo ::glBindTexture(GL_TEXTURE_2D, 0); -// ::glDisable(GL_TEXTURE_2D); +//####################################################################################################################### + ::glDisable(GL_TEXTURE_2D); +//####################################################################################################################### ::glDisable(GL_BLEND); ::glEnable(GL_LIGHTING); }