diff options
Diffstat (limited to 'src/libjin/Graphics')
| -rw-r--r-- | src/libjin/Graphics/fonts/je_texture_font.cpp | 6 | ||||
| -rw-r--r-- | src/libjin/Graphics/fonts/je_ttf.cpp | 6 | ||||
| -rw-r--r-- | src/libjin/Graphics/je_canvas.cpp | 4 | ||||
| -rw-r--r-- | src/libjin/Graphics/je_gl.cpp | 56 | ||||
| -rw-r--r-- | src/libjin/Graphics/je_gl.h | 42 | ||||
| -rw-r--r-- | src/libjin/Graphics/je_graphic.cpp | 12 | ||||
| -rw-r--r-- | src/libjin/Graphics/je_shapes.cpp | 30 | ||||
| -rw-r--r-- | src/libjin/Graphics/shaders/je_base.shader.h | 6 | 
8 files changed, 91 insertions, 71 deletions
| diff --git a/src/libjin/Graphics/fonts/je_texture_font.cpp b/src/libjin/Graphics/fonts/je_texture_font.cpp index 6875e30..868188e 100644 --- a/src/libjin/Graphics/fonts/je_texture_font.cpp +++ b/src/libjin/Graphics/fonts/je_texture_font.cpp @@ -220,9 +220,9 @@ namespace JinEngine                  Shader* shader = Shader::getCurrentShader();                  const vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist;                  const vector<GlyphVertex>& glyphvertices = page->glyphvertices; -                static Matrix modelMatrix = gl.getModelMatrix(x, y, 0, 1, 1, 0, 0); -                shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -                shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +                Matrix modelMatrix = gl.getModelViewMatrix(x, y, 0, 1, 1, 0, 0); +                shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +                shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());                  for (int i = 0; i < glyphinfolist.size(); ++i)                  {                      const GlyphArrayDrawInfo& info = glyphinfolist[i]; diff --git a/src/libjin/Graphics/fonts/je_ttf.cpp b/src/libjin/Graphics/fonts/je_ttf.cpp index 1083281..3cbb28b 100644 --- a/src/libjin/Graphics/fonts/je_ttf.cpp +++ b/src/libjin/Graphics/fonts/je_ttf.cpp @@ -308,9 +308,9 @@ namespace JinEngine                  Shader* shader = Shader::getCurrentShader();                  const vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist;                  const vector<GlyphVertex>& glyphvertices = page->glyphvertices; -                static Matrix modelMatrix = gl.getModelMatrix(x, y, 0, 1, 1, 0, 0); -                shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -                shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +                Matrix modelMatrix = gl.getModelViewMatrix(x, y, 0, 1, 1, 0, 0); +                shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +                shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());                  for (int i = 0; i < glyphinfolist.size(); ++i)                  {                      const GlyphArrayDrawInfo& info = glyphinfolist[i]; diff --git a/src/libjin/Graphics/je_canvas.cpp b/src/libjin/Graphics/je_canvas.cpp index 7c8e849..491bf6b 100644 --- a/src/libjin/Graphics/je_canvas.cpp +++ b/src/libjin/Graphics/je_canvas.cpp @@ -68,7 +68,7 @@ namespace JinEngine  			int h = canvas->getHeight();  			// Set view port to canvas.  			glViewport(0, 0, w, h); -			gl.ProjectionMatrix.setOrtho(0, w, 0, h, -1, 1); +			gl.setProjectionMatrix(0, w, 0, h, -1, 1);  		}  		/** @@ -91,7 +91,7 @@ namespace JinEngine  			/* set viewport on screen */  			glViewport(0, 0, w, h); -			gl.ProjectionMatrix.setOrtho(0, w, h, 0, -1, 1); +			gl.setProjectionMatrix(0, w, h, 0, -1, 1);  		} diff --git a/src/libjin/Graphics/je_gl.cpp b/src/libjin/Graphics/je_gl.cpp index a559c07..f098f97 100644 --- a/src/libjin/Graphics/je_gl.cpp +++ b/src/libjin/Graphics/je_gl.cpp @@ -14,7 +14,7 @@ namespace JinEngine          OpenGL::OpenGL()              : ogl2d::OpenGL()          { -            mMatrices.push_back(Matrix()); +            mModelViewMatrices.push_back(Matrix());              solve();          } @@ -36,68 +36,78 @@ namespace JinEngine          void OpenGL::clearMatrix()          { -            mMatrices.clear(); -            mMatrices.push_back(Matrix()); -            mMatrix.setIdentity(); +            mModelViewMatrices.clear(); +            mModelViewMatrices.push_back(Matrix()); +            mModelViewMatrix.setIdentity();          }          void OpenGL::push()          { -            mMatrices.push_back(Matrix()); +            mModelViewMatrices.push_back(Matrix());          }          void OpenGL::pop()          { -            if (mMatrices.size() == 1) +            if (mModelViewMatrices.size() == 1)                  return; -            mMatrices.pop_back(); +            mModelViewMatrices.pop_back();              solve();          }          void OpenGL::solve()          { -            mMatrix.setIdentity(); -            for (Matrix& m : mMatrices) -                mMatrix *= m; +            mModelViewMatrix.setIdentity(); +            for (Matrix& m : mModelViewMatrices) +                mModelViewMatrix *= m;          }          void OpenGL::translate(float x, float y)          { -            if (mMatrices.size() == 1) +            if (mModelViewMatrices.size() == 1)                  return; -            Matrix& m = mMatrices.back(); +            Matrix& m = mModelViewMatrices.back();              m.translate(x, y); -            mMatrix.translate(x, y); +            mModelViewMatrix.translate(x, y);          }          void OpenGL::scale(float sx, float sy)          { -            if (mMatrices.size() == 1) +            if (mModelViewMatrices.size() == 1)                  return; -            Matrix& m = mMatrices.back(); +            Matrix& m = mModelViewMatrices.back();              m.scale(sx, sy); -            mMatrix.scale(sx, sy); +            mModelViewMatrix.scale(sx, sy);          }          void OpenGL::rotate(float r)          { -            if (mMatrices.size() == 1) +            if (mModelViewMatrices.size() == 1)                  return; -            Matrix& m = mMatrices.back(); +            Matrix& m = mModelViewMatrices.back();              m.rotate(r); -            mMatrix.rotate(r); +            mModelViewMatrix.rotate(r);          } -        Matrix OpenGL::getModelMatrix(float x, float y, float sx, float sy, float r, float ox, float oy) +        Matrix OpenGL::getModelViewMatrix(float x, float y, float sx, float sy, float r, float ox, float oy)          {              Matrix m;              m.setTransformation(x, y, sx, sy, r, ox, oy); -            return mMatrix*m; +            return mModelViewMatrix*m;          } -        Math::Matrix OpenGL::getModelMatrix() +        Matrix OpenGL::getModelViewMatrix()          { -            return mMatrix; +            return mModelViewMatrix; +        } + +        const Matrix& OpenGL::getProjectionMatrix() +        { +            return mProjectionMatrix; +        } + +        void OpenGL::setProjectionMatrix(float l, float r, float b, float t, float n, float f) +        { +            mProjectionMatrix.setOrtho(l, r, b, t, n, f);          }  	} // namespace Graphics diff --git a/src/libjin/Graphics/je_gl.h b/src/libjin/Graphics/je_gl.h index 03bd26a..fba62a1 100644 --- a/src/libjin/Graphics/je_gl.h +++ b/src/libjin/Graphics/je_gl.h @@ -21,16 +21,6 @@ namespace JinEngine              ///              ///              /// -			Math::Matrix ProjectionMatrix; -/* -            /// -            /// -            /// -			Math::Matrix ModelMatrix; -*/ -            /// -            /// -            ///              OpenGL();              void setColor(Channel r, Channel g, Channel b, Channel a); @@ -43,28 +33,48 @@ namespace JinEngine              void push(); -            void pop(); -              void translate(float x, float y);              void scale(float sx, float sy);              void rotate(float r); -            Math::Matrix getModelMatrix(float x, float y, float sx, float sy, float r, float ox, float oy); +            void pop(); + +            /// +            /// Get model view matrix. +            /// +            Math::Matrix getModelViewMatrix(float x, float y, float sx, float sy, float r, float ox, float oy); + +            /// +            /// Get model view matrix. +            /// +            Math::Matrix getModelViewMatrix(); -            Math::Matrix getModelMatrix(); +            /// +            /// Set orthogonal matrix. +            /// +            void setProjectionMatrix(float l, float r, float b, float t, float n, float f); + +            /// +            /// Get orthogonal matrix. +            /// +            const Math::Matrix& getProjectionMatrix();          private:              void solve();              Color mCurrentColor; -            std::vector<Math::Matrix> mMatrices; -            Math::Matrix mMatrix; + +            std::vector<Math::Matrix> mModelViewMatrices; +            Math::Matrix mModelViewMatrix; + +            Math::Matrix mProjectionMatrix;  		}; +        // Singleton.  		extern OpenGL gl;  	} // namespace Graphics diff --git a/src/libjin/Graphics/je_graphic.cpp b/src/libjin/Graphics/je_graphic.cpp index f439b0b..0bb3fe1 100644 --- a/src/libjin/Graphics/je_graphic.cpp +++ b/src/libjin/Graphics/je_graphic.cpp @@ -45,7 +45,7 @@ namespace JinEngine          void Graphic::render(int x, int y, float sx, float sy, float r, float ox, float oy) const          { -            static Math::Matrix modelMatrix = gl.getModelMatrix(x, y, r, sx, sy, ox, oy); +            Math::Matrix modelMatrix = gl.getModelViewMatrix(x, y, r, sx, sy, ox, oy);              int w = getWidth(), h = getHeight();              static float vertexCoords[8];              static float textureCoords[8]; @@ -61,8 +61,8 @@ namespace JinEngine              textureCoords[6] = 1; textureCoords[7] = 0;              // Set shader.              Shader* shader = Shader::getCurrentShader(); -            shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -            shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +            shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());              shader->setVertexPointer(2, GL_FLOAT, 0, vertexCoords);              shader->setUVPointer(2, GL_FLOAT, 0, textureCoords); @@ -91,11 +91,11 @@ namespace JinEngine              textureCoords[4] = slx + slw; textureCoords[5] = sly + slh;              textureCoords[6] = slx + slw; textureCoords[7] = sly; -            static Math::Matrix modelMatrix = gl.getModelMatrix(x, y, r, sx, sy, ax, ay); +            Math::Matrix modelMatrix = gl.getModelViewMatrix(x, y, r, sx, sy, ax, ay);              Shader* shader = Shader::getCurrentShader(); -            shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -            shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +            shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());              shader->setVertexPointer(2, GL_FLOAT, 0, vertexCoords);              shader->setUVPointer(2, GL_FLOAT, 0, textureCoords); diff --git a/src/libjin/Graphics/je_shapes.cpp b/src/libjin/Graphics/je_shapes.cpp index 2a9fd25..0b239e7 100644 --- a/src/libjin/Graphics/je_shapes.cpp +++ b/src/libjin/Graphics/je_shapes.cpp @@ -24,9 +24,9 @@ namespace JinEngine  			Shader* shader = Shader::getCurrentShader();  			shader->setVertexPointer(2, GL_FLOAT, 0, verts); -            static Matrix modelMatrix = gl.getModelMatrix(); -			shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            Matrix modelMatrix = gl.getModelViewMatrix(); +			shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());  			glDrawArrays(GL_POINTS, 0, 1);  		} @@ -35,9 +35,9 @@ namespace JinEngine  		{  			Shader* shader = Shader::getCurrentShader();  			shader->setVertexPointer(2, GL_SHORT, 0, p); -            static Matrix modelMatrix = gl.getModelMatrix(); -            shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            Matrix modelMatrix = gl.getModelViewMatrix(); +            shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());  			glDrawArrays(GL_POINTS, 0, n);  		} @@ -51,9 +51,9 @@ namespace JinEngine  			Shader* shader = Shader::getCurrentShader();  			shader->setVertexPointer(2, GL_FLOAT, 0, verts); -            static Matrix modelMatrix = gl.getModelMatrix(); -            shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            Matrix modelMatrix = gl.getModelViewMatrix(); +            shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());  			glDrawArrays(GL_LINES, 0, 2);  		} @@ -98,9 +98,9 @@ namespace JinEngine  		void polygon_line(float* p, int count)  		{  			Shader* shader = Shader::getCurrentShader(); -            static Matrix modelMatrix = gl.getModelMatrix(); -            shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +            Matrix modelMatrix = gl.getModelViewMatrix(); +            shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +			shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());  			shader->setVertexPointer(2, GL_FLOAT, 0, p);  			glDrawArrays(GL_LINE_LOOP, 0, count); @@ -115,9 +115,9 @@ namespace JinEngine  			else if (mode == FILL)  			{  				Shader* shader = Shader::getCurrentShader(); -                static Matrix modelMatrix = gl.getModelMatrix(); -                shader->sendMatrix4(SHADER_MODEL_MATRIX, &modelMatrix); -				shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.ProjectionMatrix); +                Matrix modelMatrix = gl.getModelViewMatrix(); +                shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); +				shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix());  				shader->setVertexPointer(2, GL_FLOAT, 0, p);  				glDrawArrays(GL_POLYGON, 0, count); diff --git a/src/libjin/Graphics/shaders/je_base.shader.h b/src/libjin/Graphics/shaders/je_base.shader.h index 88fa872..34996bc 100644 --- a/src/libjin/Graphics/shaders/je_base.shader.h +++ b/src/libjin/Graphics/shaders/je_base.shader.h @@ -29,7 +29,7 @@ static const char* base_vertex = R"(  // Projection matrix  uniform mat4 jin_ProjectionMatrix;  // Model view matrix -uniform mat4 jin_ModelMatrix; +uniform mat4 jin_ModelViewMatrix;  in vec2 jin_VertexCoords;  in vec2 jin_TextureCoords; @@ -42,7 +42,7 @@ out vec2 jin_UV;  void main()  { -	vec4 v = jin_ModelMatrix * vec4(jin_VertexCoords, 0, 1.0); +	vec4 v = jin_ModelViewMatrix * vec4(jin_VertexCoords, 0, 1.0);      Vertex _v = vert(Vertex(v.xy, jin_TextureCoords));  	gl_Position = jin_ProjectionMatrix * vec4(_v.xy, 0, 1.0f);  	jin_Color = gl_Color; @@ -81,7 +81,7 @@ static const int BASE_FRAGMENT_SHADER_SIZE = strlen(base_fragment) + BASE_SHARED  #define formatFragmentShader(buf, program) sprintf(buf, base_fragment, base_shared, program)  static const char* SHADER_PROJECTION_MATRIX = "jin_ProjectionMatrix"; -static const char* SHADER_MODEL_MATRIX = "jin_ModelMatrix"; +static const char* SHADER_MODELVIEW_MATRIX = "jin_ModelViewMatrix";  static const char* SHADER_MAIN_TEXTURE = "jin_MainTexture";  static const char* SHADER_VERTEX_COORDS = "jin_VertexCoords";  static const char* SHADER_TEXTURE_COORDS = "jin_TextureCoords"; | 
