From eda5ea1b50c62931ba3126e10ac3e9dc44cf5970 Mon Sep 17 00:00:00 2001
From: Thibault Soucarre <thibault.soucarre@inria.fr>
Date: Thu, 3 Jul 2014 11:51:47 +0000
Subject: [PATCH] scaling and position are correct

---
 src/render/Render_alternate.cpp      | 40 +++++++++++++++++++---------
 src/render/Render_alternate.hpp      |  1 +
 src/render/vertexshader.vertexshader |  3 ++-
 3 files changed, 31 insertions(+), 13 deletions(-)

diff --git a/src/render/Render_alternate.cpp b/src/render/Render_alternate.cpp
index 4a83f2ac..043b1dd1 100644
--- a/src/render/Render_alternate.cpp
+++ b/src/render/Render_alternate.cpp
@@ -96,7 +96,7 @@ static bool _draw_event;
  **********************************/
 
 Render_alternate::Render_alternate(Core* core, QWidget *parent, const QGLFormat& format)
-    : Hook_event(this, core, parent, format), _containers(GL_QUADS), _states(GL_QUADS), _events(GL_POLYGON), _arrows(GL_LINE), _counters(GL_LINE), _shader("vertexshader.vertexshader", "fragmentshader.fragmentshader"), _modelview(glm::mat4(1.0)){
+    : Hook_event(this, core, parent, format), _containers(GL_QUADS), _states(GL_QUADS), _events(GL_POLYGON), _arrows(GL_LINE), _counters(GL_LINE), _shader("vertexshader.vertexshader", "fragmentshader.fragmentshader"), _modelview(glm::mat4(1.0)), _projection(glm::mat4(1.0)){
 
     setAutoFillBackground(false);
 
@@ -119,8 +119,9 @@ Render_alternate::~Render_alternate(){
 void  Render_alternate::initializeGL() {
     glewExperimental = GL_TRUE;
     GLenum err = glewInit();
-    if(err!=GLEW_OK)
+    if(err!=GLEW_OK){
         std::cout << "ERROR : GlewInit failed" << std::endl;
+    }
     _shader.charger();
     glClearColor(0.5f, 0.5f, 0.55f, 0.0f);
 
@@ -132,7 +133,8 @@ void  Render_alternate::initializeGL() {
         std::cout << "_core = NULL" << std::endl;
     _core->waitGUIInit->quit();
     std::cout << "init ok" << std::endl;
-    _modelview = glm::scale(_modelview, glm::vec3(0.01,-0.01,1));
+    _modelview = glm::scale(_modelview, glm::vec3(1,-1,1));
+    _modelview = glm::translate(_modelview, glm::vec3(0,-Info::Render::height, 0));
 }
 
 void  Render_alternate::resizeGL(int width, int height) {
@@ -141,12 +143,18 @@ void  Render_alternate::resizeGL(int width, int height) {
     /* update informations about widget size */
     Info::Screen::width  = width;
     Info::Screen::height = height;
+    if(_state == DRAWING_STATE_WAITING)
+        _projection = glm::ortho(-50, 50, -50, 50);//, 0, 1);
+    else if(_state == DRAWING_STATE_DRAWING)
+        _projection = glm::ortho(0., Info::Render::width, 0., Info::Render::height, 0., 1.);
+    else{
+     message << tr("Undefined value for the drawing state attribute - Render area").toStdString() << Message::ende;
+     }
 
-    glMatrixMode(GL_PROJECTION);
+        /*glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
 
 
-
     if(DRAWING_STATE_WAITING == _state){// A wait is drawn
         glOrtho(-50, 50, -50, 50, 0, 1000);
     }else if (DRAWING_STATE_DRAWING == _state){// A trace is drawn
@@ -156,7 +164,8 @@ void  Render_alternate::resizeGL(int width, int height) {
     }
 
 
-    glMatrixMode(GL_MODELVIEW);
+     glMatrixMode(GL_MODELVIEW);*/
+
 }
 
 
@@ -168,20 +177,26 @@ void  Render_alternate::paintGL(){
     //select shader program
     glUseProgram(_shader.getProgramID());
     std::cout << "paintGL" << std::endl;
-
-    /* drawing containers*/
+    glm::mat4 tmp = _modelview;
+    //_modelview = glm::translate(_modelview, glm::vec3(0.0, Info::Render::height, 100.0));
+    //_modelview = glm::rotate(_modelview, (float)180.0, glm::vec3(1.0, 0.0, 0.0));
+    tmp = _modelview;
+/* drawing containers*/
     _containers.lock();
     //_modelview = glm::translate(_modelview, glm::vec3(0.0f, _ruler_y + _ruler_height -_y_state_translate,  _z_container));
     //_modelview = glm::scale(_modelview, glm::vec3(_x_scale_container_state/0.20, _y_state_scale, 1.0));
     glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(_modelview));
+    glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(_projection));
     glDrawArrays(GL_QUADS, 0, _containers.getNbVertex());
     _containers.unlock();
+    _modelview = tmp;
 
     /*drawing states*/
     _states.lock();
-    glm::mat4 tmp = _modelview;
-    _modelview = glm::translate(_modelview, glm::vec3(_default_entity_x_translate - _x_state_translate, 0.0, 0.0));
+    _modelview = glm::translate(_modelview, glm::vec3(_default_entity_x_translate - _x_state_translate, 0.0/*_ruler_y + _ruler_height - _y_state_translate*/, 0.0/*_z_state*/));
+    _modelview = glm::scale(_modelview, glm::vec3(_x_state_scale, _y_state_scale, 1));
     glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(_modelview));
+    glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(_projection));
     glDrawArrays(GL_QUADS, 0, _states.getNbVertex());
     _states.unlock();
     _modelview = tmp;
@@ -201,11 +216,14 @@ void  Render_alternate::paintGL(){
         tmp = _modelview;
         //change matrix
         _modelview = glm::translate(_modelview, glm::vec3(_default_entity_x_translate - _x_state_translate, 0 , 0));
+        _modelview = glm::scale(_modelview, glm::vec3(_x_state_scale, _y_state_scale, 1.0));
         _modelview = glm::translate(_modelview, glm::vec3(_links[4*i+2], _links[4*i+3], 0));
         _modelview = glm::rotate(_modelview, (float) _links[4*i], glm::vec3(0,0,1));
         _modelview = glm::scale(_modelview, glm::vec3(_links[4*i+1], _links[4*i+1/10], 1));
+
         //draw the arrow
         glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "modelview"), 1, GL_FALSE, glm::value_ptr(_modelview));
+        glUniformMatrix4fv(glGetUniformLocation(_shader.getProgramID(), "projection"), 1, GL_FALSE, glm::value_ptr(_projection));
         glDrawArrays(GL_LINES, 0,6);
         _arrows.unlock();
         //restore matrix
@@ -591,8 +609,6 @@ GLuint Render_alternate::draw_wait() {
 
 
 
-
-
 void Render_alternate::call_ruler(){
     Element_pos graduation_diff;
     Element_pos coeff_prefix;
diff --git a/src/render/Render_alternate.hpp b/src/render/Render_alternate.hpp
index 8dd7fefc..ddee5c2a 100644
--- a/src/render/Render_alternate.hpp
+++ b/src/render/Render_alternate.hpp
@@ -95,6 +95,7 @@ private:
     bool _draw_counter;
     std::vector<Element_pos> _links;
     glm::mat4 _modelview;
+    glm::mat4 _projection;
 protected:
 
        /*!
diff --git a/src/render/vertexshader.vertexshader b/src/render/vertexshader.vertexshader
index f135b5f5..1c98dcdd 100644
--- a/src/render/vertexshader.vertexshader
+++ b/src/render/vertexshader.vertexshader
@@ -4,10 +4,11 @@ in vec2 in_Vertex;
 in vec3 in_Color;
 
 uniform mat4 modelview;
+uniform mat4 projection;
 
 out vec3 color;
 
 void main(){
-     gl_Position = modelview * vec4(in_Vertex, 1.0, 1.0);
+     gl_Position = projection * modelview * vec4(in_Vertex, 0.0, 1.0);
      color = in_Color;
 }
\ No newline at end of file
-- 
GitLab