示例#1
0
/**
 * \brief Enables a given shader.
 * \param p The shader to enable.
 */
void bear::visual::gl_screen::use_program( const shader_program& p ) const
{
  const gl_shader_program* const s
    ( static_cast<const gl_shader_program*>(p.get_impl()) );

  glUseProgram( s->program_id() );
  VISUAL_GL_ERROR_THROW();

  shader_program::variable_visitor_type visitor;
  shader_program::input_variable_map vars( p.get_variables() );
  visitor.run( vars, uniform_setter( s->program_id() ) );
} // gl_screen::use_program()
示例#2
0
void bear::visual::detail::apply_shader( const shader_program& shader )
{
  assert ( shader.is_valid() );

  const gl_shader_program* const s
    ( static_cast<const gl_shader_program*>( shader.get_impl() ) );

  assert( s->program_id() != 0 );
  
  glUseProgram( s->program_id() );
  VISUAL_GL_ERROR_THROW();

  shader_program::variable_visitor_type visitor;
  shader_program::input_variable_map vars( shader.get_variables() );
  visitor.run( vars, uniform_setter( s->program_id() ) );
}
示例#3
0
/**
 * \brief Enables the shader of the state.
 */
void bear::visual::gl_state::enable_shader() const
{
  if ( !m_shader.is_valid() )
    {
      glUseProgram( 0 );
      VISUAL_GL_ERROR_THROW();
      return;
    }

  const gl_shader_program* const s
    ( static_cast<const gl_shader_program*>( m_shader.get_impl() ) );

  glUseProgram( s->program_id() );
  VISUAL_GL_ERROR_THROW();

  shader_program::variable_visitor_type visitor;
  shader_program::input_variable_map vars( m_shader.get_variables() );
  visitor.run( vars, uniform_setter( s->program_id() ) );
} // gl_state::enable_shader()