#define MSP_GL_PROGRAMDATA_H_
#include <stdexcept>
+#include <msp/core/noncopyable.h>
#include <msp/datafile/objectloader.h>
#include "datatype.h"
#include "matrix.h"
The class is optimized for an access pattern where the set of uniforms and
programs stays constants, with only the values changing.
*/
-class ProgramData
+class ProgramData: public NonCopyable
{
public:
class Loader: public DataFile::ObjectLoader<ProgramData>
mutable std::vector<ProgramBlock> programs;
mutable UniformBlock *last_buffer_block = 0;
mutable Buffer *buffer = 0;
+ bool streaming = false;
mutable Mask dirty = 0;
std::string debug_name;
public:
ProgramData(const Program * = 0);
- ProgramData(const ProgramData &);
- ProgramData(const ProgramData &, const Program *);
- ProgramData &operator=(const ProgramData &);
+ ProgramData(ProgramData &&);
~ProgramData();
private:
std::vector<Tag> get_uniform_tags() const;
void copy_uniform(const ProgramData &, Tag);
+ void copy_uniforms(const ProgramData &);
private:
int find_uniform_index(Tag) const;
std::vector<ProgramBlock>::iterator get_program(const Program &) const;
+ void recreate_buffer() const;
void update_block_uniform_indices(SharedBlock &, const ReflectData::UniformBlockInfo &) const;
void update_block(SharedBlock &, const ReflectData::UniformBlockInfo &) const;
public:
/** Creates or updates UniformBlocks for a specific program if necessary,
then sets them to the PipelineState. */
- void apply(const Program &, PipelineState &) const;
+ void apply(const Program &, PipelineState &, unsigned) const;
void set_debug_name(const std::string &);
};