diff options
author | weigao <weigao@multicorewareinc.com> | 2014-06-14 08:51:43 -0700 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2014-06-17 08:28:20 +0200 |
commit | 1e3a1a050916bf530f900e4ef0241e8e9adc7158 (patch) | |
tree | 1e3db35015d8b2d2417dcd2e118036e3e3df189c /chart2/source | |
parent | 33a40a317ade7dd3fc1b2d3dd6662820e104e67c (diff) |
add codes for compile the 3.0 shaders
Conflicts:
chart2/source/view/inc/GL3DRenderer.hxx
Change-Id: Idc58635cc1604208317319bfa399a1574979a909
Diffstat (limited to 'chart2/source')
-rw-r--r-- | chart2/source/view/inc/GL3DRenderer.hxx | 20 | ||||
-rw-r--r-- | chart2/source/view/main/GL3DRenderer.cxx | 101 |
2 files changed, 102 insertions, 19 deletions
diff --git a/chart2/source/view/inc/GL3DRenderer.hxx b/chart2/source/view/inc/GL3DRenderer.hxx index ad013e9c52c0..6218fbcefa7b 100644 --- a/chart2/source/view/inc/GL3DRenderer.hxx +++ b/chart2/source/view/inc/GL3DRenderer.hxx @@ -230,10 +230,12 @@ private: void InitBatch3DUniformBlock(); void UpdateBatch3DUniformBlock(); void RenderBatchBars(bool bNewScene); + void CheckGLSLVersion(); private: struct ShaderResources { + bool m_b330Support; // 3DProID GLint m_3DProID; GLint m_3DProjectionID; @@ -242,6 +244,18 @@ private: GLint m_3DNormalMatrixID; GLint m_3DVertexID; GLint m_3DNormalID; + //300 verson; + GLint m_3DMaterialAmbientID; + GLint m_3DMaterialDiffuseID; + GLint m_3DMaterialSpecularID; + GLint m_3DMaterialColorID; + GLint m_3DMaterialTwoSidesID; + GLint m_3DMaterialShininessID; + GLint m_3DLightColorID; + GLint m_3DLightPosID; + GLint m_3DLightPowerID; + GLint m_3DLightNumID; + GLint m_3DLightAmbientID; // TextProID GLint m_TextProID; @@ -376,6 +390,12 @@ private: GLint m_Batch3DActualSizeLight; glm::mat4 m_GlobalScaleMatrix; + //for 3.0 version + int m_iLightNum; + glm::vec4 m_Ambient; + glm::vec4 m_LightColor[MAX_LIGHT_NUM]; + glm::vec4 m_PositionWorldspace[MAX_LIGHT_NUM]; + float m_fLightPower[MAX_LIGHT_NUM]; }; } diff --git a/chart2/source/view/main/GL3DRenderer.cxx b/chart2/source/view/main/GL3DRenderer.cxx index 52199c58391d..3566fb310cdb 100644 --- a/chart2/source/view/main/GL3DRenderer.cxx +++ b/chart2/source/view/main/GL3DRenderer.cxx @@ -134,7 +134,8 @@ OpenGL3DRenderer::~OpenGL3DRenderer() } OpenGL3DRenderer::ShaderResources::ShaderResources() - : m_3DProID(0) + : m_b330Support(false) + , m_3DProID(0) , m_3DProjectionID(0) , m_3DViewID(0) , m_3DModelID(0) @@ -174,16 +175,82 @@ OpenGL3DRenderer::ShaderResources::~ShaderResources() glDeleteProgram(m_3DBatchProID); } +void OpenGL3DRenderer::CheckGLSLVersion() +{ + char version[256] = {0}; + strcpy(version, (char *)glGetString(GL_SHADING_LANGUAGE_VERSION)); + char *p = version; + int iVersion = 0; + //get the first point + while ((*p != '\0') && (*p != '.')) + { + iVersion = iVersion * 10 + ((*p) - 0x30); + p++; + } + if (iVersion < 3) + { + maResources.m_b330Support = false; + return; + } + if (iVersion > 3) + { + maResources.m_b330Support = true; + return; + } + p++; + iVersion = *p - 0x30; + if (iVersion >= 3) + { + maResources.m_b330Support = true; + return; + } + maResources.m_b330Support = false; +} + void OpenGL3DRenderer::ShaderResources::LoadShaders() { - m_3DProID = OpenGLHelper::LoadShaders("shape3DVertexShader", "shape3DFragmentShader"); - m_3DProjectionID = glGetUniformLocation(m_3DProID, "P"); - m_3DViewID = glGetUniformLocation(m_3DProID, "V"); - m_3DModelID = glGetUniformLocation(m_3DProID, "M"); - m_3DNormalMatrixID = glGetUniformLocation(m_3DProID, "normalMatrix"); - m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); - m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); + if (m_b330Support) + { + m_3DProID = OpenGLHelper::LoadShaders("shape3DVertexShader", "shape3DFragmentShader"); + m_3DProjectionID = glGetUniformLocation(m_3DProID, "P"); + m_3DViewID = glGetUniformLocation(m_3DProID, "V"); + m_3DModelID = glGetUniformLocation(m_3DProID, "M"); + m_3DNormalMatrixID = glGetUniformLocation(m_3DProID, "normalMatrix"); + m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); + m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); + + m_3DBatchProID = OpenGLHelper::LoadShaders("shape3DVertexShaderBatch", "shape3DFragmentShaderBatch"); + m_3DBatchProjectionID = glGetUniformLocation(m_3DBatchProID, "P"); + m_3DBatchViewID = glGetUniformLocation(m_3DBatchProID, "V"); + m_3DBatchModelID = glGetAttribLocation(m_3DBatchProID, "M"); + m_3DBatchNormalMatrixID = glGetAttribLocation(m_3DBatchProID, "normalMatrix"); + m_3DBatchVertexID = glGetAttribLocation(m_3DBatchProID, "vertexPositionModelspace"); + m_3DBatchNormalID = glGetAttribLocation(m_3DBatchProID, "vertexNormalModelspace"); + m_3DBatchColorID = glGetAttribLocation(m_3DBatchProID, "barColor"); + } + else + { + //use 300 + m_3DProID = OpenGLHelper::LoadShaders("shape3DVertexShaderV300", "shape3DFragmentShaderV300"); + m_3DProjectionID = glGetUniformLocation(m_3DProID, "P"); + m_3DViewID = glGetUniformLocation(m_3DProID, "V"); + m_3DModelID = glGetUniformLocation(m_3DProID, "M"); + m_3DNormalMatrixID = glGetUniformLocation(m_3DProID, "normalMatrix"); + m_3DMaterialAmbientID = glGetUniformLocation(m_3DProID, "materialAmbient"); + m_3DMaterialDiffuseID = glGetUniformLocation(m_3DProID, "materialDiffuse"); + m_3DMaterialSpecularID = glGetUniformLocation(m_3DProID, "materialSpecular"); + m_3DMaterialColorID = glGetUniformLocation(m_3DProID, "materialColor"); + m_3DMaterialTwoSidesID = glGetUniformLocation(m_3DProID, "twoSidesLighting"); + m_3DMaterialShininessID = glGetUniformLocation(m_3DProID, "materialShininess"); + m_3DLightColorID = glGetUniformLocation(m_3DProID, "lightColor"); + m_3DLightPosID = glGetUniformLocation(m_3DProID, "lightPosWorldspace"); + m_3DLightPowerID = glGetUniformLocation(m_3DProID, "lightPower"); + m_3DLightNumID = glGetUniformLocation(m_3DProID, "lightNum"); + m_3DLightAmbientID = glGetUniformLocation(m_3DProID, "lightAmbient"); + m_3DVertexID = glGetAttribLocation(m_3DProID, "vertexPositionModelspace"); + m_3DNormalID = glGetAttribLocation(m_3DProID, "vertexNormalModelspace"); + } m_TextProID = OpenGLHelper::LoadShaders("textVertexShader", "textFragmentShader"); m_TextMatrixID = glGetUniformLocation(m_TextProID, "MVP"); m_TextVertexID = glGetAttribLocation(m_TextProID, "vPosition"); @@ -200,14 +267,6 @@ void OpenGL3DRenderer::ShaderResources::LoadShaders() m_2DVertexID = glGetAttribLocation(m_CommonProID, "vPosition"); m_2DColorID = glGetUniformLocation(m_CommonProID, "vColor"); - m_3DBatchProID = OpenGLHelper::LoadShaders("shape3DVertexShaderBatch", "shape3DFragmentShaderBatch"); - m_3DBatchProjectionID = glGetUniformLocation(m_3DBatchProID, "P"); - m_3DBatchViewID = glGetUniformLocation(m_3DBatchProID, "V"); - m_3DBatchModelID = glGetAttribLocation(m_3DBatchProID, "M"); - m_3DBatchNormalMatrixID = glGetAttribLocation(m_3DBatchProID, "normalMatrix"); - m_3DBatchVertexID = glGetAttribLocation(m_3DBatchProID, "vertexPositionModelspace"); - m_3DBatchNormalID = glGetAttribLocation(m_3DBatchProID, "vertexNormalModelspace"); - m_3DBatchColorID = glGetAttribLocation(m_3DBatchProID, "barColor"); CHECK_GL_ERROR(); } @@ -281,6 +340,7 @@ void OpenGL3DRenderer::init() m_fViewAngle = 30.0f; m_3DProjection = glm::perspective(m_fViewAngle, (float)m_iWidth / (float)m_iHeight, 0.01f, 6000.0f); + CheckGLSLVersion(); maResources.LoadShaders(); maPickingResources.LoadShaders(); @@ -303,9 +363,12 @@ void OpenGL3DRenderer::init() m_Extrude3DInfo.rounded = false; CHECK_GL_ERROR(); - Init3DUniformBlock(); - InitBatch3DUniformBlock(); - + if (maResources.m_b330Support) + { + Init3DUniformBlock(); + InitBatch3DUniformBlock(); + } + CHECK_GL_ERROR(); glViewport(0, 0, m_iWidth, m_iHeight); Set3DSenceInfo(0xFFFFFF, true); m_GlobalScaleMatrix = glm::scale(0.01f, 0.01f, 0.01f); |