X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Fprogramdata.cpp;h=cfd2c0f5257b0d45d341ff15119805ea96038474;hb=e70662d7812464159f2e47f4bebb69d88f89ae93;hp=31fc8fa262949b9b5ea5fa328012525ef6d03833;hpb=729a477b47e97aea41f3f0b5db551f02bf70d1ee;p=libs%2Fgl.git diff --git a/source/render/programdata.cpp b/source/render/programdata.cpp index 31fc8fa2..cfd2c0f5 100644 --- a/source/render/programdata.cpp +++ b/source/render/programdata.cpp @@ -1,7 +1,5 @@ #include -#include #include -#include #include #include "buffer.h" #include "color.h" @@ -19,11 +17,7 @@ namespace Msp { namespace GL { ProgramData::ProgramData(const Program *p): - tied_program(p), - generation(0), - last_buffer_block(0), - buffer(0), - dirty(0) + tied_program(p) { } // Blocks are intentionally left uncopied @@ -31,17 +25,11 @@ ProgramData::ProgramData(const ProgramData &other): tied_program(other.tied_program), uniforms(other.uniforms), uniform_data(other.uniform_data), - generation(other.generation), - last_buffer_block(0), - buffer(0), - dirty(0) + generation(other.generation) { } ProgramData::ProgramData(const ProgramData &other, const Program *p): - tied_program(p), - last_buffer_block(0), - buffer(0), - dirty(0) + tied_program(p) { if(tied_program) { @@ -72,6 +60,22 @@ ProgramData &ProgramData::operator=(const ProgramData &other) return *this; } +ProgramData::ProgramData(ProgramData &&other): + tied_program(other.tied_program), + uniforms(move(other.uniforms)), + uniform_data(move(other.uniform_data)), + generation(other.generation), + blocks(move(other.blocks)), + programs(move(other.programs)), + last_buffer_block(other.last_buffer_block), + buffer(other.buffer), + dirty(other.dirty), + debug_name(move(other.debug_name)) +{ + other.blocks.clear(); + other.buffer = 0; +} + ProgramData::~ProgramData() { for(SharedBlock &b: blocks) @@ -161,6 +165,11 @@ void ProgramData::uniform(Tag tag, int v) uniform(tag, INT, 1, &v); } +void ProgramData::uniform(Tag tag, unsigned v) +{ + uniform(tag, UNSIGNED_INT, 1, &v); +} + void ProgramData::uniform(Tag tag, float v) { uniform(tag, FLOAT, 1, &v); @@ -172,6 +181,12 @@ void ProgramData::uniform(Tag tag, int v0, int v1) uniform2(tag, va); } +void ProgramData::uniform(Tag tag, unsigned v0, unsigned v1) +{ + unsigned va[2] = { v0, v1 }; + uniform2(tag, va); +} + void ProgramData::uniform(Tag tag, float v0, float v1) { float va[2] = { v0, v1 }; @@ -183,6 +198,11 @@ void ProgramData::uniform2(Tag tag, const int *v) uniform(tag, INT_VEC2, 1, v); } +void ProgramData::uniform2(Tag tag, const unsigned *v) +{ + uniform(tag, UINT_VEC2, 1, v); +} + void ProgramData::uniform2(Tag tag, const float *v) { uniform(tag, FLOAT_VEC2, 1, v); @@ -194,6 +214,12 @@ void ProgramData::uniform(Tag tag, int v0, int v1, int v2) uniform3(tag, va); } +void ProgramData::uniform(Tag tag, unsigned v0, unsigned v1, unsigned v2) +{ + unsigned va[3] = { v0, v1, v2 }; + uniform3(tag, va); +} + void ProgramData::uniform(Tag tag, float v0, float v1, float v2) { float va[3] = { v0, v1, v2 }; @@ -205,6 +231,11 @@ void ProgramData::uniform3(Tag tag, const int *v) uniform(tag, INT_VEC3, 1, v); } +void ProgramData::uniform3(Tag tag, const unsigned *v) +{ + uniform(tag, UINT_VEC3, 1, v); +} + void ProgramData::uniform3(Tag tag, const float *v) { uniform(tag, FLOAT_VEC3, 1, v); @@ -216,6 +247,12 @@ void ProgramData::uniform(Tag tag, int v0, int v1, int v2, int v3) uniform4(tag, va); } +void ProgramData::uniform(Tag tag, unsigned v0, unsigned v1, unsigned v2, unsigned v3) +{ + unsigned va[4] = { v0, v1, v2, v3 }; + uniform4(tag, va); +} + void ProgramData::uniform(Tag tag, float v0, float v1, float v2, float v3) { float va[4] = { v0, v1, v2, v3 }; @@ -232,6 +269,11 @@ void ProgramData::uniform4(Tag tag, const int *v) uniform(tag, INT_VEC4, 1, v); } +void ProgramData::uniform4(Tag tag, const unsigned *v) +{ + uniform(tag, UINT_VEC4, 1, v); +} + void ProgramData::uniform4(Tag tag, const float *v) { uniform(tag, FLOAT_VEC4, 1, v); @@ -292,6 +334,11 @@ void ProgramData::uniform_array(Tag tag, unsigned n, const int *v) uniform(tag, INT, n, v); } +void ProgramData::uniform_array(Tag tag, unsigned n, const unsigned *v) +{ + uniform(tag, UNSIGNED_INT, n, v); +} + void ProgramData::uniform_array(Tag tag, unsigned n, const float *v) { uniform(tag, FLOAT, n, v); @@ -302,6 +349,11 @@ void ProgramData::uniform1_array(Tag tag, unsigned n, const int *v) uniform(tag, INT, n, v); } +void ProgramData::uniform1_array(Tag tag, unsigned n, const unsigned *v) +{ + uniform(tag, UNSIGNED_INT, n, v); +} + void ProgramData::uniform1_array(Tag tag, unsigned n, const float *v) { uniform(tag, FLOAT, n, v); @@ -312,6 +364,11 @@ void ProgramData::uniform2_array(Tag tag, unsigned n, const int *v) uniform(tag, INT_VEC2, n, v); } +void ProgramData::uniform2_array(Tag tag, unsigned n, const unsigned *v) +{ + uniform(tag, UINT_VEC2, n, v); +} + void ProgramData::uniform2_array(Tag tag, unsigned n, const float *v) { uniform(tag, FLOAT_VEC2, n, v); @@ -322,6 +379,11 @@ void ProgramData::uniform3_array(Tag tag, unsigned n, const int *v) uniform(tag, INT_VEC3, n, v); } +void ProgramData::uniform3_array(Tag tag, unsigned n, const unsigned *v) +{ + uniform(tag, INT_VEC3, n, v); +} + void ProgramData::uniform3_array(Tag tag, unsigned n, const float *v) { uniform(tag, FLOAT_VEC3, n, v); @@ -332,6 +394,11 @@ void ProgramData::uniform4_array(Tag tag, unsigned n, const int *v) uniform(tag, INT_VEC4, n, v); } +void ProgramData::uniform4_array(Tag tag, unsigned n, const unsigned *v) +{ + uniform(tag, UINT_VEC4, n, v); +} + void ProgramData::uniform4_array(Tag tag, unsigned n, const float *v) { uniform(tag, FLOAT_VEC4, n, v); @@ -656,14 +723,6 @@ void ProgramData::set_debug_name(const string &name) } -ProgramData::TaggedUniform::TaggedUniform(): - type(VOID), - array_size(0), - data_offset(0), - data_size(0) -{ } - - ProgramData::SharedBlock::SharedBlock(ReflectData::LayoutHash h): block_hash(h), used(0),