本文整理汇总了C++中osl::ShadingSystem::ShaderGroupEnd方法的典型用法代码示例。如果您正苦于以下问题:C++ ShadingSystem::ShaderGroupEnd方法的具体用法?C++ ShadingSystem::ShaderGroupEnd怎么用?C++ ShadingSystem::ShaderGroupEnd使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osl::ShadingSystem
的用法示例。
在下文中一共展示了ShadingSystem::ShaderGroupEnd方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: create_optimized_osl_shader_group
bool ShaderGroup::create_optimized_osl_shader_group(
OSL::ShadingSystem& shading_system,
IAbortSwitch* abort_switch)
{
if (is_valid())
return true;
RENDERER_LOG_DEBUG("setting up shader group %s...", get_name());
try
{
OSL::ShaderGroupRef shader_group_ref = shading_system.ShaderGroupBegin(get_name());
if (shader_group_ref.get() == 0)
{
RENDERER_LOG_ERROR("failed to setup shader group %s: ShaderGroupBegin() call failed.", get_name());
return false;
}
for (each<ShaderContainer> i = impl->m_shaders; i; ++i)
{
if (is_aborted(abort_switch))
{
shading_system.ShaderGroupEnd();
return true;
}
if (!i->add(shading_system))
return false;
}
for (each<ShaderConnectionContainer> i = impl->m_connections; i; ++i)
{
if (is_aborted(abort_switch))
{
shading_system.ShaderGroupEnd();
return true;
}
if (!i->add(shading_system))
return false;
}
if (!shading_system.ShaderGroupEnd())
{
RENDERER_LOG_ERROR("failed to setup shader group %s: ShaderGroupEnd() call failed.", get_name());
return false;
}
impl->m_shader_group_ref = shader_group_ref;
get_shadergroup_closures_info(shading_system);
report_has_closure("emission", m_has_emission);
report_has_closure("transparent", m_has_transparency);
report_has_closure("subsurface", m_has_subsurface);
report_has_closure("holdout", m_has_holdout);
report_has_closure("debug", m_has_debug);
get_shadergroup_globals_info(shading_system);
report_uses_global("dPdtime", m_uses_dPdtime);
return true;
}
catch (const exception& e)
{
RENDERER_LOG_ERROR("failed to setup shader group %s: %s.", get_name(), e.what());
return false;
}
}