From 7df607147606b10120250f7a533f7c3b9df43cc4 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Wed, 27 Mar 2013 21:21:24 +0100 Subject: [PATCH] [DEV] add some capacity at the 3d direct draw --- .../renderer/resources/Colored3DObject.cpp | 55 ++++++++++++++----- .../ewol/renderer/resources/Colored3DObject.h | 11 +++- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/sources/ewol/renderer/resources/Colored3DObject.cpp b/sources/ewol/renderer/resources/Colored3DObject.cpp index bd9a728c..508fa6d3 100644 --- a/sources/ewol/renderer/resources/Colored3DObject.cpp +++ b/sources/ewol/renderer/resources/Colored3DObject.cpp @@ -34,7 +34,8 @@ ewol::Colored3DObject::~Colored3DObject(void) void ewol::Colored3DObject::Draw(etk::Vector& vertices, const draw::Colorf& color, - bool updateDepthBuffer) + bool updateDepthBuffer, + bool depthtest) { if (vertices.Size()<=0) { return; @@ -43,9 +44,11 @@ void ewol::Colored3DObject::Draw(etk::Vector& vertices, EWOL_ERROR("No shader ..."); return; } - ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); - if (false==updateDepthBuffer) { - glDepthMask(GL_FALSE); + if (true==depthtest) { + ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); + if (false==updateDepthBuffer) { + glDepthMask(GL_FALSE); + } } //EWOL_DEBUG(" Display " << m_coord.Size() << " elements" ); m_GLprogram->Use(); @@ -64,15 +67,19 @@ void ewol::Colored3DObject::Draw(etk::Vector& vertices, // Request the draw od the elements : //glDrawArrays(GL_LINES, 0, vertices.Size()); //m_GLprogram->UnUse(); - if (false==updateDepthBuffer) { - glDepthMask(GL_TRUE); + if (true==depthtest) { + if (false==updateDepthBuffer) { + glDepthMask(GL_TRUE); + } + ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); } - ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); } void ewol::Colored3DObject::Draw(etk::Vector& vertices, const draw::Colorf& color, - mat4& transformationMatrix) + mat4& transformationMatrix, + bool updateDepthBuffer, + bool depthtest) { if (vertices.Size()<=0) { return; @@ -81,7 +88,12 @@ void ewol::Colored3DObject::Draw(etk::Vector& vertices, EWOL_ERROR("No shader ..."); return; } - ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); + if (true==depthtest) { + ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); + if (false==updateDepthBuffer) { + glDepthMask(GL_FALSE); + } + } //EWOL_DEBUG(" Display " << m_coord.Size() << " elements" ); m_GLprogram->Use(); // set Matrix : translation/positionMatrix @@ -96,12 +108,19 @@ void ewol::Colored3DObject::Draw(etk::Vector& vertices, // Request the draw od the elements : ewol::openGL::DrawArrays(GL_TRIANGLES, 0, vertices.Size()); m_GLprogram->UnUse(); - ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); + if (true==depthtest) { + if (false==updateDepthBuffer) { + glDepthMask(GL_TRUE); + } + ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); + } } void ewol::Colored3DObject::DrawLine(etk::Vector& vertices, const draw::Colorf& color, - mat4& transformationMatrix) + mat4& transformationMatrix, + bool updateDepthBuffer, + bool depthtest) { if (vertices.Size()<=0) { return; @@ -110,7 +129,12 @@ void ewol::Colored3DObject::DrawLine(etk::Vector& vertices, EWOL_ERROR("No shader ..."); return; } - ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); + if (true==depthtest) { + ewol::openGL::Enable(ewol::openGL::FLAG_DEPTH_TEST); + if (false==updateDepthBuffer) { + glDepthMask(GL_FALSE); + } + } //EWOL_DEBUG(" Display " << m_coord.Size() << " elements" ); m_GLprogram->Use(); // set Matrix : translation/positionMatrix @@ -125,5 +149,10 @@ void ewol::Colored3DObject::DrawLine(etk::Vector& vertices, // Request the draw od the elements : ewol::openGL::DrawArrays(GL_LINES, 0, vertices.Size()); m_GLprogram->UnUse(); - ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); + if (true==depthtest) { + if (false==updateDepthBuffer) { + glDepthMask(GL_TRUE); + } + ewol::openGL::Disable(ewol::openGL::FLAG_DEPTH_TEST); + } } diff --git a/sources/ewol/renderer/resources/Colored3DObject.h b/sources/ewol/renderer/resources/Colored3DObject.h index a1d9d5b0..4b95de6c 100644 --- a/sources/ewol/renderer/resources/Colored3DObject.h +++ b/sources/ewol/renderer/resources/Colored3DObject.h @@ -30,13 +30,18 @@ namespace ewol virtual const char* GetType(void) { return "ewol::Colored3DObject"; }; virtual void Draw(etk::Vector& vertices, const draw::Colorf& color, - bool updateDepthBuffer=true); + bool updateDepthBuffer=true, + bool depthtest=true); virtual void Draw(etk::Vector& vertices, const draw::Colorf& color, - mat4& transformationMatrix); + mat4& transformationMatrix, + bool updateDepthBuffer=true, + bool depthtest=true); virtual void DrawLine(etk::Vector& vertices, const draw::Colorf& color, - mat4& transformationMatrix); + mat4& transformationMatrix, + bool updateDepthBuffer=true, + bool depthtest=true); }; };