struct State
{
+ std::uintptr_t pipeline_key = 0;
const Camera *camera = 0;
Matrix model_matrix;
const Framebuffer *framebuffer = 0;
enum ChangeMask
{
+ PIPELINE_KEY = 1,
MATRIX = 2,
SHADER_DATA = 16
};
std::vector<BoundProgramData> shdata_stack;
std::vector<BoundTexture> texture_stack;
const Texture &placeholder_texture;
+ PipelineState *last_pipeline = 0;
Commands commands;
public:
State &get_state() const;
public:
+ void set_pipeline_key(std::uintptr_t);
+ void set_pipeline_key(const void *p) { set_pipeline_key(reinterpret_cast<uintptr_t>(p)); }
+
+ template<typename T>
+ void set_pipeline_key(std::uintptr_t k, T d)
+ { set_pipeline_key(k^(static_cast<uintptr_t>(d)<<((sizeof(std::uintptr_t)-sizeof(T))*std::numeric_limits<char>::digits))); }
+
+ template<typename T>
+ void set_pipeline_key(const void *p, T d) { set_pipeline_key(reinterpret_cast<uintptr_t>(p), d); }
+
/** Sets the camera to render from. The model matrix is reset to identity. */
void set_camera(const Camera &);
void end_query(const QueryPool &, unsigned);
private:
+ PipelineState &get_pipeline_state();
void apply_framebuffer();
void apply_state();
};