本文整理汇总了C++中ProgramObject::set_uniform_buffer_index方法的典型用法代码示例。如果您正苦于以下问题:C++ ProgramObject::set_uniform_buffer_index方法的具体用法?C++ ProgramObject::set_uniform_buffer_index怎么用?C++ ProgramObject::set_uniform_buffer_index使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProgramObject
的用法示例。
在下文中一共展示了ProgramObject::set_uniform_buffer_index方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: compile_and_link
ProgramObject LightsourceSimplePass::compile_and_link(GraphicContext &gc, const std::string &shader_path, const std::string &type)
{
ProgramObject program;
std::string vertex_filename = PathHelp::combine(shader_path, string_format("LightsourceSimple/vertex_%1.%2", type, gc.get_shader_language() == shader_glsl ? "glsl" : "hlsl"));
std::string fragment_filename = PathHelp::combine(shader_path, string_format("LightsourceSimple/fragment_light.%1", gc.get_shader_language() == shader_glsl ? "glsl" : "hlsl"));
program = ShaderSetup::compile(gc, "", vertex_filename, fragment_filename, type == "rect" ? "RECT_PASS" : "");
program.bind_frag_data_location(0, "FragColor");
if (!program.link())
throw Exception("Shader linking failed!");
program.bind_attribute_location(0, "AttrPositionInObject");
program.set_uniform_buffer_index("Uniforms", 0);
program.set_uniform1i("InstanceTexture", 0);
program.set_uniform1i("NormalZTexture", 1);
program.set_uniform1i("DiffuseColorTexture", 2);
program.set_uniform1i("SpecularColorTexture", 3);
program.set_uniform1i("SpecularLevelTexture", 4);
program.set_uniform1i("ShadowMapsTexture", 5);
program.set_uniform1i("ShadowMapsTextureSampler", 5);
program.set_uniform1i("SelfIlluminationTexture", 6);
return program;
}
示例2: create_shader_program
ProgramObject HSV::create_shader_program(GraphicContext &gc)
{
ProgramObject program = ProgramObject::load(gc, "Resources/vertex.glsl", "Resources/fragment.glsl");
program.bind_attribute_location(0, "Position");
program.bind_attribute_location(1, "TexCoord0");
program.set_uniform_buffer_index("ProgramUniforms", 0);
if (!program.link())
throw Exception("Unable to link program");
return program;
}
示例3: 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;
}
}