void Style::build(const Scene& _scene) { constructVertexLayout(); constructShaderProgram(); m_shaderProgram->setDescription("{style:" + m_name + "}"); switch (m_lightingType) { case LightingType::vertex: m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_LIGHTING_VERTEX\n", false); break; case LightingType::fragment: m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_LIGHTING_FRAGMENT\n", false); break; default: break; } if (m_blend == Blending::inlay) { m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_BLEND_INLAY\n", false); } else if (m_blend == Blending::overlay) { m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_BLEND_OVERLAY\n", false); } if (m_material.material) { m_material.uniforms = m_material.material->injectOnProgram(*m_shaderProgram); } if (m_lightingType != LightingType::none) { for (auto& light : _scene.lights()) { auto uniforms = light->injectOnProgram(*m_shaderProgram); if (uniforms) { m_lights.emplace_back(light.get(), std::move(uniforms)); } } } setupRasters(_scene.dataSources()); }
void Style::build(const std::vector<std::unique_ptr<Light>>& _lights) { constructVertexLayout(); constructShaderProgram(); switch (m_lightingType) { case LightingType::vertex: m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_LIGHTING_VERTEX\n", false); break; case LightingType::fragment: m_shaderProgram->addSourceBlock("defines", "#define TANGRAM_LIGHTING_FRAGMENT\n", false); break; default: break; } m_material->injectOnProgram(m_shaderProgram); for (auto& light : _lights) { light->injectOnProgram(m_shaderProgram); } }
PolygonStyle::PolygonStyle(std::string _name, GLenum _drawMode) : Style(_name, _drawMode) { constructVertexLayout(); constructShaderProgram(); }