class Texture;
/**
-Encapsulates the data that determines the appearance of a rendered surface.
-This includes shader and data for it, material and texturing.
+Describes the appearance of a surface with a shader, uniform values and
+textures.
+
+A Material can be used to automatically populate most of the fields of a
+RenderMethod.
*/
class RenderMethod
{
void set_material_textures();
public:
+ /** Sets the shader program and uniform values. */
void set_shader_program(const Program *, const ProgramData *);
+
const Program *get_shader_program() const { return shprog; }
const ProgramData *get_shader_data() const { return shdata.get(); }
Tag get_slotted_uniform_tag(Tag) const;
+
+ /** Sets a Material to use as a basis for the render method. If a shader
+ has not been explicitly set, the material's shader will be used. */
void set_material(const Material *);
+
const Material *get_material() const { return material; }
const std::string &get_material_slot_name() const { return material_slot; }
void set_texture(Tag, const Texture *, const Sampler * = 0);
CullMode get_face_cull() const { return face_cull; }
void set_blend(const Blend &);
const Blend &get_blend() const { return blend; }
+
+ /** Toggles shadows on objects using this render method. Only affects
+ shaders created from materials. A ShadowMap effect is required. */
void set_receive_shadows(bool);
+
bool get_receive_shadows() const { return receive_shadows; }
+
+ /** Toggles the use of an environment map as a light source. Only affects
+ shaders created from materials. An EnvironmentMap effect is required. */
void set_image_based_lighting(bool);
+
bool get_image_based_lighting() const { return image_based_lighting; }
void apply(Renderer &) const;