if (fg.IsEmpty())
continue;
- DrawFaceGroupGeometry(mesh, fg, GL_POLYGON, shader);
+ VertAttrOption attr;
+ DrawFaceGroupGeometry(mesh, fg, GL_POLYGON, shader, attr);
}
shader->EndShader();
glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT);
glEnable(GL_CULL_FACE);
+ VertAttrOption attr;
+ attr.tangent = true;
+
glCullFace(GL_FRONT);
lib_gl::MaterialSetter::SetGL(Mat_B);
- DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader);
+ DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader, attr);
glCullFace(GL_BACK);
lib_gl::MaterialSetter::SetGL(Mat_F);
- DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader);
+ DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader, attr);
glPopAttrib();
}
else
lib_gl::MaterialSetter::SetGL(*mat);
- DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader);
+ bool enableVCol = (m_Config->m_EnableVertexColor && mesh.HasVCol());
+
+ VertAttrOption attr;
+ attr.tangent = true;
+
+ glPushAttrib(GL_ENABLE_BIT);
+
+ if (enableVCol)
+ {
+ attr.vertCol = true;
+ if (m_Config->m_EnableLighting)
+ {
+ glEnable(GL_COLOR_MATERIAL);
+ glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
+ }
+ }
+
+ DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, shader, attr);
+
+ glPopAttrib();
}
void GeometryRender::SetShaderConfig(ShaderInterface* shader)
}
//! \8ew\92è\82µ\82½\83t\83F\81[\83X\83O\83\8b\81[\83v\82Ì\8c`\8fó\95`\89æ\82ð\8eÀ\8ds
-void GeometryRender::DrawFaceGroupGeometry(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader)
+void GeometryRender::DrawFaceGroupGeometry(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr)
{
if (m_Config->m_EnableFaceVBO)
- return DrawFaceGroupGeometry_VBO(mesh, fg, primiType, shader);
+ return DrawFaceGroupGeometry_VBO(mesh, fg, primiType, shader, attr);
else
- return DrawFaceGroupGeometry_STD(mesh, fg, primiType, shader);
+ return DrawFaceGroupGeometry_STD(mesh, fg, primiType, shader, attr);
}
-void GeometryRender::DrawFaceGroupGeometry_VBO(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader)
+void GeometryRender::DrawFaceGroupGeometry_VBO(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr)
{
GeometryVBO* vbo = GetOrCreateVBO(mesh, fg);
vbo->DrawVBOAll(GL_TRIANGLES, shader);
}
-void GeometryRender::DrawFaceGroupGeometry_STD(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader)
+void GeometryRender::DrawFaceGroupGeometry_STD(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr)
{
for (int fid : fg.m_Fids)
{
if (f.HasNormal())
glNormal3fv(mesh.m_Normals[f.m_NormIds[j]].v());
+ if (attr.vertCol && mesh.HasVCol())
+ {
+ const lib_graph::color3f& c = mesh.m_Col[f.m_VertIds[j]];
+ if (m_Config->m_VertColorTo01)
+ glColor3fv((c / 255.0f).v());
+ else
+ glColor3fv(c.v());
+ }
+
glVertex3fv(mesh.m_Verts[f.m_VertIds[j]].v());
}
if (fg.IsEmpty())
continue;
- DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, m_Shaders->GetConstantShader());
+ VertAttrOption attr;
+ DrawFaceGroupGeometry(mesh, fg, GL_TRIANGLE_FAN, m_Shaders->GetConstantShader(), attr);
}
glPopAttrib();
void AssignMatcap(SceneMain& scene, MeshBuf& mbuf, ShaderInterface* shader, const lib_geo::BaseFace& f) const;
gl::GlTexture* GetSceneFixedTexture(SceneMain& scene) const;
- void DrawFaceGroupGeometry(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader);
- void DrawFaceGroupGeometry_VBO(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader);
- void DrawFaceGroupGeometry_STD(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader);
+ void DrawFaceGroupGeometry(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr);
+ void DrawFaceGroupGeometry_VBO(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr);
+ void DrawFaceGroupGeometry_STD(lib_geo::BaseMesh& mesh, const FaceGroup& fg, GLenum primiType, ShaderInterface* shader, const VertAttrOption& attr);
GeometryVBO* GetOrCreateVBO(lib_geo::BaseMesh& mesh, const FaceGroup& fg);