pgraph: fix alignment error in 32-bit Windows with Eigen

Fixes #251
This commit is contained in:
rdb 2018-02-17 17:49:36 +01:00
parent ab7dbebf3f
commit 854d736882
4 changed files with 41 additions and 4 deletions

View File

@ -3262,7 +3262,7 @@ get_shader() const {
*
*/
void NodePath::
set_shader_input(ShaderInput inp) {
set_shader_input(const ShaderInput &inp) {
nassertv_always(!is_empty());
PandaNode *pnode = node();
@ -3278,6 +3278,26 @@ set_shader_input(ShaderInput inp) {
}
}
/**
*
*/
void NodePath::
set_shader_input(ShaderInput &&inp) {
nassertv_always(!is_empty());
PandaNode *pnode = node();
const RenderAttrib *attrib =
pnode->get_attrib(ShaderAttrib::get_class_slot());
if (attrib != nullptr) {
const ShaderAttrib *sa = (const ShaderAttrib *)attrib;
pnode->set_attrib(sa->set_shader_input(move(inp)));
} else {
// Create a new ShaderAttrib for this node.
CPT(ShaderAttrib) sa = DCAST(ShaderAttrib, ShaderAttrib::make());
pnode->set_attrib(sa->set_shader_input(move(inp)));
}
}
/**
*
*/

View File

@ -629,7 +629,8 @@ PUBLISHED:
void set_shader_auto(BitMask32 shader_switch, int priority=0);
void clear_shader();
void set_shader_input(ShaderInput input);
void set_shader_input(const ShaderInput &input);
void set_shader_input(ShaderInput &&input);
INLINE void set_shader_input(CPT_InternalName id, Texture *tex, const SamplerState &sampler, int priority=0);
INLINE void set_shader_input(CPT_InternalName id, Texture *tex, bool read, bool write, int z=-1, int n=0, int priority=0);

View File

@ -195,7 +195,22 @@ clear_flag(int flag) const {
*
*/
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(ShaderInput input) const {
set_shader_input(const ShaderInput &input) const {
ShaderAttrib *result = new ShaderAttrib(*this);
Inputs::iterator i = result->_inputs.find(input.get_name());
if (i == result->_inputs.end()) {
result->_inputs.insert(Inputs::value_type(input.get_name(), input));
} else {
i->second = input;
}
return return_new(result);
}
/**
*
*/
CPT(RenderAttrib) ShaderAttrib::
set_shader_input(ShaderInput &&input) const {
ShaderAttrib *result = new ShaderAttrib(*this);
Inputs::iterator i = result->_inputs.find(input.get_name());
if (i == result->_inputs.end()) {

View File

@ -71,7 +71,8 @@ PUBLISHED:
CPT(RenderAttrib) clear_shader() const;
// Shader Inputs
CPT(RenderAttrib) set_shader_input(ShaderInput input) const;
CPT(RenderAttrib) set_shader_input(const ShaderInput &input) const;
CPT(RenderAttrib) set_shader_input(ShaderInput &&input) const;
public:
INLINE CPT(RenderAttrib) set_shader_input(CPT_InternalName id, Texture *tex, int priority=0) const;