Kaydet (Commit) 7c558087 authored tarafından weigao's avatar weigao Kaydeden (comit) Markus Mohrhard

add codes for calling the 3.0 shaders

Change-Id: I0e95879c04047ccb836543d801bda6a01ae469ef
üst 1e3a1a05
...@@ -195,6 +195,7 @@ void OpenGL3DRenderer::CheckGLSLVersion() ...@@ -195,6 +195,7 @@ void OpenGL3DRenderer::CheckGLSLVersion()
if (iVersion > 3) if (iVersion > 3)
{ {
maResources.m_b330Support = true; maResources.m_b330Support = true;
maResources.m_b330Support = false;
return; return;
} }
p++; p++;
...@@ -834,11 +835,6 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) ...@@ -834,11 +835,6 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon)
{ {
return ; return ;
} }
//update ubo
Update3DUniformBlock();
glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer);
glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material);
CHECK_GL_ERROR();
glBindBuffer(GL_UNIFORM_BUFFER, 0); glBindBuffer(GL_UNIFORM_BUFFER, 0);
if(mbPickingMode) if(mbPickingMode)
{ {
...@@ -849,6 +845,31 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon) ...@@ -849,6 +845,31 @@ void OpenGL3DRenderer::RenderPolygon3D(const Polygon3DInfo& polygon)
glUseProgram(maResources.m_3DProID); glUseProgram(maResources.m_3DProID);
glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]); glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]);
glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]); glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]);
if (maResources.m_b330Support)
{
//update ubo
Update3DUniformBlock();
glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer);
glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &polygon.material);
CHECK_GL_ERROR();
}
else
{
//update light information
glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor);
glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace);
glUniform1fv(maResources.m_3DLightPowerID, m_iLightNum, m_fLightPower);
glUniform1i(maResources.m_3DLightNumID, m_iLightNum);
glUniform4fv(maResources.m_3DLightAmbientID, 1, &m_Ambient[0]);
//update meterial information
glUniform4fv(maResources.m_3DMaterialAmbientID, 1, &polygon.material.ambient[0]);
glUniform4fv(maResources.m_3DMaterialDiffuseID, 1, &polygon.material.diffuse[0]);
glUniform4fv(maResources.m_3DMaterialSpecularID, 1, &polygon.material.specular[0]);
glUniform4fv(maResources.m_3DMaterialColorID, 1, &polygon.material.materialColor[0]);
glUniform1i(maResources.m_3DMaterialTwoSidesID, polygon.material.twoSidesLighting);
glUniform1f(maResources.m_3DMaterialShininessID, polygon.material.shininess);
CHECK_GL_ERROR();
}
} }
for (size_t i = 0; i < verticesNum; i++) for (size_t i = 0; i < verticesNum; i++)
{ {
...@@ -968,26 +989,45 @@ void OpenGL3DRenderer::RenderPolygon3DObject() ...@@ -968,26 +989,45 @@ void OpenGL3DRenderer::RenderPolygon3DObject()
void OpenGL3DRenderer::Set3DSenceInfo(sal_uInt32 nColor, bool twoSidesLighting) void OpenGL3DRenderer::Set3DSenceInfo(sal_uInt32 nColor, bool twoSidesLighting)
{ {
m_Polygon3DInfo.material.twoSidesLighting = twoSidesLighting; m_Polygon3DInfo.material.twoSidesLighting = twoSidesLighting;
if (maResources.m_b330Support)
m_LightsInfo.ambient = getColorAsVector(nColor); {
m_LightsInfo.ambient = getColorAsVector(nColor);
m_LightsInfo.lightNum = 0; m_LightsInfo.lightNum = 0;
}
else
{
m_iLightNum = 0;
m_Ambient = getColorAsVector(nColor);;
}
SetLightInfo(true, 0xFFFFFF, glm::vec4(1.0, 1.0, 1.0, 0.0)); SetLightInfo(true, 0xFFFFFF, glm::vec4(1.0, 1.0, 1.0, 0.0));
} }
void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm::vec4& direction) void OpenGL3DRenderer::SetLightInfo(bool lightOn, sal_uInt32 nColor, const glm::vec4& direction)
{ {
if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM)
{
return;
}
if (lightOn) if (lightOn)
{ {
m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor); if (maResources.m_b330Support)
m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction; {
m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0; if (m_LightsInfo.lightNum >= MAX_LIGHT_NUM)
m_LightsInfo.lightNum++; {
return;
}
m_LightsInfo.light[m_LightsInfo.lightNum].lightColor = getColorAsVector(nColor);
m_LightsInfo.light[m_LightsInfo.lightNum].positionWorldspace = direction;
m_LightsInfo.light[m_LightsInfo.lightNum].lightPower = 1.0;
m_LightsInfo.lightNum++;
}
else
{
if (m_iLightNum >= MAX_LIGHT_NUM)
{
return;
}
m_LightColor[m_iLightNum] = getColorAsVector(nColor);
m_PositionWorldspace[m_iLightNum] = direction;
m_fLightPower[m_iLightNum] = 1.0;
m_iLightNum++;
}
} }
} }
...@@ -1389,7 +1429,6 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D) ...@@ -1389,7 +1429,6 @@ void OpenGL3DRenderer::RenderExtrudeTopSurface(const Extrude3DInfo& extrude3D)
glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]); glUniform4fv(maResources.m_2DColorID, 1, &extrude3D.id[0]);
} }
glDrawElements(GL_TRIANGLES, extrude3D.size[TOP_SURFACE], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[TOP_SURFACE])); glDrawElements(GL_TRIANGLES, extrude3D.size[TOP_SURFACE], GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(extrude3D.startIndex[TOP_SURFACE]));
RenderExtrudeFlatSurface(extrude3D, FLAT_BOTTOM_SURFACE);
} }
void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D) void OpenGL3DRenderer::RenderNonRoundedBar(const Extrude3DInfo& extrude3D)
...@@ -1453,12 +1492,26 @@ void OpenGL3DRenderer::RenderExtrude3DObject() ...@@ -1453,12 +1492,26 @@ void OpenGL3DRenderer::RenderExtrude3DObject()
} }
else else
{ {
Update3DUniformBlock();
glUseProgram(maResources.m_3DProID); glUseProgram(maResources.m_3DProID);
glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]); glUniformMatrix4fv(maResources.m_3DViewID, 1, GL_FALSE, &m_3DView[0][0]);
glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]); glUniformMatrix4fv(maResources.m_3DProjectionID, 1, GL_FALSE, &m_3DProjection[0][0]);
if (maResources.m_b330Support)
{
//update ubo
Update3DUniformBlock();
CHECK_GL_ERROR();
}
else
{
//update light information
glUniform4fv(maResources.m_3DLightColorID, m_iLightNum, (GLfloat*)m_LightColor);
glUniform4fv(maResources.m_3DLightPosID, m_iLightNum, (GLfloat*)m_PositionWorldspace);
glUniform1fv(maResources.m_3DLightPowerID, m_iLightNum, m_fLightPower);
glUniform1i(maResources.m_3DLightNumID, m_iLightNum);
glUniform4fv(maResources.m_3DLightAmbientID, 1, &m_Ambient[0]);
CHECK_GL_ERROR();
}
} }
CHECK_GL_ERROR();
size_t extrude3DNum = m_Extrude3DList.size(); size_t extrude3DNum = m_Extrude3DList.size();
for (size_t i = 0; i < extrude3DNum; i++) for (size_t i = 0; i < extrude3DNum; i++)
{ {
...@@ -1498,10 +1551,23 @@ void OpenGL3DRenderer::RenderExtrude3DObject() ...@@ -1498,10 +1551,23 @@ void OpenGL3DRenderer::RenderExtrude3DObject()
extrude3DInfo.zScale *= m_fHeightWeight; extrude3DInfo.zScale *= m_fHeightWeight;
if(!mbPickingMode) if(!mbPickingMode)
{ {
glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer); if (maResources.m_b330Support)
glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &extrude3DInfo.material); {
CHECK_GL_ERROR(); glBindBuffer(GL_UNIFORM_BUFFER, m_3DUBOBuffer);
glBindBuffer(GL_UNIFORM_BUFFER, 0); glBufferSubData(GL_UNIFORM_BUFFER, m_3DActualSizeLight, sizeof(MaterialParameters), &extrude3DInfo.material);
CHECK_GL_ERROR();
glBindBuffer(GL_UNIFORM_BUFFER, 0);
}
else
{
//update meterial information
glUniform4fv(maResources.m_3DMaterialAmbientID, 1, &extrude3DInfo.material.ambient[0]);
glUniform4fv(maResources.m_3DMaterialDiffuseID, 1, &extrude3DInfo.material.diffuse[0]);
glUniform4fv(maResources.m_3DMaterialSpecularID, 1, &extrude3DInfo.material.specular[0]);
glUniform4fv(maResources.m_3DMaterialColorID, 1, &extrude3DInfo.material.materialColor[0]);
glUniform1i(maResources.m_3DMaterialTwoSidesID, extrude3DInfo.material.twoSidesLighting);
glUniform1f(maResources.m_3DMaterialShininessID, extrude3DInfo.material.shininess);
}
} }
extrude3DInfo.reverse = 0; extrude3DInfo.reverse = 0;
if (extrude3DInfo.rounded) if (extrude3DInfo.rounded)
...@@ -1796,7 +1862,16 @@ void OpenGL3DRenderer::ProcessUnrenderedShape(bool bNewScene) ...@@ -1796,7 +1862,16 @@ void OpenGL3DRenderer::ProcessUnrenderedShape(bool bNewScene)
if(mbPickingMode) if(mbPickingMode)
RenderExtrude3DObject(); RenderExtrude3DObject();
else else
RenderBatchBars(bNewScene); {
if (maResources.m_b330Support)
{
RenderBatchBars(bNewScene);
}
else
{
RenderExtrude3DObject();
}
}
//render text //render text
RenderTextShape(); RenderTextShape();
// render screen text // render screen text
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment