[DEV] normalize openGL interface for matrix

This commit is contained in:
Edouard DUPIN 2014-11-13 21:11:53 +01:00
parent 4e88d081d8
commit 86fa583a55
11 changed files with 29 additions and 22 deletions

2
external/ege vendored

@ -1 +1 @@
Subproject commit 59a2162deb1cf0e1cad78f11f2bc1ffe36619baf Subproject commit 714662d7a923c7c451b1a02a636c8c0e3fefce5c

View File

@ -61,7 +61,7 @@ void ewol::compositing::Area::draw(bool _disableDepthTest) {
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply; mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// TextureID // TextureID
m_GLprogram->setTexture0(m_GLtexID, m_resource->getId()); m_GLprogram->setTexture0(m_GLtexID, m_resource->getId());
// position : // position :

View File

@ -227,6 +227,7 @@ ewol::compositing::Drawing::Drawing() :
m_GLprogram(nullptr), m_GLprogram(nullptr),
m_GLPosition(-1), m_GLPosition(-1),
m_GLMatrix(-1), m_GLMatrix(-1),
m_GLMatrixPosition(-1),
m_GLColor(-1), m_GLColor(-1),
m_thickness(0.0), m_thickness(0.0),
m_triElement(0) { m_triElement(0) {
@ -288,8 +289,9 @@ void ewol::compositing::Drawing::loadProgram() {
// get the shader resource : // get the shader resource :
if (nullptr != m_GLprogram ) { if (nullptr != m_GLprogram ) {
m_GLPosition = m_GLprogram->getAttribute("EW_coord3d"); m_GLPosition = m_GLprogram->getAttribute("EW_coord3d");
m_GLColor = m_GLprogram->getAttribute("EW_color"); m_GLColor = m_GLprogram->getAttribute("EW_color");
m_GLMatrix = m_GLprogram->getUniform("EW_MatrixTransformation"); m_GLMatrix = m_GLprogram->getUniform("EW_MatrixTransformation");
m_GLMatrixPosition = m_GLprogram->getUniform("EW_MatrixPosition");
} }
} }
@ -306,7 +308,9 @@ void ewol::compositing::Drawing::draw(bool _disableDepthTest) {
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply; mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
mat4 tmpMatrix2;
m_GLprogram->uniformMatrix(m_GLMatrixPosition, tmpMatrix2);
// position : // position :
m_GLprogram->sendAttribute(m_GLPosition, m_coord); m_GLprogram->sendAttribute(m_GLPosition, m_coord);
// color : // color :

View File

@ -30,8 +30,9 @@ namespace ewol {
private: private:
std::shared_ptr<ewol::resource::Program> m_GLprogram; //!< pointer on the opengl display program std::shared_ptr<ewol::resource::Program> m_GLprogram; //!< pointer on the opengl display program
int32_t m_GLPosition; //!< openGL id on the element (vertex buffer) int32_t m_GLPosition; //!< openGL id on the element (vertex buffer)
int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix) int32_t m_GLMatrix; //!< openGL id on the element (transformation matrix)
int32_t m_GLColor; //!< openGL id on the element (color buffer) int32_t m_GLMatrixPosition; //!< position matrix
int32_t m_GLColor; //!< openGL id on the element (color buffer)
private: // Background Color (display only when needed) private: // Background Color (display only when needed)
std::vector<vec3 > m_coord; //!< internal position for the text display std::vector<vec3 > m_coord; //!< internal position for the text display
std::vector<etk::Color<float> > m_coordColor; //!< internal color of the background std::vector<etk::Color<float> > m_coordColor; //!< internal color of the background

View File

@ -78,7 +78,7 @@ void ewol::compositing::Image::draw(bool _disableDepthTest) {
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply; mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// TextureID // TextureID
if (m_resource != nullptr) { if (m_resource != nullptr) {
if (m_distanceFieldMode == true) { if (m_distanceFieldMode == true) {

View File

@ -184,7 +184,7 @@ void ewol::compositing::Shaper::draw(bool _disableDepthTest) {
m_GLprogram->use(); m_GLprogram->use();
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix(); mat4 tmpMatrix = ewol::openGL::getMatrix();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttribute(m_GLPosition, 2/*x,y*/, m_coord); m_GLprogram->sendAttribute(m_GLPosition, 2/*x,y*/, m_coord);
// property // property

View File

@ -51,7 +51,7 @@ void ewol::compositing::Text::drawMT(const mat4& _transformationMatrix, bool _en
mat4 camMatrix = ewol::openGL::getCameraMatrix(); mat4 camMatrix = ewol::openGL::getCameraMatrix();
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// Texture : // Texture :
m_GLprogram->setTexture0(m_GLtexID, m_font->getId()); m_GLprogram->setTexture0(m_GLtexID, m_font->getId());
m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x());
@ -90,7 +90,7 @@ void ewol::compositing::Text::drawD(bool _disableDepthTest) {
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply; mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// Texture : // Texture :
m_GLprogram->setTexture0(m_GLtexID, m_font->getId()); m_GLprogram->setTexture0(m_GLtexID, m_font->getId());
m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_font->getOpenGlSize().x());

View File

@ -62,7 +62,7 @@ void ewol::compositing::TextDF::drawMT(const mat4& _transformationMatrix, bool _
mat4 camMatrix = ewol::openGL::getCameraMatrix(); mat4 camMatrix = ewol::openGL::getCameraMatrix();
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// Texture : // Texture :
m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getId()); m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getId());
m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x());
@ -100,7 +100,7 @@ void ewol::compositing::TextDF::drawD(bool _disableDepthTest) {
// set Matrix : translation/positionMatrix // set Matrix : translation/positionMatrix
mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply; mat4 tmpMatrix = ewol::openGL::getMatrix()*m_matrixApply;
m_GLprogram->use(); m_GLprogram->use();
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// Texture : // Texture :
m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getId()); m_GLprogram->setTexture0(m_GLtexID, m_fontDF->getId());
m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x()); m_GLprogram->uniform1i(m_GLtextWidth, m_fontDF->getOpenGlSize().x());

View File

@ -59,7 +59,7 @@ void ewol::resource::Colored3DObject::draw(std::vector<vec3>& _vertices,
mat4 projMatrix = ewol::openGL::getMatrix(); mat4 projMatrix = ewol::openGL::getMatrix();
mat4 camMatrix = ewol::openGL::getCameraMatrix(); mat4 camMatrix = ewol::openGL::getCameraMatrix();
mat4 tmpMatrix = projMatrix * camMatrix; mat4 tmpMatrix = projMatrix * camMatrix;
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z,unused*/, &_vertices[0], 4*sizeof(float)); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z,unused*/, &_vertices[0], 4*sizeof(float));
// color : // color :
@ -102,7 +102,7 @@ void ewol::resource::Colored3DObject::draw(std::vector<vec3>& _vertices,
mat4 projMatrix = ewol::openGL::getMatrix(); mat4 projMatrix = ewol::openGL::getMatrix();
mat4 camMatrix = ewol::openGL::getCameraMatrix(); mat4 camMatrix = ewol::openGL::getCameraMatrix();
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float)); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float));
// color : // color :
@ -142,7 +142,7 @@ void ewol::resource::Colored3DObject::drawLine(std::vector<vec3>& _vertices,
mat4 projMatrix = ewol::openGL::getMatrix(); mat4 projMatrix = ewol::openGL::getMatrix();
mat4 camMatrix = ewol::openGL::getCameraMatrix(); mat4 camMatrix = ewol::openGL::getCameraMatrix();
mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix; mat4 tmpMatrix = projMatrix * camMatrix * _transformationMatrix;
m_GLprogram->uniformMatrix4fv(m_GLMatrix, 1, tmpMatrix.m_mat); m_GLprogram->uniformMatrix(m_GLMatrix, tmpMatrix);
// position : // position :
m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float)); m_GLprogram->sendAttribute(m_GLPosition, 3/*x,y,z*/, &_vertices[0], 4*sizeof(float));
// color : // color :

View File

@ -358,7 +358,7 @@ void ewol::resource::Program::sendAttributePointer(int32_t _idElem,
////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////
void ewol::resource::Program::uniformMatrix4fv(int32_t _idElem, int32_t _nbElement, mat4 _matrix, bool _transpose) { void ewol::resource::Program::uniformMatrix(int32_t _idElem, const mat4& _matrix, bool _transpose) {
if (0 == m_program) { if (0 == m_program) {
return; return;
} }
@ -371,9 +371,12 @@ void ewol::resource::Program::uniformMatrix4fv(int32_t _idElem, int32_t _nbEleme
} }
// note : Android des not supported the transposition of the matrix, then we will done it oursef: // note : Android des not supported the transposition of the matrix, then we will done it oursef:
if (true == _transpose) { if (true == _transpose) {
_matrix.transpose(); mat4 tmp = _matrix;
tmp.transpose();
glUniformMatrix4fv(m_elementList[_idElem].m_elementId, 1, GL_FALSE, tmp.m_mat);
} else {
glUniformMatrix4fv(m_elementList[_idElem].m_elementId, 1, GL_FALSE, _matrix.m_mat);
} }
glUniformMatrix4fv(m_elementList[_idElem].m_elementId, _nbElement, GL_FALSE, _matrix.m_mat);
//checkGlError("glUniformMatrix4fv", __LINE__); //checkGlError("glUniformMatrix4fv", __LINE__);
} }

View File

@ -113,11 +113,10 @@ namespace ewol {
/** /**
* @brief Send a uniform element to the spefified ID (not send if does not really exist in the openGL program) * @brief Send a uniform element to the spefified ID (not send if does not really exist in the openGL program)
* @param[in] _idElem Id of the uniform that might be sended. * @param[in] _idElem Id of the uniform that might be sended.
* @param[in] _nbElement Specifies the number of elements that are to be modified. This should be 1 if the targeted uniform variable is not an array, and 1 or more if it is an array. * @param[in] _matrix Matrix that might be sended.
* @param[in] _pointer Pointer on the data that might be sended
* @param[in] _transpose Transpose the matrix (needed all the taime in the normal openGl access (only not done in the openGL-ES2 due to the fact we must done it ourself) * @param[in] _transpose Transpose the matrix (needed all the taime in the normal openGl access (only not done in the openGL-ES2 due to the fact we must done it ourself)
*/ */
void uniformMatrix4fv(int32_t _idElem, int32_t _nbElement, mat4 _matrix, bool _transpose=true); void uniformMatrix(int32_t _idElem, const mat4& _matrix, bool _transpose=true);
inline void uniform(int32_t _idElem, const etk::Color<float>& _value) { inline void uniform(int32_t _idElem, const etk::Color<float>& _value) {
uniform4f(_idElem, _value.r(), _value.g(), _value.b(), _value.a()); uniform4f(_idElem, _value.r(), _value.g(), _value.b(), _value.a());