X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.h;h=380f352a66376b6b168805bea5f6c46f4ee0cae5;hb=1b23728908f5ec9beb08b2b70737c3903745fddc;hp=a05674dd21927304d3755aa5f0118870ef81729e;hpb=fcde8390ad577fe434dcd4b29e0f410d29f867c9;p=libs%2Fgl.git diff --git a/source/render/programdata.h b/source/render/programdata.h index a05674dd..380f352a 100644 --- a/source/render/programdata.h +++ b/source/render/programdata.h @@ -6,7 +6,7 @@ #include #include "datatype.h" #include "matrix.h" -#include "program.h" +#include "reflectdata.h" #include "tag.h" #include "uniform.h" #include "vector.h" @@ -23,6 +23,8 @@ public: class Buffer; class BufferBackedUniformBlock; +class PipelineState; +class Program; class UniformBlock; struct Color; @@ -111,29 +113,29 @@ private: struct SharedBlock { - Program::LayoutHash block_hash; + ReflectData::LayoutHash block_hash; Mask used; Mask dirty; UniformBlock *block; union { - UInt8 type_flag; - UInt8 values[16]; + std::uint8_t type_flag; + std::uint8_t values[16]; struct { - UInt8 type_flag; - UInt8 *values; + std::uint8_t type_flag; + std::uint8_t *values; } dynamic; } indices; - SharedBlock(Program::LayoutHash); + SharedBlock(ReflectData::LayoutHash); - const UInt8 *get_uniform_indices() const; + const std::uint8_t *get_uniform_indices() const; }; struct ProgramBlock { - Program::LayoutHash prog_hash; + ReflectData::LayoutHash prog_hash; int bind_point; int block_index; union @@ -146,7 +148,7 @@ private: } masks; }; - ProgramBlock(Program::LayoutHash); + ProgramBlock(ReflectData::LayoutHash); }; // XXX All these mutables are a bit silly, but I'm out of better ideas @@ -246,13 +248,12 @@ public: private: int find_uniform_index(Tag) const; std::vector::iterator get_program(const Program &) const; - void update_block_uniform_indices(SharedBlock &, const Program::UniformBlockInfo &) const; - void update_block(SharedBlock &, const Program::UniformBlockInfo &) const; + void update_block_uniform_indices(SharedBlock &, const ReflectData::UniformBlockInfo &) const; + void update_block(SharedBlock &, const ReflectData::UniformBlockInfo &) const; + std::vector::const_iterator prepare_program(const Program &) const; public: - /** Applies uniform blocks for the currently bound program, creating them - if needed. */ - void apply() const; + void apply(const Program &, PipelineState &) const; void set_debug_name(const std::string &); };