diff --git a/include/eepp/graphics/renderer/renderergl3.hpp b/include/eepp/graphics/renderer/renderergl3.hpp index 4e38c598d..1d402bb34 100644 --- a/include/eepp/graphics/renderer/renderergl3.hpp +++ b/include/eepp/graphics/renderer/renderergl3.hpp @@ -1,7 +1,7 @@ #ifndef EE_GRAPHICS_CRENDERERGL3_HPP #define EE_GRAPHICS_CRENDERERGL3_HPP -#include +#include #ifdef EE_GL3_ENABLED @@ -16,7 +16,7 @@ namespace Private { class MatrixStack; } -class EE_API RendererGL3 : public Renderer { +class EE_API RendererGL3 : public RendererGLShader { public: RendererGL3(); @@ -32,30 +32,10 @@ class EE_API RendererGL3 : public Renderer { float pointSize(); - void pushMatrix(); - - void popMatrix(); - - void loadIdentity(); - void disable ( unsigned int cap ); void enable( unsigned int cap ); - void translatef( float x, float y, float z ); - - void rotatef( float angle, float x, float y, float z ); - - void scalef( float x, float y, float z ); - - void matrixMode (unsigned int mode); - - void ortho ( float left, float right, float bottom, float top, float zNear, float zFar ); - - void lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ); - - void perspective ( float fovy, float aspect, float zNear, float zFar ); - void enableClientState( unsigned int array ); void disableClientState( unsigned int array ); @@ -80,38 +60,17 @@ class EE_API RendererGL3 : public Renderer { void clip2DPlaneDisable(); - void multMatrixf ( const float *m ); - void clipPlane( unsigned int plane, const double *equation ); - void loadMatrixf( const float *m ); - - void frustum( float left, float right, float bottom, float top, float near_val, float far_val ); - - void getCurrentMatrix( unsigned int mode, float * m ); - - unsigned int getCurrentMatrixMode(); - std::string getBaseVertexShader(); - int project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ); - - int unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ); - void reloadCurrentShader(); protected: - Private::MatrixStack * mStack; - int mProjectionMatrix_id; // cpu-side hook to shader uniform - int mModelViewMatrix_id; // cpu-side hook to shader uniform - int mTextureMatrix_id; // cpu-side hook to shader uniform - unsigned int mCurrentMode; ShaderProgram * mShaders[ EEGL3_SHADERS_COUNT ]; - ShaderProgram * mCurShader; int mAttribsLoc[ EEGL_ARRAY_STATES_COUNT ]; int mAttribsLocStates[ EEGL_ARRAY_STATES_COUNT ]; int mPlanes[ EE_MAX_PLANES ]; int mPlanesStates[ EE_MAX_PLANES ]; - ShaderProgram * mShaderPrev; Int32 mTexActive; int mTexActiveLoc; int mPointSpriteLoc; @@ -123,8 +82,6 @@ class EE_API RendererGL3 : public Renderer { bool mLoaded; std::string mBaseVertexShader; - void updateMatrix(); - void planeStateCheck( bool tryEnable ); void reloadShader( ShaderProgram * Shader ); diff --git a/include/eepp/graphics/renderer/renderergl3cp.hpp b/include/eepp/graphics/renderer/renderergl3cp.hpp index f17e6ff11..9246b0009 100644 --- a/include/eepp/graphics/renderer/renderergl3cp.hpp +++ b/include/eepp/graphics/renderer/renderergl3cp.hpp @@ -1,7 +1,7 @@ #ifndef EE_GRAPHICS_CRENDERERGL3CP_HPP #define EE_GRAPHICS_CRENDERERGL3CP_HPP -#include +#include #ifdef EE_GL3_ENABLED @@ -16,7 +16,7 @@ namespace Private { class MatrixStack; } -class EE_API RendererGL3CP : public Renderer { +class EE_API RendererGL3CP : public RendererGLShader { public: RendererGL3CP(); @@ -32,30 +32,10 @@ class EE_API RendererGL3CP : public Renderer { float pointSize(); - void pushMatrix(); - - void popMatrix(); - - void loadIdentity(); - void disable ( unsigned int cap ); void enable( unsigned int cap ); - void translatef( float x, float y, float z ); - - void rotatef( float angle, float x, float y, float z ); - - void scalef( float x, float y, float z ); - - void matrixMode (unsigned int mode); - - void ortho ( float left, float right, float bottom, float top, float zNear, float zFar ); - - void lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ); - - void perspective ( float fovy, float aspect, float zNear, float zFar ); - void enableClientState( unsigned int array ); void disableClientState( unsigned int array ); @@ -80,57 +60,34 @@ class EE_API RendererGL3CP : public Renderer { void clip2DPlaneDisable(); - void multMatrixf ( const float *m ); - void clipPlane( unsigned int plane, const double *equation ); - void loadMatrixf( const float *m ); - - void frustum( float left, float right, float bottom, float top, float near_val, float far_val ); - - void getCurrentMatrix( unsigned int mode, float * m ); - - unsigned int getCurrentMatrixMode(); - void bindGlobalVAO(); std::string getBaseVertexShader(); - int project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ); - - int unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ); - void reloadCurrentShader(); protected: - Private::MatrixStack * mStack; - int mProjectionMatrix_id; // cpu-side hook to shader uniform - int mModelViewMatrix_id; // cpu-side hook to shader uniform - int mTextureMatrix_id; // cpu-side hook to shader uniform - unsigned int mCurrentMode; ShaderProgram * mShaders[ EEGL3CP_SHADERS_COUNT ]; - ShaderProgram * mCurShader; - unsigned int mVAO; - unsigned int mVBO[ 8 ]; + unsigned int mVAO; + unsigned int mVBO[ 8 ]; int mAttribsLoc[ EEGL_ARRAY_STATES_COUNT ]; int mAttribsLocStates[ EEGL_ARRAY_STATES_COUNT ]; int mPlanes[ EE_MAX_PLANES ]; int mPlanesStates[ EE_MAX_PLANES ]; - ShaderProgram * mShaderPrev; - Int32 mTexActive; + Int32 mTexActive; int mTexActiveLoc; int mPointSpriteLoc; int mClippingEnabledLoc; - float mPointSize; + float mPointSize; int mTextureUnits[ EE_MAX_TEXTURE_UNITS ]; int mTextureUnitsStates[ EE_MAX_TEXTURE_UNITS ]; int mCurActiveTex; - unsigned int mCurTexCoordArray; - Uint32 mVBOSizeAlloc; - Uint32 mBiggestAlloc; - bool mLoaded; - std::string mBaseVertexShader; - - void updateMatrix(); + unsigned int mCurTexCoordArray; + Uint32 mVBOSizeAlloc; + Uint32 mBiggestAlloc; + bool mLoaded; + std::string mBaseVertexShader; void planeStateCheck( bool tryEnable ); diff --git a/include/eepp/graphics/renderer/renderergles2.hpp b/include/eepp/graphics/renderer/renderergles2.hpp index fd5b5b8a5..a7a673cea 100644 --- a/include/eepp/graphics/renderer/renderergles2.hpp +++ b/include/eepp/graphics/renderer/renderergles2.hpp @@ -1,7 +1,7 @@ #ifndef EE_GRAPHICS_CRENDERERGLES2_HPP #define EE_GRAPHICS_CRENDERERGLES2_HPP -#include +#include #ifdef EE_GL3_ENABLED @@ -19,7 +19,7 @@ namespace Private { class MatrixStack; } -class EE_API RendererGLES2 : public Renderer { +class EE_API RendererGLES2 : public RendererGLShader { public: RendererGLES2(); @@ -35,30 +35,10 @@ class EE_API RendererGLES2 : public Renderer { float pointSize(); - void pushMatrix(); - - void popMatrix(); - - void loadIdentity(); - void disable ( unsigned int cap ); void enable( unsigned int cap ); - void translatef( float x, float y, float z ); - - void rotatef( float angle, float x, float y, float z ); - - void scalef( float x, float y, float z ); - - void matrixMode (unsigned int mode); - - void ortho ( float left, float right, float bottom, float top, float zNear, float zFar ); - - void lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ); - - void perspective ( float fovy, float aspect, float zNear, float zFar ); - void enableClientState( unsigned int array ); void disableClientState( unsigned int array ); @@ -83,52 +63,29 @@ class EE_API RendererGLES2 : public Renderer { void clip2DPlaneDisable(); - void multMatrixf ( const float *m ); - void clipPlane( unsigned int plane, const double *equation ); - void loadMatrixf( const float *m ); - - void frustum( float left, float right, float bottom, float top, float near_val, float far_val ); - - void getCurrentMatrix( unsigned int mode, float * m ); - - unsigned int getCurrentMatrixMode(); - std::string getBaseVertexShader(); - int project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ); - - int unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ); - void reloadCurrentShader(); protected: - Private::MatrixStack * mStack; - int mProjectionMatrix_id; // cpu-side hook to shader uniform - int mModelViewMatrix_id; // cpu-side hook to shader uniform - int mTextureMatrix_id; // cpu-side hook to shader uniform - unsigned int mCurrentMode; ShaderProgram * mShaders[ EEGLES2_SHADERS_COUNT ]; - ShaderProgram * mCurShader; int mAttribsLoc[ EEGL_ARRAY_STATES_COUNT ]; int mAttribsLocStates[ EEGL_ARRAY_STATES_COUNT ]; int mPlanes[ EE_MAX_PLANES ]; int mPlanesStates[ EE_MAX_PLANES ]; - ShaderProgram * mShaderPrev; - Int32 mTexActive; + Int32 mTexActive; int mTexActiveLoc; int mClippingEnabledLoc; - float mPointSize; + float mPointSize; int mTextureUnits[ EE_MAX_TEXTURE_UNITS ]; int mTextureUnitsStates[ EE_MAX_TEXTURE_UNITS ]; int mCurActiveTex; - Uint8 mClippingEnabled; - Uint8 mPointSpriteEnabled; - bool mLoaded; - bool mCurShaderLocal; - std::string mBaseVertexShader; - - void updateMatrix(); + Uint8 mClippingEnabled; + Uint8 mPointSpriteEnabled; + bool mLoaded; + bool mCurShaderLocal; + std::string mBaseVertexShader; void planeStateCheck( bool tryEnable ); diff --git a/include/eepp/graphics/renderer/rendererglshader.hpp b/include/eepp/graphics/renderer/rendererglshader.hpp new file mode 100644 index 000000000..44cb18eaf --- /dev/null +++ b/include/eepp/graphics/renderer/rendererglshader.hpp @@ -0,0 +1,65 @@ +#ifndef EE_GRAPHICS_RENDERERGLSHADER_HPP +#define EE_GRAPHICS_RENDERERGLSHADER_HPP + +#include + +namespace EE { namespace Graphics { + +namespace Private { +class MatrixStack; +} + +class EE_API RendererGLShader : public Renderer { + public: + RendererGLShader(); + + ~RendererGLShader(); + + void pushMatrix(); + + void popMatrix(); + + void loadIdentity(); + + void loadMatrixf( const float *m ); + + void translatef( float x, float y, float z ); + + void rotatef( float angle, float x, float y, float z ); + + void scalef( float x, float y, float z ); + + void matrixMode (unsigned int mode); + + void ortho ( float left, float right, float bottom, float top, float zNear, float zFar ); + + void lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ); + + void perspective ( float fovy, float aspect, float zNear, float zFar ); + + void frustum( float left, float right, float bottom, float top, float near_val, float far_val ); + + void getCurrentMatrix( unsigned int mode, float * m ); + + void multMatrixf( const float * m ); + + unsigned int getCurrentMatrixMode(); + + int project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ); + + int unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ); + protected: + Private::MatrixStack * mStack; + int mProjectionMatrix_id; // cpu-side hook to shader uniform + int mModelViewMatrix_id; // cpu-side hook to shader uniform + int mTextureMatrix_id; // cpu-side hook to shader uniform + unsigned int mCurrentMode; + ShaderProgram * mCurShader; + ShaderProgram * mShaderPrev; + + void updateMatrix(); +}; + +}} + +#endif diff --git a/projects/linux/ee.files b/projects/linux/ee.files index 286f6e560..31b247722 100644 --- a/projects/linux/ee.files +++ b/projects/linux/ee.files @@ -23,6 +23,7 @@ ../../include/eepp/graphics/renderer/renderergl3.hpp ../../include/eepp/graphics/renderer/renderergl3cp.hpp ../../include/eepp/graphics/renderer/renderergles2.hpp +../../include/eepp/graphics/renderer/rendererglshader.hpp ../../include/eepp/graphics/renderer/rendererhelper.hpp ../../include/eepp/graphics/rendermode.hpp ../../include/eepp/graphics/text.hpp @@ -74,6 +75,18 @@ ../../src/eepp/graphics/drawableresource.cpp ../../src/eepp/graphics/ninepatch.cpp ../../src/eepp/graphics/ninepatchmanager.cpp +../../src/eepp/graphics/renderer/shaders/base.frag.h +../../src/eepp/graphics/renderer/shaders/base.vert.h +../../src/eepp/graphics/renderer/shaders/basegl3.frag.h +../../src/eepp/graphics/renderer/shaders/basegl3.vert.h +../../src/eepp/graphics/renderer/shaders/basegl3cp.frag.h +../../src/eepp/graphics/renderer/shaders/basegl3cp.vert.h +../../src/eepp/graphics/renderer/shaders/clipped.frag.h +../../src/eepp/graphics/renderer/shaders/clipped.vert.h +../../src/eepp/graphics/renderer/shaders/pointsprite.frag.h +../../src/eepp/graphics/renderer/shaders/pointsprite.vert.h +../../src/eepp/graphics/renderer/shaders/primitive.frag.h +../../src/eepp/graphics/renderer/shaders/primitive.vert.h ../../src/eepp/maps/mapobjectlayer.cpp ../../src/eepp/graphics/arcdrawable.cpp ../../src/eepp/graphics/circledrawable.cpp @@ -94,7 +107,7 @@ ../../src/eepp/graphics/renderer/renderergl3.cpp ../../src/eepp/graphics/renderer/renderergl3cp.cpp ../../src/eepp/graphics/renderer/renderergles2.cpp -../../src/eepp/graphics/renderer/rendererstackhelper.hpp +../../src/eepp/graphics/renderer/rendererglshader.cpp ../../src/eepp/graphics/renderer/rendererstackhelper.hpp ../../src/eepp/graphics/text.cpp ../../src/eepp/math/interpolation1d.cpp @@ -605,21 +618,11 @@ ../../src/examples/empty_window/empty_window.cpp ../../src/test/eetest.hpp ../../src/test/eetest.cpp -../../src/eepp/graphics/renderer/shaders/primitive.vert -../../src/eepp/graphics/renderer/shaders/primitive.frag -../../src/eepp/graphics/renderer/shaders/pointsprite.vert -../../src/eepp/graphics/renderer/shaders/pointsprite.frag -../../src/eepp/graphics/renderer/shaders/clipped.vert -../../src/eepp/graphics/renderer/shaders/clipped.frag -../../src/eepp/graphics/renderer/shaders/base.vert -../../src/eepp/graphics/renderer/shaders/base.frag ../../src/eepp/graphics/renderer/renderergles2.cpp ../../include/eepp/graphics/renderer/renderergles2.hpp ../../include/eepp/ee.hpp ../../include/eepp/config.hpp ../../include/eepp/core.hpp -../../src/eepp/graphics/renderer/shaders/basegl3.vert -../../src/eepp/graphics/renderer/shaders/basegl3.frag ../../src/examples/external_shader/external_shader.cpp ../../include/eepp/window.hpp ../../include/eepp/ui.hpp @@ -754,8 +757,6 @@ ../../include/eepp/ui/uitextinputpassword.hpp ../../src/eepp/graphics/renderer/renderergl3cp.cpp ../../include/eepp/graphics/renderer/renderergl3cp.hpp -../../src/eepp/graphics/renderer/shaders/basegl3cp.vert -../../src/eepp/graphics/renderer/shaders/basegl3cp.frag ../../src/eepp/window/backend/SDL/backendsdl.cpp ../../bin/assets/ee.ini ../../src/eepp/network/ssl/sslsocket.cpp diff --git a/src/eepp/graphics/renderer/renderergl3.cpp b/src/eepp/graphics/renderer/renderergl3.cpp index 5a8c34182..f37f3fd50 100644 --- a/src/eepp/graphics/renderer/renderergl3.cpp +++ b/src/eepp/graphics/renderer/renderergl3.cpp @@ -38,19 +38,18 @@ const char * EEGL3_PLANES_NAME[] = { "dgl_ClipPlane[5]" }; -const GLchar * EEGL3_SHADER_BASE_VS = -#include "shaders/basegl3.vert" +#ifdef EE_GLES2 +const GLchar * GL3_SHADER_HEAD = "precision mediump float;\nprecision lowp int;\n"; +#else +const GLchar * GL3_SHADER_HEAD = "#version 120\n"; +#endif -const GLchar * EEGL3_SHADER_BASE_FS = -#include "shaders/basegl3.frag" +#include "shaders/basegl3.vert.h" + +#include "shaders/basegl3.frag.h" RendererGL3::RendererGL3() : - mProjectionMatrix_id(0), - mModelViewMatrix_id(0), - mTextureMatrix_id(0), - mCurrentMode(0), - mCurShader(NULL), - mShaderPrev(NULL), + RendererGLShader(), mTexActive(1), mTexActiveLoc(-1), mPointSpriteLoc(-1), @@ -63,17 +62,10 @@ RendererGL3::RendererGL3() : mQuadsSupported = false; mQuadVertexs = 6; #endif - - mStack = eeNew( MatrixStack, () ); - mStack->mProjectionMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mModelViewMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mTextureMatrix.push( glm::mat4( 1.0f ) ); // identity matrix - Renderer::enable( GL_VERTEX_PROGRAM_POINT_SIZE ); } RendererGL3::~RendererGL3() { - eeSAFE_DELETE( mStack ); } EEGL_version RendererGL3::version() { @@ -90,8 +82,11 @@ void RendererGL3::init() { Renderer::init(); - std::string vs( EEGL3_SHADER_BASE_VS ); - std::string fs( EEGL3_SHADER_BASE_FS ); + std::string vs( GL3_SHADER_HEAD ); + std::string fs( GL3_SHADER_HEAD ); + + vs += EEGL3_SHADER_BASE_VS; + fs += EEGL3_SHADER_BASE_FS; mBaseVertexShader = vs; @@ -204,6 +199,8 @@ void RendererGL3::setShader( ShaderProgram * Shader ) { unsigned int CM = mCurrentMode; + matrixMode( GL_TEXTURE ); + updateMatrix(); matrixMode( GL_PROJECTION ); updateMatrix(); matrixMode( GL_MODELVIEW ); @@ -427,147 +424,6 @@ void RendererGL3::planeStateCheck( bool tryEnable ) { } } -void RendererGL3::updateMatrix() { - switch ( mCurrentMode ) { - case GL_PROJECTION: - { - if ( -1 != mProjectionMatrix_id ) { - mCurShader->setUniformMatrix( mProjectionMatrix_id, &mStack->mProjectionMatrix.top()[0][0] ); - } - - break; - } - case GL_MODELVIEW: - { - if ( -1 != mModelViewMatrix_id ) { - mCurShader->setUniformMatrix( mModelViewMatrix_id, &mStack->mModelViewMatrix.top()[0][0] ); - } - - break; - } - case GL_TEXTURE: - { - if ( -1 != mTextureMatrix_id ) { - mCurShader->setUniformMatrix( mTextureMatrix_id, &mStack->mTextureMatrix.top()[0][0] ); - } - - break; - } - } -} - -void RendererGL3::pushMatrix() { - mStack->mCurMatrix->push( mStack->mCurMatrix->top() ); - updateMatrix(); -} - -void RendererGL3::popMatrix() { - mStack->mCurMatrix->pop(); - updateMatrix(); -} - -void RendererGL3::loadIdentity() { - mStack->mCurMatrix->top() = glm::mat4(1.0); - updateMatrix(); -} - -void RendererGL3::multMatrixf ( const float * m ) { - mStack->mCurMatrix->top() *= toGLMmat4( m ); - updateMatrix(); -} - -void RendererGL3::translatef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::translate( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3::rotatef( float angle, float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::rotate( angle, glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3::scalef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::scale( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3::ortho( float left, float right, float bottom, float top, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::ortho( left, right, bottom, top , zNear, zFar ); - updateMatrix(); -} - -void RendererGL3::lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ) { - mStack->mCurMatrix->top() *= glm::lookAt( glm::vec3(eyeX, eyeY, eyeZ), glm::vec3(centerX, centerY, centerZ), glm::vec3(upX, upY, upZ) ); - updateMatrix(); -} - -void RendererGL3::perspective ( float fovy, float aspect, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::perspective( fovy, aspect, zNear, zFar ); - updateMatrix(); -} - -void RendererGL3::loadMatrixf( const float * m ) { - mStack->mCurMatrix->top() = toGLMmat4( m ); - updateMatrix(); -} - -void RendererGL3::frustum( float left, float right, float bottom, float top, float near_val, float far_val ) { - mStack->mCurMatrix->top() *= glm::frustum( left, right, bottom, top, near_val, far_val ); - updateMatrix(); -} - -void RendererGL3::getCurrentMatrix( unsigned int mode, float * m ) { - switch ( mode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - fromGLMmat4( mStack->mProjectionMatrix.top(), m ); - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - fromGLMmat4( mStack->mModelViewMatrix.top(), m ); - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - fromGLMmat4( mStack->mTextureMatrix.top(), m ); - break; - } - } -} - -unsigned int RendererGL3::getCurrentMatrixMode() { - return mCurrentMode; -} - -void RendererGL3::matrixMode(unsigned int mode) { - mCurrentMode = mode; - - switch ( mCurrentMode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - mStack->mCurMatrix = &mStack->mProjectionMatrix; - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - mStack->mCurMatrix = &mStack->mModelViewMatrix; - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - mStack->mCurMatrix = &mStack->mTextureMatrix; - break; - } - } -} - void RendererGL3::clip2DPlaneEnable( const Int32& x, const Int32& y, const Int32& Width, const Int32& Height ) { Rectf r( x, y, x + Width, y + Height ); @@ -641,36 +497,6 @@ std::string RendererGL3::getBaseVertexShader() { return mBaseVertexShader; } -int RendererGL3::project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ) { - glm::vec3 tv3( glm::project( glm::vec3( objx, objy, objz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != winx ) - *winx = tv3.x; - - if ( NULL != winy ) - *winy = tv3.y; - - if ( NULL != winz ) - *winz = tv3.z; - - return GL_TRUE; -} - -int RendererGL3::unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ) { - glm::vec3 tv3( glm::unProject( glm::vec3( winx, winy, winz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != objx ) - *objx = tv3.x; - - if ( NULL != objy ) - *objy = tv3.y; - - if ( NULL != objz ) - *objz = tv3.z; - - return GL_TRUE; -} - }} #endif diff --git a/src/eepp/graphics/renderer/renderergl3cp.cpp b/src/eepp/graphics/renderer/renderergl3cp.cpp index 6f7aa7869..5674e9cc1 100644 --- a/src/eepp/graphics/renderer/renderergl3cp.cpp +++ b/src/eepp/graphics/renderer/renderergl3cp.cpp @@ -40,31 +40,28 @@ const char * EEGL3CP_PLANES_NAME[] = { "dgl_ClipPlane[5]" }; +#ifdef EE_GLES2 +const GLchar * GL3CP_SHADER_HEAD = "precision mediump float;\nprecision lowp int;\n"; +#else +const GLchar * GL3CP_SHADER_HEAD = "#version 330\n"; +#endif + #if !defined( EE_GLES2 ) -const GLchar * EEGL3CP_SHADER_BASE_VS = -#include "shaders/basegl3cp.vert" +#include "shaders/basegl3cp.vert.h" -const GLchar * EEGL3CP_SHADER_BASE_FS = -#include "shaders/basegl3cp.frag" +#include "shaders/basegl3cp.frag.h" #else -const GLchar * EEGL3CP_SHADER_BASE_VS = -#include "shaders/basegl3.vert" +#include "shaders/basegl3.vert.h" -const GLchar * EEGL3CP_SHADER_BASE_FS = -#include "shaders/basegl3.frag" +#include "shaders/basegl3.frag.h" #endif RendererGL3CP::RendererGL3CP() : - mProjectionMatrix_id(0), - mModelViewMatrix_id(0), - mTextureMatrix_id(0), - mCurrentMode(0), - mCurShader(NULL), - mShaderPrev(NULL), + RendererGLShader(), mTexActive(1), mTexActiveLoc(-1), mPointSpriteLoc(-1), @@ -77,11 +74,6 @@ RendererGL3CP::RendererGL3CP() : { mQuadsSupported = false; mQuadVertexs = 6; - - mStack = eeNew( MatrixStack, () ); - mStack->mProjectionMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mModelViewMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mTextureMatrix.push( glm::mat4( 1.0f ) ); // identity matrix } RendererGL3CP::~RendererGL3CP() { @@ -93,8 +85,6 @@ RendererGL3CP::~RendererGL3CP() { deleteVertexArrays( 1, &mVAO ); - eeSAFE_DELETE( mStack ); - #ifdef EE_DEBUG Log::instance()->write( "Biggest VBO allocation on GL3 Renderer: " + FileSystem::sizeToString( mBiggestAlloc ) ); #endif @@ -114,8 +104,16 @@ void RendererGL3CP::init() { Renderer::init(); - std::string vs( EEGL3CP_SHADER_BASE_VS ); - std::string fs( EEGL3CP_SHADER_BASE_FS ); + std::string vs( GL3CP_SHADER_HEAD ); + std::string fs( GL3CP_SHADER_HEAD ); + + #if !defined( EE_GLES2 ) + vs += EEGL3CP_SHADER_BASE_VS; + fs += EEGL3CP_SHADER_BASE_FS; + #else + vs += EEGL3_SHADER_BASE_VS; + fs += EEGL3_SHADER_BASE_FS; + #endif mBaseVertexShader = vs; @@ -231,6 +229,8 @@ void RendererGL3CP::setShader( ShaderProgram * Shader ) { unsigned int CM = mCurrentMode; + matrixMode( GL_TEXTURE ); + updateMatrix(); matrixMode( GL_PROJECTION ); updateMatrix(); matrixMode( GL_MODELVIEW ); @@ -497,147 +497,6 @@ void RendererGL3CP::planeStateCheck( bool tryEnable ) { } } -void RendererGL3CP::updateMatrix() { - switch ( mCurrentMode ) { - case GL_PROJECTION: - { - if ( -1 != mProjectionMatrix_id ) { - mCurShader->setUniformMatrix( mProjectionMatrix_id, &mStack->mProjectionMatrix.top()[0][0] ); - } - - break; - } - case GL_MODELVIEW: - { - if ( -1 != mModelViewMatrix_id ) { - mCurShader->setUniformMatrix( mModelViewMatrix_id, &mStack->mModelViewMatrix.top()[0][0] ); - } - - break; - } - case GL_TEXTURE: - { - if ( -1 != mTextureMatrix_id ) { - mCurShader->setUniformMatrix( mTextureMatrix_id, &mStack->mTextureMatrix.top()[0][0] ); - } - - break; - } - } -} - -void RendererGL3CP::pushMatrix() { - mStack->mCurMatrix->push( mStack->mCurMatrix->top() ); - updateMatrix(); -} - -void RendererGL3CP::popMatrix() { - mStack->mCurMatrix->pop(); - updateMatrix(); -} - -void RendererGL3CP::loadIdentity() { - mStack->mCurMatrix->top() = glm::mat4(1.0); - updateMatrix(); -} - -void RendererGL3CP::multMatrixf ( const float * m ) { - mStack->mCurMatrix->top() *= toGLMmat4( m ); - updateMatrix(); -} - -void RendererGL3CP::translatef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::translate( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3CP::rotatef( float angle, float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::rotate( angle, glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3CP::scalef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::scale( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGL3CP::ortho( float left, float right, float bottom, float top, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::ortho( left, right, bottom, top , zNear, zFar ); - updateMatrix(); -} - -void RendererGL3CP::lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ) { - mStack->mCurMatrix->top() *= glm::lookAt( glm::vec3(eyeX, eyeY, eyeZ), glm::vec3(centerX, centerY, centerZ), glm::vec3(upX, upY, upZ) ); - updateMatrix(); -} - -void RendererGL3CP::perspective ( float fovy, float aspect, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::perspective( fovy, aspect, zNear, zFar ); - updateMatrix(); -} - -void RendererGL3CP::loadMatrixf( const float * m ) { - mStack->mCurMatrix->top() = toGLMmat4( m ); - updateMatrix(); -} - -void RendererGL3CP::frustum( float left, float right, float bottom, float top, float near_val, float far_val ) { - mStack->mCurMatrix->top() *= glm::frustum( left, right, bottom, top, near_val, far_val ); - updateMatrix(); -} - -void RendererGL3CP::getCurrentMatrix( unsigned int mode, float * m ) { - switch ( mode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - fromGLMmat4( mStack->mProjectionMatrix.top(), m ); - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - fromGLMmat4( mStack->mModelViewMatrix.top(), m ); - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - fromGLMmat4( mStack->mTextureMatrix.top(), m ); - break; - } - } -} - -unsigned int RendererGL3CP::getCurrentMatrixMode() { - return mCurrentMode; -} - -void RendererGL3CP::matrixMode(unsigned int mode) { - mCurrentMode = mode; - - switch ( mCurrentMode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - mStack->mCurMatrix = &mStack->mProjectionMatrix; - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - mStack->mCurMatrix = &mStack->mModelViewMatrix; - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - mStack->mCurMatrix = &mStack->mTextureMatrix; - break; - } - } -} - void RendererGL3CP::clip2DPlaneEnable( const Int32& x, const Int32& y, const Int32& Width, const Int32& Height ) { Rectf r( x, y, x + Width, y + Height ); @@ -719,36 +578,6 @@ std::string RendererGL3CP::getBaseVertexShader() { return mBaseVertexShader; } -int RendererGL3CP::project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ) { - glm::vec3 tv3( glm::project( glm::vec3( objx, objy, objz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != winx ) - *winx = tv3.x; - - if ( NULL != winy ) - *winy = tv3.y; - - if ( NULL != winz ) - *winz = tv3.z; - - return GL_TRUE; -} - -int RendererGL3CP::unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ) { - glm::vec3 tv3( glm::unProject( glm::vec3( winx, winy, winz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != objx ) - *objx = tv3.x; - - if ( NULL != objy ) - *objy = tv3.y; - - if ( NULL != objz ) - *objz = tv3.z; - - return GL_TRUE; -} - void RendererGL3CP::bindGlobalVAO() { bindVertexArray( mVAO ); } diff --git a/src/eepp/graphics/renderer/renderergles2.cpp b/src/eepp/graphics/renderer/renderergles2.cpp index 7f3fd8f70..d1af4fe36 100644 --- a/src/eepp/graphics/renderer/renderergles2.cpp +++ b/src/eepp/graphics/renderer/renderergles2.cpp @@ -38,38 +38,26 @@ const char * EEGLES2_PLANES_NAMENABLED_NAME[] = { "dgl_ClipPlane[5]" }; -const GLchar * EEGLES2_SHADER_BASE_VS = -#include "shaders/base.vert" +#ifdef EE_GLES2 +const GLchar * GLES2_SHADER_HEAD = "precision mediump float;\nprecision lowp int;\n"; +#else +const GLchar * GLES2_SHADER_HEAD = "#version 120\n"; +#endif -const GLchar * EEGLES2_SHADER_BASE_FS = -#include "shaders/base.frag" +#include "shaders/base.vert.h" +#include "shaders/base.frag.h" -const GLchar * EEGLES2_SHADER_CLIPPED_VS = -#include "shaders/clipped.vert" +#include "shaders/clipped.vert.h" +#include "shaders/clipped.frag.h" -const GLchar * EEGLES2_SHADER_CLIPPED_FS = -#include "shaders/clipped.frag" +#include "shaders/pointsprite.vert.h" +#include "shaders/pointsprite.frag.h" -const GLchar * EEGLES2_SHADER_POINTSPRITE_VS = -#include "shaders/pointsprite.vert" - -const GLchar * EEGLES2_SHADER_POINTSPRITE_FS = -#include "shaders/pointsprite.frag" - -const GLchar * EEGLES2_SHADER_PRIMITIVE_VS = -#include "shaders/primitive.vert" - -const GLchar * EEGLES2_SHADER_PRIMITIVE_FS = -#include "shaders/primitive.frag" +#include "shaders/primitive.vert.h" +#include "shaders/primitive.frag.h" RendererGLES2::RendererGLES2() : - mStack( eeNew( MatrixStack, () ) ), - mProjectionMatrix_id(0), - mModelViewMatrix_id(0), - mTextureMatrix_id(0), - mCurrentMode(0), - mCurShader(NULL), - mShaderPrev(NULL), + RendererGLShader(), mTexActive(1), mTexActiveLoc(-1), mClippingEnabledLoc(-1), @@ -82,14 +70,9 @@ RendererGLES2::RendererGLES2() : { mQuadsSupported = false; mQuadVertexs = 6; - - mStack->mProjectionMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mModelViewMatrix.push ( glm::mat4( 1.0f ) ); // identity matrix - mStack->mTextureMatrix.push( glm::mat4( 1.0f ) ); // identity matrix } RendererGLES2::~RendererGLES2() { - eeSAFE_DELETE( mStack ); } EEGL_version RendererGLES2::version() { @@ -106,8 +89,9 @@ void RendererGLES2::init() { Renderer::init(); - std::string vs( EEGLES2_SHADER_BASE_VS ); - std::string fs( EEGLES2_SHADER_BASE_FS ); + std::string hs( GLES2_SHADER_HEAD ); + std::string vs( hs + EEGLES2_SHADER_BASE_VS ); + std::string fs( hs + EEGLES2_SHADER_BASE_FS ); mBaseVertexShader = vs; @@ -131,20 +115,20 @@ void RendererGLES2::init() { mShaders[ EEGLES2_SHADER_BASE ] = ShaderProgram::New( vs.c_str(), vs.size(), fs.c_str(), fs.size() ); mShaders[ EEGLES2_SHADER_BASE ]->setReloadCb( cb::Make1( this, &RendererGLES2::reloadShader ) ); - vs = EEGLES2_SHADER_CLIPPED_VS; - fs = EEGLES2_SHADER_CLIPPED_FS; + vs = hs + EEGLES2_SHADER_CLIPPED_VS; + fs = hs + EEGLES2_SHADER_CLIPPED_FS; mShaders[ EEGLES2_SHADER_CLIPPED ] = ShaderProgram::New( vs.c_str(), vs.size(), fs.c_str(), fs.size() ); mShaders[ EEGLES2_SHADER_CLIPPED ]->setReloadCb( cb::Make1( this, &RendererGLES2::reloadShader ) ); - vs = EEGLES2_SHADER_POINTSPRITE_VS; - fs = EEGLES2_SHADER_POINTSPRITE_FS; + vs = hs + EEGLES2_SHADER_POINTSPRITE_VS; + fs = hs + EEGLES2_SHADER_POINTSPRITE_FS; mShaders[ EEGLES2_SHADER_POINTSPRITE ] = ShaderProgram::New( vs.c_str(), vs.size(), fs.c_str(), fs.size() ); mShaders[ EEGLES2_SHADER_POINTSPRITE ]->setReloadCb( cb::Make1( this, &RendererGLES2::reloadShader ) ); - vs = EEGLES2_SHADER_PRIMITIVE_VS; - fs = EEGLES2_SHADER_PRIMITIVE_FS; + vs = hs + EEGLES2_SHADER_PRIMITIVE_VS; + fs = hs + EEGLES2_SHADER_PRIMITIVE_FS; mShaders[ EEGLES2_SHADER_PRIMITIVE ] = ShaderProgram::New( vs.c_str(), vs.size(), fs.c_str(), fs.size() ); mShaders[ EEGLES2_SHADER_PRIMITIVE ]->setReloadCb( cb::Make1( this, &RendererGLES2::reloadShader ) ); @@ -255,6 +239,8 @@ void RendererGLES2::setShader( ShaderProgram * Shader ) { unsigned int CM = mCurrentMode; + matrixMode( GL_TEXTURE ); + updateMatrix(); matrixMode( GL_PROJECTION ); updateMatrix(); matrixMode( GL_MODELVIEW ); @@ -511,147 +497,6 @@ void RendererGLES2::planeStateCheck( bool tryEnable ) { } } -void RendererGLES2::updateMatrix() { - switch ( mCurrentMode ) { - case GL_PROJECTION: - { - if ( -1 != mProjectionMatrix_id ) { - mCurShader->setUniformMatrix( mProjectionMatrix_id, &mStack->mProjectionMatrix.top()[0][0] ); - } - - break; - } - case GL_MODELVIEW: - { - if ( -1 != mModelViewMatrix_id ) { - mCurShader->setUniformMatrix( mModelViewMatrix_id, &mStack->mModelViewMatrix.top()[0][0] ); - } - - break; - } - case GL_TEXTURE: - { - if ( -1 != mTextureMatrix_id ) { - mCurShader->setUniformMatrix( mTextureMatrix_id, &mStack->mTextureMatrix.top()[0][0] ); - } - - break; - } - } -} - -void RendererGLES2::pushMatrix() { - mStack->mCurMatrix->push( mStack->mCurMatrix->top() ); - updateMatrix(); -} - -void RendererGLES2::popMatrix() { - mStack->mCurMatrix->pop(); - updateMatrix(); -} - -void RendererGLES2::loadIdentity() { - mStack->mCurMatrix->top() = glm::mat4(1.0); - updateMatrix(); -} - -void RendererGLES2::multMatrixf ( const float * m ) { - mStack->mCurMatrix->top() *= toGLMmat4( m ); - updateMatrix(); -} - -void RendererGLES2::translatef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::translate( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGLES2::rotatef( float angle, float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::rotate( angle, glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGLES2::scalef( float x, float y, float z ) { - mStack->mCurMatrix->top() *= glm::scale( glm::vec3( x, y, z ) ); - updateMatrix(); -} - -void RendererGLES2::ortho( float left, float right, float bottom, float top, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::ortho( left, right, bottom, top , zNear, zFar ); - updateMatrix(); -} - -void RendererGLES2::lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ) { - mStack->mCurMatrix->top() *= glm::lookAt( glm::vec3(eyeX, eyeY, eyeZ), glm::vec3(centerX, centerY, centerZ), glm::vec3(upX, upY, upZ) ); - updateMatrix(); -} - -void RendererGLES2::perspective( float fovy, float aspect, float zNear, float zFar ) { - mStack->mCurMatrix->top() *= glm::perspective( fovy, aspect, zNear, zFar ); - updateMatrix(); -} - -void RendererGLES2::loadMatrixf( const float * m ) { - mStack->mCurMatrix->top() = toGLMmat4( m ); - updateMatrix(); -} - -void RendererGLES2::frustum( float left, float right, float bottom, float top, float near_val, float far_val ) { - mStack->mCurMatrix->top() *= glm::frustum( left, right, bottom, top, near_val, far_val ); - updateMatrix(); -} - -void RendererGLES2::getCurrentMatrix( unsigned int mode, float * m ) { - switch ( mode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - fromGLMmat4( mStack->mProjectionMatrix.top(), m ); - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - fromGLMmat4( mStack->mModelViewMatrix.top(), m ); - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - fromGLMmat4( mStack->mTextureMatrix.top(), m ); - break; - } - } -} - -unsigned int RendererGLES2::getCurrentMatrixMode() { - return mCurrentMode; -} - -void RendererGLES2::matrixMode(unsigned int mode) { - mCurrentMode = mode; - - switch ( mCurrentMode ) { - case GL_PROJECTION: - case GL_PROJECTION_MATRIX: - { - mStack->mCurMatrix = &mStack->mProjectionMatrix; - break; - } - case GL_MODELVIEW: - case GL_MODELVIEW_MATRIX: - { - mStack->mCurMatrix = &mStack->mModelViewMatrix; - break; - } - case GL_TEXTURE: - case GL_TEXTURE_MATRIX: - { - mStack->mCurMatrix = &mStack->mTextureMatrix; - break; - } - } -} - void RendererGLES2::clip2DPlaneEnable( const Int32& x, const Int32& y, const Int32& Width, const Int32& Height ) { Rectf r( x, y, x + Width, y + Height ); @@ -729,36 +574,6 @@ std::string RendererGLES2::getBaseVertexShader() { return mBaseVertexShader; } -int RendererGLES2::project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ) { - glm::vec3 tv3( glm::project( glm::vec3( objx, objy, objz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != winx ) - *winx = tv3.x; - - if ( NULL != winy ) - *winy = tv3.y; - - if ( NULL != winz ) - *winz = tv3.z; - - return GL_TRUE; -} - -int RendererGLES2::unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ) { - glm::vec3 tv3( glm::unProject( glm::vec3( winx, winy, winz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); - - if ( NULL != objx ) - *objx = tv3.x; - - if ( NULL != objy ) - *objy = tv3.y; - - if ( NULL != objz ) - *objz = tv3.z; - - return GL_TRUE; -} - }} #endif diff --git a/src/eepp/graphics/renderer/rendererglshader.cpp b/src/eepp/graphics/renderer/rendererglshader.cpp new file mode 100644 index 000000000..8756a50fa --- /dev/null +++ b/src/eepp/graphics/renderer/rendererglshader.cpp @@ -0,0 +1,198 @@ +#include +#include +#include +#include + +namespace EE { namespace Graphics { + +RendererGLShader::RendererGLShader() : + mProjectionMatrix_id(0), + mModelViewMatrix_id(0), + mTextureMatrix_id(0), + mCurrentMode(0), + mCurShader(NULL), + mShaderPrev(NULL) +{ + mStack = eeNew( Private::MatrixStack, () ); + mStack->mProjectionMatrix.push( glm::mat4( 1.0f ) ); // identity matrix + mStack->mModelViewMatrix.push( glm::mat4( 1.0f ) ); // identity matrix + mStack->mTextureMatrix.push( glm::mat4( 1.0f ) ); // identity matrix +} + +RendererGLShader::~RendererGLShader() { + eeSAFE_DELETE( mStack ); +} + +void RendererGLShader::updateMatrix() { + switch ( mCurrentMode ) { + case GL_PROJECTION: + { + if ( -1 != mProjectionMatrix_id ) { + mCurShader->setUniformMatrix( mProjectionMatrix_id, &mStack->mProjectionMatrix.top()[0][0] ); + } + + break; + } + case GL_MODELVIEW: + { + if ( -1 != mModelViewMatrix_id ) { + mCurShader->setUniformMatrix( mModelViewMatrix_id, &mStack->mModelViewMatrix.top()[0][0] ); + } + + break; + } + case GL_TEXTURE: + { + if ( -1 != mTextureMatrix_id ) { + mCurShader->setUniformMatrix( mTextureMatrix_id, &mStack->mTextureMatrix.top()[0][0] ); + } + + break; + } + } +} + +void RendererGLShader::pushMatrix() { + mStack->mCurMatrix->push( mStack->mCurMatrix->top() ); + updateMatrix(); +} + +void RendererGLShader::popMatrix() { + mStack->mCurMatrix->pop(); + updateMatrix(); +} + +void RendererGLShader::loadIdentity() { + mStack->mCurMatrix->top() = glm::mat4(1.0); + updateMatrix(); +} + +void RendererGLShader::multMatrixf ( const float * m ) { + mStack->mCurMatrix->top() *= toGLMmat4( m ); + updateMatrix(); +} + +void RendererGLShader::translatef( float x, float y, float z ) { + mStack->mCurMatrix->top() *= glm::translate( glm::vec3( x, y, z ) ); + updateMatrix(); +} + +void RendererGLShader::rotatef( float angle, float x, float y, float z ) { + mStack->mCurMatrix->top() *= glm::rotate( angle, glm::vec3( x, y, z ) ); + updateMatrix(); +} + +void RendererGLShader::scalef( float x, float y, float z ) { + mStack->mCurMatrix->top() *= glm::scale( glm::vec3( x, y, z ) ); + updateMatrix(); +} + +void RendererGLShader::ortho( float left, float right, float bottom, float top, float zNear, float zFar ) { + mStack->mCurMatrix->top() *= glm::ortho( left, right, bottom, top , zNear, zFar ); + updateMatrix(); +} + +void RendererGLShader::lookAt( float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ ) { + mStack->mCurMatrix->top() *= glm::lookAt( glm::vec3(eyeX, eyeY, eyeZ), glm::vec3(centerX, centerY, centerZ), glm::vec3(upX, upY, upZ) ); + updateMatrix(); +} + +void RendererGLShader::perspective( float fovy, float aspect, float zNear, float zFar ) { + mStack->mCurMatrix->top() *= glm::perspective( fovy, aspect, zNear, zFar ); + updateMatrix(); +} + +void RendererGLShader::loadMatrixf( const float * m ) { + mStack->mCurMatrix->top() = toGLMmat4( m ); + updateMatrix(); +} + +void RendererGLShader::frustum( float left, float right, float bottom, float top, float near_val, float far_val ) { + mStack->mCurMatrix->top() *= glm::frustum( left, right, bottom, top, near_val, far_val ); + updateMatrix(); +} + +void RendererGLShader::getCurrentMatrix( unsigned int mode, float * m ) { + switch ( mode ) { + case GL_PROJECTION: + case GL_PROJECTION_MATRIX: + { + fromGLMmat4( mStack->mProjectionMatrix.top(), m ); + break; + } + case GL_MODELVIEW: + case GL_MODELVIEW_MATRIX: + { + fromGLMmat4( mStack->mModelViewMatrix.top(), m ); + break; + } + case GL_TEXTURE: + case GL_TEXTURE_MATRIX: + { + fromGLMmat4( mStack->mTextureMatrix.top(), m ); + break; + } + } +} + +unsigned int RendererGLShader::getCurrentMatrixMode() { + return mCurrentMode; +} + +void RendererGLShader::matrixMode(unsigned int mode) { + mCurrentMode = mode; + + switch ( mCurrentMode ) { + case GL_PROJECTION: + case GL_PROJECTION_MATRIX: + { + mStack->mCurMatrix = &mStack->mProjectionMatrix; + break; + } + case GL_MODELVIEW: + case GL_MODELVIEW_MATRIX: + { + mStack->mCurMatrix = &mStack->mModelViewMatrix; + break; + } + case GL_TEXTURE: + case GL_TEXTURE_MATRIX: + { + mStack->mCurMatrix = &mStack->mTextureMatrix; + break; + } + } +} + +int RendererGLShader::project( float objx, float objy, float objz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *winx, float *winy, float *winz ) { + glm::vec3 tv3( glm::project( glm::vec3( objx, objy, objz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); + + if ( NULL != winx ) + *winx = tv3.x; + + if ( NULL != winy ) + *winy = tv3.y; + + if ( NULL != winz ) + *winz = tv3.z; + + return GL_TRUE; +} + +int RendererGLShader::unProject( float winx, float winy, float winz, const float modelMatrix[16], const float projMatrix[16], const int viewport[4], float *objx, float *objy, float *objz ) { + glm::vec3 tv3( glm::unProject( glm::vec3( winx, winy, winz ), toGLMmat4( modelMatrix ), toGLMmat4( projMatrix ), glm::vec4( viewport[0], viewport[1], viewport[2], viewport[3] ) ) ); + + if ( NULL != objx ) + *objx = tv3.x; + + if ( NULL != objy ) + *objy = tv3.y; + + if ( NULL != objz ) + *objz = tv3.z; + + return GL_TRUE; +} + +}} + diff --git a/src/eepp/graphics/renderer/rendererstackhelper.hpp b/src/eepp/graphics/renderer/rendererstackhelper.hpp index e4f40a965..9b55b334e 100644 --- a/src/eepp/graphics/renderer/rendererstackhelper.hpp +++ b/src/eepp/graphics/renderer/rendererstackhelper.hpp @@ -3,18 +3,16 @@ #include -#ifdef EE_GL3_ENABLED - #include #include namespace EE { namespace Graphics { namespace Private { -static void fromGLMmat4( glm::mat4 from, float * to ) { +static inline void fromGLMmat4( glm::mat4 from, float * to ) { memcpy( to, &from[0][0], sizeof(glm::mat4) ); } -static glm::mat4 toGLMmat4( const float * m ) { +static inline glm::mat4 toGLMmat4( const float * m ) { glm::mat4 Result; memcpy( &Result[0][0], m, sizeof(glm::mat4)); return Result; @@ -34,5 +32,3 @@ class MatrixStack using namespace EE::Graphics::Private; #endif - -#endif diff --git a/src/eepp/graphics/renderer/shaders/base.frag b/src/eepp/graphics/renderer/shaders/base.frag deleted file mode 100644 index b74c9cb33..000000000 --- a/src/eepp/graphics/renderer/shaders/base.frag +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"uniform sampler2D textureUnit0;\n\ -varying vec4 dgl_Color;\n\ -#ifndef GL_ES\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -#else\n\ -varying mediump vec4 dgl_TexCoord[ 1 ];\n\ -#endif\n\ -void main(void)\n\ -{\n\ - gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy );\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/base.frag.h b/src/eepp/graphics/renderer/shaders/base.frag.h new file mode 100644 index 000000000..6fc76c4a8 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/base.frag.h @@ -0,0 +1,14 @@ + +const GLchar * EEGLES2_SHADER_BASE_FS = R"( +uniform sampler2D textureUnit0; +varying vec4 dgl_Color; +#ifndef GL_ES +varying vec4 dgl_TexCoord[ 1 ]; +#else +varying mediump vec4 dgl_TexCoord[ 1 ]; +#endif +void main(void) +{ + gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/base.vert b/src/eepp/graphics/renderer/shaders/base.vert deleted file mode 100644 index 4539cec31..000000000 --- a/src/eepp/graphics/renderer/shaders/base.vert +++ /dev/null @@ -1,25 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -uniform mat4 dgl_TextureMatrix;\n\ -attribute vec4 dgl_Vertex;\n\ -attribute vec4 dgl_FrontColor;\n\ -attribute vec4 dgl_MultiTexCoord0;\n\ -varying vec4 dgl_Color;\n\ -#ifndef GL_ES\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -#else\n\ -varying mediump vec4 dgl_TexCoord[ 1 ];\n\ -#endif\n\ -void main(void)\n\ -{\n\ - dgl_Color = dgl_FrontColor;\n\ - dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0;\n\ - gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex );\n\ -}\n\ -"; diff --git a/src/eepp/graphics/renderer/shaders/base.vert.h b/src/eepp/graphics/renderer/shaders/base.vert.h new file mode 100644 index 000000000..6de6f2765 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/base.vert.h @@ -0,0 +1,21 @@ + +const GLchar * EEGLES2_SHADER_BASE_VS = R"( +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +uniform mat4 dgl_TextureMatrix; +attribute vec4 dgl_Vertex; +attribute vec4 dgl_FrontColor; +attribute vec4 dgl_MultiTexCoord0; +varying vec4 dgl_Color; +#ifndef GL_ES +varying vec4 dgl_TexCoord[ 1 ]; +#else +varying mediump vec4 dgl_TexCoord[ 1 ]; +#endif +void main(void) +{ + dgl_Color = dgl_FrontColor; + dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0; + gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3.frag b/src/eepp/graphics/renderer/shaders/basegl3.frag deleted file mode 100644 index 4a705d549..000000000 --- a/src/eepp/graphics/renderer/shaders/basegl3.frag +++ /dev/null @@ -1,34 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform sampler2D textureUnit0;\n\ -uniform int dgl_TexActive;\n\ -uniform int dgl_PointSpriteActive;\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -varying vec4 dgl_Color;\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -varying float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -void main(void)\n\ -{\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - if ( dgl_ClipDistance[i] < 0.0 )\n\ - discard;\n\ - }\n\ - }\n\ - if ( 0 == dgl_PointSpriteActive ) {\n\ - if ( 1 == dgl_TexActive )\n\ - gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy );\n\ - else\n\ - gl_FragColor = dgl_Color;\n\ - } else\n\ - gl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord );\n\ -}\n\ -"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3.frag.h b/src/eepp/graphics/renderer/shaders/basegl3.frag.h new file mode 100644 index 000000000..b169b9b64 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/basegl3.frag.h @@ -0,0 +1,30 @@ + +const GLchar * EEGL3_SHADER_BASE_FS = R"( +#define MAX_CLIP_PLANES 6 +uniform sampler2D textureUnit0; +uniform int dgl_TexActive; +uniform int dgl_PointSpriteActive; +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +varying vec4 dgl_Color; +varying vec4 dgl_TexCoord[ 1 ]; +varying float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +void main(void) +{ + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + if ( dgl_ClipDistance[i] < 0.0 ) + discard; + } + } + if ( 0 == dgl_PointSpriteActive ) { + if ( 1 == dgl_TexActive ) + gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy ); + else + gl_FragColor = dgl_Color; + } else + gl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3.vert b/src/eepp/graphics/renderer/shaders/basegl3.vert deleted file mode 100644 index b71326ae4..000000000 --- a/src/eepp/graphics/renderer/shaders/basegl3.vert +++ /dev/null @@ -1,35 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -uniform mat4 dgl_TextureMatrix;\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -uniform float dgl_PointSize;\n\ -attribute vec4 dgl_Vertex;\n\ -attribute vec4 dgl_FrontColor;\n\ -attribute vec4 dgl_MultiTexCoord0;\n\ -varying vec4 dgl_Color;\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -varying float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -void main(void)\n\ -{\n\ - gl_PointSize = dgl_PointSize;\n\ - dgl_Color = dgl_FrontColor;\n\ - dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0;\n\ - vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex;\n\ - gl_Position = dgl_ProjectionMatrix * vEye;\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] );\n\ - }\n\ - }\n\ -}\n\ -"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3.vert.h b/src/eepp/graphics/renderer/shaders/basegl3.vert.h new file mode 100644 index 000000000..f14fea2f3 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/basegl3.vert.h @@ -0,0 +1,31 @@ + +const GLchar * EEGL3_SHADER_BASE_VS = R"( +#define MAX_CLIP_PLANES 6 +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +uniform mat4 dgl_TextureMatrix; +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +uniform float dgl_PointSize; +attribute vec4 dgl_Vertex; +attribute vec4 dgl_FrontColor; +attribute vec4 dgl_MultiTexCoord0; +varying vec4 dgl_Color; +varying vec4 dgl_TexCoord[ 1 ]; +varying float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +void main(void) +{ + gl_PointSize = dgl_PointSize; + dgl_Color = dgl_FrontColor; + dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0; + vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex; + gl_Position = dgl_ProjectionMatrix * vEye; + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] ); + } + } +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3cp.frag b/src/eepp/graphics/renderer/shaders/basegl3cp.frag deleted file mode 100644 index 01a8ab881..000000000 --- a/src/eepp/graphics/renderer/shaders/basegl3cp.frag +++ /dev/null @@ -1,35 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 330\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform sampler2D textureUnit0;\n\ -uniform int dgl_TexActive;\n\ -uniform int dgl_PointSpriteActive;\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -in vec4 dgl_Color;\n\ -in vec4 dgl_TexCoord[ 1 ];\n\ -in float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -out vec4 dgl_FragColor;\n\ -void main(void)\n\ -{\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - if ( dgl_ClipDistance[i] < 0.0 )\n\ - discard;\n\ - }\n\ - }\n\ - if ( 0 == dgl_PointSpriteActive ) {\n\ - if ( 1 == dgl_TexActive )\n\ - dgl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy );\n\ - else\n\ - dgl_FragColor = dgl_Color;\n\ - } else\n\ - dgl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord );\n\ -}\n\ -"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3cp.frag.h b/src/eepp/graphics/renderer/shaders/basegl3cp.frag.h new file mode 100644 index 000000000..e47d4c71e --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/basegl3cp.frag.h @@ -0,0 +1,31 @@ + +const GLchar * EEGL3CP_SHADER_BASE_FS = R"( +#define MAX_CLIP_PLANES 6 +uniform sampler2D textureUnit0; +uniform int dgl_TexActive; +uniform int dgl_PointSpriteActive; +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +in vec4 dgl_Color; +in vec4 dgl_TexCoord[ 1 ]; +in float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +out vec4 dgl_FragColor; +void main(void) +{ + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + if ( dgl_ClipDistance[i] < 0.0 ) + discard; + } + } + if ( 0 == dgl_PointSpriteActive ) { + if ( 1 == dgl_TexActive ) + dgl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy ); + else + dgl_FragColor = dgl_Color; + } else + dgl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3cp.vert b/src/eepp/graphics/renderer/shaders/basegl3cp.vert deleted file mode 100644 index 7be053914..000000000 --- a/src/eepp/graphics/renderer/shaders/basegl3cp.vert +++ /dev/null @@ -1,35 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 330\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -uniform mat4 dgl_TextureMatrix;\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -uniform float dgl_PointSize;\n\ -in vec4 dgl_Vertex;\n\ -in vec4 dgl_FrontColor;\n\ -in vec4 dgl_MultiTexCoord0;\n\ -out vec4 dgl_Color;\n\ -out vec4 dgl_TexCoord[ 1 ];\n\ -out float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -void main(void)\n\ -{\n\ - gl_PointSize = dgl_PointSize;\n\ - dgl_Color = dgl_FrontColor;\n\ - dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0;\n\ - vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex;\n\ - gl_Position = dgl_ProjectionMatrix * vEye;\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] );\n\ - }\n\ - }\n\ -}\n\ -"; diff --git a/src/eepp/graphics/renderer/shaders/basegl3cp.vert.h b/src/eepp/graphics/renderer/shaders/basegl3cp.vert.h new file mode 100644 index 000000000..9819f7446 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/basegl3cp.vert.h @@ -0,0 +1,31 @@ + +const GLchar * EEGL3CP_SHADER_BASE_VS = R"( +#define MAX_CLIP_PLANES 6 +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +uniform mat4 dgl_TextureMatrix; +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +uniform float dgl_PointSize; +in vec4 dgl_Vertex; +in vec4 dgl_FrontColor; +in vec4 dgl_MultiTexCoord0; +out vec4 dgl_Color; +out vec4 dgl_TexCoord[ 1 ]; +out float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +void main(void) +{ + gl_PointSize = dgl_PointSize; + dgl_Color = dgl_FrontColor; + dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0; + vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex; + gl_Position = dgl_ProjectionMatrix * vEye; + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] ); + } + } +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/clipped.frag b/src/eepp/graphics/renderer/shaders/clipped.frag deleted file mode 100644 index 625e7a173..000000000 --- a/src/eepp/graphics/renderer/shaders/clipped.frag +++ /dev/null @@ -1,39 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform sampler2D textureUnit0;\n\ -uniform int dgl_TexActive;\n\ -#ifndef GL_ES\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -#else\n\ -uniform lowp int dgl_ClippingEnabled;\n\ -uniform lowp int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -#endif\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -varying vec4 dgl_Color;\n\ -#ifndef GL_ES\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -#else\n\ -varying mediump vec4 dgl_TexCoord[ 1 ];\n\ -#endif\n\ -varying float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -void main(void)\n\ -{\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - if ( dgl_ClipDistance[i] < 0.0 )\n\ - discard;\n\ - }\n\ - }\n\ - if ( 1 == dgl_TexActive )\n\ - gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy );\n\ - else\n\ - gl_FragColor = dgl_Color;\n\ -}"; - diff --git a/src/eepp/graphics/renderer/shaders/clipped.frag.h b/src/eepp/graphics/renderer/shaders/clipped.frag.h new file mode 100644 index 000000000..a55f6bc9a --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/clipped.frag.h @@ -0,0 +1,35 @@ + +const GLchar * EEGLES2_SHADER_CLIPPED_FS = R"(#define MAX_CLIP_PLANES 6 +uniform sampler2D textureUnit0; +uniform int dgl_TexActive; +#ifndef GL_ES +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +#else +uniform lowp int dgl_ClippingEnabled; +uniform lowp int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +#endif +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +varying vec4 dgl_Color; +#ifndef GL_ES +varying vec4 dgl_TexCoord[ 1 ]; +#else +varying mediump vec4 dgl_TexCoord[ 1 ]; +#endif +varying float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +void main(void) +{ + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + if ( dgl_ClipDistance[i] < 0.0 ) + discard; + } + } + if ( 1 == dgl_TexActive ) + gl_FragColor = dgl_Color * texture2D( textureUnit0, dgl_TexCoord[ 0 ].xy ); + else + gl_FragColor = dgl_Color; +} +)"; + diff --git a/src/eepp/graphics/renderer/shaders/clipped.vert b/src/eepp/graphics/renderer/shaders/clipped.vert deleted file mode 100644 index 760ae640d..000000000 --- a/src/eepp/graphics/renderer/shaders/clipped.vert +++ /dev/null @@ -1,41 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"#define MAX_CLIP_PLANES 6\n\ -uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -uniform mat4 dgl_TextureMatrix;\n\ -#ifndef GL_ES\n\ -uniform int dgl_ClippingEnabled;\n\ -uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -#else\n\ -uniform lowp int dgl_ClippingEnabled;\n\ -uniform lowp int dgl_ClipEnabled[ MAX_CLIP_PLANES ];\n\ -#endif\n\ -uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ];\n\ -attribute vec4 dgl_Vertex;\n\ -attribute vec4 dgl_FrontColor;\n\ -attribute vec4 dgl_MultiTexCoord0;\n\ -varying vec4 dgl_Color;\n\ -#ifndef GL_ES\n\ -varying vec4 dgl_TexCoord[ 1 ];\n\ -#else\n\ -varying mediump vec4 dgl_TexCoord[ 1 ];\n\ -#endif\n\ -varying float dgl_ClipDistance[ MAX_CLIP_PLANES ];\n\ -void main(void)\n\ -{\n\ - dgl_Color = dgl_FrontColor;\n\ - dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0;\n\ - vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex;\n\ - gl_Position = dgl_ProjectionMatrix * vEye;\n\ - if ( 1 == dgl_ClippingEnabled ) {\n\ - for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) {\n\ - if ( 1 == dgl_ClipEnabled[i] )\n\ - dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] );\n\ - }\n\ - }\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/clipped.vert.h b/src/eepp/graphics/renderer/shaders/clipped.vert.h new file mode 100644 index 000000000..57953ca3e --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/clipped.vert.h @@ -0,0 +1,38 @@ + +const GLchar * EEGLES2_SHADER_CLIPPED_VS = R"( +#define MAX_CLIP_PLANES 6 +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +uniform mat4 dgl_TextureMatrix; +#ifndef GL_ES +uniform int dgl_ClippingEnabled; +uniform int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +#else +uniform lowp int dgl_ClippingEnabled; +uniform lowp int dgl_ClipEnabled[ MAX_CLIP_PLANES ]; +#endif +uniform vec4 dgl_ClipPlane[ MAX_CLIP_PLANES ]; +attribute vec4 dgl_Vertex; +attribute vec4 dgl_FrontColor; +attribute vec4 dgl_MultiTexCoord0; +varying vec4 dgl_Color; +#ifndef GL_ES +varying vec4 dgl_TexCoord[ 1 ]; +#else +varying mediump vec4 dgl_TexCoord[ 1 ]; +#endif +varying float dgl_ClipDistance[ MAX_CLIP_PLANES ]; +void main(void) +{ + dgl_Color = dgl_FrontColor; + dgl_TexCoord[0] = dgl_TextureMatrix * dgl_MultiTexCoord0; + vec4 vEye = dgl_ModelViewMatrix * dgl_Vertex; + gl_Position = dgl_ProjectionMatrix * vEye; + if ( 1 == dgl_ClippingEnabled ) { + for ( int i = 0; i < MAX_CLIP_PLANES; i++ ) { + if ( 1 == dgl_ClipEnabled[i] ) + dgl_ClipDistance[i] = dot( vEye, dgl_ClipPlane[i] ); + } + } +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/pointsprite.frag b/src/eepp/graphics/renderer/shaders/pointsprite.frag deleted file mode 100644 index 17c1139ac..000000000 --- a/src/eepp/graphics/renderer/shaders/pointsprite.frag +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"uniform sampler2D textureUnit0;\n\ -varying vec4 dgl_Color;\n\ -void main(void)\n\ -{\n\ - gl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord );\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/pointsprite.frag.h b/src/eepp/graphics/renderer/shaders/pointsprite.frag.h new file mode 100644 index 000000000..7e5e690e6 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/pointsprite.frag.h @@ -0,0 +1,9 @@ + +const GLchar * EEGLES2_SHADER_POINTSPRITE_FS = R"( +uniform sampler2D textureUnit0; +varying vec4 dgl_Color; +void main(void) +{ + gl_FragColor = dgl_Color * texture2D( textureUnit0, gl_PointCoord ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/pointsprite.vert b/src/eepp/graphics/renderer/shaders/pointsprite.vert deleted file mode 100644 index 0f2bea41b..000000000 --- a/src/eepp/graphics/renderer/shaders/pointsprite.vert +++ /dev/null @@ -1,18 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -uniform float dgl_PointSize;\n\ -attribute vec4 dgl_Vertex;\n\ -attribute vec4 dgl_FrontColor;\n\ -varying vec4 dgl_Color;\n\ -void main(void)\n\ -{\n\ - gl_PointSize = dgl_PointSize;\n\ - dgl_Color = dgl_FrontColor;\n\ - gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex );\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/pointsprite.vert.h b/src/eepp/graphics/renderer/shaders/pointsprite.vert.h new file mode 100644 index 000000000..8e4e3e9f5 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/pointsprite.vert.h @@ -0,0 +1,15 @@ + +const GLchar * EEGLES2_SHADER_POINTSPRITE_VS = R"( +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +uniform float dgl_PointSize; +attribute vec4 dgl_Vertex; +attribute vec4 dgl_FrontColor; +varying vec4 dgl_Color; +void main(void) +{ + gl_PointSize = dgl_PointSize; + dgl_Color = dgl_FrontColor; + gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex ); +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/primitive.frag b/src/eepp/graphics/renderer/shaders/primitive.frag deleted file mode 100644 index 52893b6e3..000000000 --- a/src/eepp/graphics/renderer/shaders/primitive.frag +++ /dev/null @@ -1,11 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"varying vec4 dgl_Color;\n\ -void main(void)\n\ -{\n\ - gl_FragColor = dgl_Color;\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/primitive.frag.h b/src/eepp/graphics/renderer/shaders/primitive.frag.h new file mode 100644 index 000000000..5da8c9765 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/primitive.frag.h @@ -0,0 +1,8 @@ + +const GLchar * EEGLES2_SHADER_PRIMITIVE_FS = R"( +varying vec4 dgl_Color; +void main(void) +{ + gl_FragColor = dgl_Color; +} +)"; diff --git a/src/eepp/graphics/renderer/shaders/primitive.vert b/src/eepp/graphics/renderer/shaders/primitive.vert deleted file mode 100644 index bbc5c6a34..000000000 --- a/src/eepp/graphics/renderer/shaders/primitive.vert +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef EE_GLES2 -"precision mediump float;\n" -"precision lowp int;\n" -#else -"#version 120\n" -#endif -"uniform mat4 dgl_ProjectionMatrix;\n\ -uniform mat4 dgl_ModelViewMatrix;\n\ -attribute vec4 dgl_Vertex;\n\ -attribute vec4 dgl_FrontColor;\n\ -varying vec4 dgl_Color;\n\ -void main(void)\n\ -{\n\ - dgl_Color = dgl_FrontColor;\n\ - gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex );\n\ -}"; diff --git a/src/eepp/graphics/renderer/shaders/primitive.vert.h b/src/eepp/graphics/renderer/shaders/primitive.vert.h new file mode 100644 index 000000000..62e3a1751 --- /dev/null +++ b/src/eepp/graphics/renderer/shaders/primitive.vert.h @@ -0,0 +1,13 @@ + +const GLchar * EEGLES2_SHADER_PRIMITIVE_VS = R"( +uniform mat4 dgl_ProjectionMatrix; +uniform mat4 dgl_ModelViewMatrix; +attribute vec4 dgl_Vertex; +attribute vec4 dgl_FrontColor; +varying vec4 dgl_Color; +void main(void) +{ + dgl_Color = dgl_FrontColor; + gl_Position = dgl_ProjectionMatrix * ( dgl_ModelViewMatrix * dgl_Vertex ); +} +)"; diff --git a/src/test/eetest.cpp b/src/test/eetest.cpp index e805907aa..4fafe8835 100644 --- a/src/test/eetest.cpp +++ b/src/test/eetest.cpp @@ -371,7 +371,7 @@ void EETest::createUI() { Uint32 UI_MAN_OPS = 0; if ( mDebugUI ) UI_MAN_OPS = UI_MANAGER_HIGHLIGHT_FOCUS | UI_MANAGER_HIGHLIGHT_OVER | UI_MANAGER_DRAW_DEBUG_DATA | UI_MANAGER_DRAW_BOXES | UI_MANAGER_HIGHLIGHT_INVALIDATION; - UIManager::instance()->init(UI_MAN_OPS | UI_MANAGER_USE_DRAW_INVALIDATION /*| UI_MANAGER_MAIN_CONTROL_IN_FRAME_BUFFER*/); + UIManager::instance()->init(UI_MAN_OPS | UI_MANAGER_USE_DRAW_INVALIDATION | UI_MANAGER_MAIN_CONTROL_IN_FRAME_BUFFER); UIManager::instance()->setTranslator( mTranslator ); //mTheme = UITheme::loadFromDirectory( UIThemeDefault::New( mThemeName, mThemeName ), MyPath + "ui/" + mThemeName + "/" ); @@ -390,7 +390,7 @@ void EETest::createUI() { UIWindow * tWin = UIWindow::New(); tWin->setSize( 530, 405 )->setPosition( 320, 240 ); UIWindowStyleConfig windowStyleConfig = tWin->getStyleConfig(); - windowStyleConfig.WinFlags = UI_WIN_DRAGABLE_CONTAINER | UI_WIN_SHADOW /*| UI_WIN_FRAME_BUFFER*/; + windowStyleConfig.WinFlags = UI_WIN_DRAGABLE_CONTAINER | UI_WIN_SHADOW | UI_WIN_FRAME_BUFFER; windowStyleConfig.MinWindowSize = Sizei( 530, 405 ); windowStyleConfig.BaseAlpha = 200; tWin->setStyleConfig( windowStyleConfig );