class Renderable;
class Texture;
class Texturing;
+class VertexSetup;
class WindingTest;
/**
Matrix clipping_matrix;
const Program *shprog;
unsigned shdata_count;
- const Mesh *mesh;
+ const VertexSetup *vertex_setup;
const WindingTest *winding_test;
bool reverse_winding;
+ unsigned object_lod_bias;
State();
};
enum ChangeMask
{
- LEGACY_MATRIX = 1,
- MODERN_MATRIX = 2,
- MATRIX = LEGACY_MATRIX|MODERN_MATRIX,
- LEGACY_LIGHTING = 4,
- LEGACY_CLIPPING = 8,
+ MATRIX = 2,
SHADER_DATA = 16,
MATERIAL_SHDATA = 32,
- STANDARD_SHDATA = 64,
- LEGACY_PROJECTION = 128
+ STANDARD_SHDATA = 64
};
+ const Camera *default_camera;
unsigned char changed;
- bool matrices_loaded;
std::vector<State> state_stack;
State *state;
ProgramData standard_shdata;
Renderer state is popped. */
void add_shader_data(const ProgramData &data);
- void set_mesh(const Mesh *);
+ void flush_shader_data();
+
+ void set_vertex_setup(const VertexSetup *);
void set_winding_test(const WindingTest *);
void set_reverse_winding(bool);
+ void set_object_lod_bias(unsigned);
+ unsigned get_object_lod_bias() const { return state->object_lod_bias; }
+
/** Saves the current state so it can be restored later. */
void push_state();
void render(const Renderable &, const Tag & = Tag());
void draw(const Batch &);
+ void draw_instanced(const Batch &, unsigned);
private:
void apply_state();