#include <ShAttrib.hpp>
Inheritance diagram for SH::ShAttrib< N, Binding, T, Swizzled >:
Public Types | |
typedef T | storage_type |
typedef ShHostType< T >::type | host_type |
typedef ShMemType< T >::type | mem_type |
typedef ShAttrib< N, SH_INPUT, T > | InputType |
typedef ShAttrib< N, SH_OUTPUT, T > | OutputType |
typedef ShAttrib< N, SH_INOUT, T > | InOutType |
typedef ShAttrib< N, SH_TEMP, T > | TempType |
typedef ShAttrib< N, SH_CONST, T > | ConstType |
Public Member Functions | |
template<typename T2> | |
ShAttrib (const ShGeneric< N, T2 > &other) | |
ShAttrib (const ShAttrib< N, Binding, T, Swizzled > &other) | |
template<typename T2> | |
ShAttrib (const ShAttrib< N, Binding, T2, Swizzled > &other) | |
ShAttrib (const ShVariableNodePtr &node, const ShSwizzle &swizzle, bool neg) | |
ShAttrib (host_type data[N]) | |
template<typename T2> | |
ShAttrib & | operator= (const ShGeneric< N, T2 > &other) |
template<typename T2> | |
ShAttrib & | operator= (const ShAttrib< N, Binding, T2, Swizzled > &other) |
ShAttrib & | operator= (const ShAttrib< N, Binding, T, Swizzled > &other) |
ShAttrib & | operator= (const ShProgram &prg) |
template<typename T2> | |
ShAttrib & | operator+= (const ShGeneric< N, T2 > &right) |
template<typename T2> | |
ShAttrib & | operator-= (const ShGeneric< N, T2 > &right) |
template<typename T2> | |
ShAttrib & | operator *= (const ShGeneric< N, T2 > &right) |
template<typename T2> | |
ShAttrib & | operator/= (const ShGeneric< N, T2 > &right) |
template<typename T2> | |
ShAttrib & | operator%= (const ShGeneric< N, T2 > &right) |
ShAttrib & | operator *= (host_type) |
ShAttrib & | operator/= (host_type) |
ShAttrib & | operator%= (host_type) |
ShAttrib & | operator+= (host_type) |
ShAttrib & | operator-= (host_type) |
template<typename T2> | |
ShAttrib & | operator+= (const ShGeneric< 1, T2 > &) |
template<typename T2> | |
ShAttrib & | operator-= (const ShGeneric< 1, T2 > &) |
template<typename T2> | |
ShAttrib & | operator *= (const ShGeneric< 1, T2 > &) |
template<typename T2> | |
ShAttrib & | operator/= (const ShGeneric< 1, T2 > &) |
template<typename T2> | |
ShAttrib & | operator%= (const ShGeneric< 1, T2 > &) |
ShAttrib< 1, Binding, T, true > | operator() (int) const |
ShAttrib< 2, Binding, T, true > | operator() (int, int) const |
ShAttrib< 3, Binding, T, true > | operator() (int, int, int) const |
ShAttrib< 4, Binding, T, true > | operator() (int, int, int, int) const |
ShAttrib< 1, Binding, T, true > | operator[] (int) const |
template<int N2> | |
ShAttrib< N2, Binding, T, true > | swiz (int indices[]) const |
ShAttrib | operator- () const |
Static Public Attributes | |
static const ShBindingType | binding_type |
static const ShSemanticType | semantic_type |
The reason we have the Swizzle template argument is so that swizzled variables, which need to be copied (i.e. have an ASN statement generated) when another variable is initialized through them, may otherwise be simply placed into new variables (through copy constructor eliding, as per paragraph 12.8.15 of the C++ standard), causing variables to share ShVariableNodes when they shouldn't. By making swizzled variables separate types we enforce calling a conversion constructor instead, which cannot be elided. If this paragraph confuses you, and you're not modifying Sh internals, you may safely ignore it.
Definition at line 61 of file ShAttrib.hpp.