本文整理汇总了C++中safe_ptr::yield方法的典型用法代码示例。如果您正苦于以下问题:C++ safe_ptr::yield方法的具体用法?C++ safe_ptr::yield怎么用?C++ safe_ptr::yield使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类safe_ptr
的用法示例。
在下文中一共展示了safe_ptr::yield方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: draw
void draw(draw_params&& params)
{
static const double epsilon = 0.001;
CASPAR_ASSERT(params.pix_desc.planes.size() == params.textures.size());
if(params.textures.empty() || !params.background)
return;
if(params.transform.opacity < epsilon)
return;
if(!std::all_of(params.textures.begin(), params.textures.end(), std::mem_fn(&device_buffer::ready)))
{
CASPAR_LOG(trace) << L"[image_mixer] Performance warning. Host to device transfer not complete, GPU will be stalled";
ogl_->yield(); // Try to give it some more time.
}
// Bind textures
for(size_t n = 0; n < params.textures.size(); ++n)
params.textures[n]->bind(n);
if(params.local_key)
params.local_key->bind(texture_id::local_key);
if(params.layer_key)
params.layer_key->bind(texture_id::layer_key);
// Setup shader
ogl_->use(*shader_);
shader_->set("plane[0]", texture_id::plane0);
shader_->set("plane[1]", texture_id::plane1);
shader_->set("plane[2]", texture_id::plane2);
shader_->set("plane[3]", texture_id::plane3);
shader_->set("local_key", texture_id::local_key);
shader_->set("layer_key", texture_id::layer_key);
shader_->set("is_hd", params.pix_desc.planes.at(0).height > 700 ? 1 : 0);
shader_->set("has_local_key", bool(params.local_key));
shader_->set("has_layer_key", bool(params.layer_key));
shader_->set("pixel_format", params.pix_desc.pix_fmt);
shader_->set("opacity", params.transform.is_key ? 1.0 : params.transform.opacity);
shader_->set("post_processing", false);
shader_->set("chroma_mode", params.blend_mode.chroma.key == chroma::green ? 1 : (params.blend_mode.chroma.key == chroma::blue ? 2 : 0));
shader_->set("chroma_blend", params.blend_mode.chroma.threshold, params.blend_mode.chroma.softness);
shader_->set("chroma_spill", params.blend_mode.chroma.spill);
// shader_->set("chroma.key", ((params.blend_mode.chroma.key >> 24) && 0xff)/255.0f,
// ((params.blend_mode.chroma.key >> 16) && 0xff)/255.0f,
// (params.blend_mode.chroma.key & 0xff)/255.0f);
// if (params.blend_mode.chroma.key != chroma::none)
// {
// shader_->set("chroma.threshold", params.blend_mode.chroma.threshold);
// shader_->set("chroma.softness", params.blend_mode.chroma.softness);
// shader_->set("chroma.blur", params.blend_mode.chroma.blur);
// shader_->set("chroma.spill", params.blend_mode.chroma.spill);
// shader_->set("chroma.show_mask", params.blend_mode.chroma.show_mask);
// }
// Setup blend_func
if(params.transform.is_key)
params.blend_mode = blend_mode::normal;
if(blend_modes_)
{
params.background->bind(texture_id::background);
shader_->set("background", texture_id::background);
shader_->set("blend_mode", params.blend_mode.mode);
shader_->set("keyer", params.keyer);
}
else
{
switch(params.keyer)
{
case keyer::additive:
ogl_->blend_func(GL_ONE, GL_ONE);
break;
case keyer::linear:
default:
ogl_->blend_func(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}
}
// Setup image-adjustements
if(params.transform.levels.min_input > epsilon ||
params.transform.levels.max_input < 1.0-epsilon ||
params.transform.levels.min_output > epsilon ||
params.transform.levels.max_output < 1.0-epsilon ||
std::abs(params.transform.levels.gamma - 1.0) > epsilon)
{
shader_->set("levels", true);
shader_->set("min_input", params.transform.levels.min_input);
shader_->set("max_input", params.transform.levels.max_input);
shader_->set("min_output", params.transform.levels.min_output);
shader_->set("max_output", params.transform.levels.max_output);
shader_->set("gamma", params.transform.levels.gamma);
//.........这里部分代码省略.........