本文整理汇总了C++中ProgramObject::attach方法的典型用法代码示例。如果您正苦于以下问题:C++ ProgramObject::attach方法的具体用法?C++ ProgramObject::attach怎么用?C++ ProgramObject::attach使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProgramObject
的用法示例。
在下文中一共展示了ProgramObject::attach方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: create_shaders
void ShaderEffect_Impl::create_shaders(GraphicContext &gc, const ShaderEffectDescription_Impl *description)
{
std::string vertex_shader_code = add_defines(gc, description->vertex_shader_code, description);
std::string fragment_shader_code = add_defines(gc, description->fragment_shader_code, description);
std::string compute_shader_code = add_defines(gc, description->compute_shader_code, description);
if (!vertex_shader_code.empty())
{
ShaderObject vertex_shader(gc, shadertype_vertex, vertex_shader_code);
if(!vertex_shader.compile())
throw Exception(string_format("Unable to compile vertex shader: %1", vertex_shader.get_info_log()));
program.attach(vertex_shader);
}
if (!fragment_shader_code.empty())
{
ShaderObject fragment_shader(gc, shadertype_fragment, fragment_shader_code);
if(!fragment_shader.compile())
throw Exception(string_format("Unable to compile fragment shader: %1", fragment_shader.get_info_log()));
program.attach(fragment_shader);
}
if (!compute_shader_code.empty())
{
ShaderObject compute_shader(gc, shadertype_compute, compute_shader_code);
if(!compute_shader.compile())
throw Exception(string_format("Unable to compile compute shader: %1", compute_shader.get_info_log()));
program.attach(compute_shader);
}
int index = 0;
for(const auto & elem : description->attributes)
{
program.bind_attribute_location(index++, elem.first);
}
index = 0;
for(const auto & elem : description->frag_data)
{
program.bind_frag_data_location(index++, elem.first);
}
if (!program.link())
throw Exception(string_format("Link failed: %1", program.get_info_log()));
index = 0;
for(auto it = description->uniform_buffers.begin(); it != description->uniform_buffers.end(); ++it, index++)
{
program.set_uniform_buffer_index(it->first, index);
uniform_bindings[index] = it->second;
}
index = 0;
for(auto it = description->textures.begin(); it != description->textures.end(); ++it, index++)
{
program.set_uniform1i(it->first, index);
texture_bindings[index] = it->second;
}
index = 0;
for(auto it = description->images.begin(); it != description->images.end(); ++it, index++)
{
program.set_uniform1i(it->first, index);
image_bindings[index] = it->second;
}
index = 0;
for(auto it = description->storage_buffers.begin(); it != description->storage_buffers.end(); ++it, index++)
{
program.set_uniform1i(it->first, index);
storage_bindings[index] = it->second;
}
}