Code refactor: make Transform always affine, dropping last row.
This save a little memory and copying in the kernel by storing only a 4x3 matrix instead of a 4x4 matrix. We already did this in a few places, and those don't need to be special exceptions anymore now.
This commit is contained in:
@@ -196,7 +196,7 @@ void xml_read_node(XMLReader& reader, Node *node, xml_node xml_node)
|
||||
case SocketType::TRANSFORM:
|
||||
{
|
||||
array<Transform> value;
|
||||
xml_read_float_array<16>(value, attr);
|
||||
xml_read_float_array<12>(value, attr);
|
||||
if(value.size() == 1) {
|
||||
node->set(socket, value[0]);
|
||||
}
|
||||
@@ -205,7 +205,7 @@ void xml_read_node(XMLReader& reader, Node *node, xml_node xml_node)
|
||||
case SocketType::TRANSFORM_ARRAY:
|
||||
{
|
||||
array<Transform> value;
|
||||
xml_read_float_array<16>(value, attr);
|
||||
xml_read_float_array<12>(value, attr);
|
||||
node->set(socket, value);
|
||||
break;
|
||||
}
|
||||
@@ -400,12 +400,10 @@ xml_node xml_write_node(Node *node, xml_node xml_root)
|
||||
{
|
||||
Transform tfm = node->get_transform(socket);
|
||||
std::stringstream ss;
|
||||
for(int i = 0; i < 4; i++) {
|
||||
ss << string_printf("%g %g %g %g", (double)tfm[i][0], (double)tfm[i][1], (double)tfm[i][2], (double)tfm[i][3]);
|
||||
if(i != 3) {
|
||||
ss << " ";
|
||||
}
|
||||
for(int i = 0; i < 3; i++) {
|
||||
ss << string_printf("%g %g %g %g ", (double)tfm[i][0], (double)tfm[i][1], (double)tfm[i][2], (double)tfm[i][3]);
|
||||
}
|
||||
ss << string_printf("%g %g %g %g", 0.0, 0.0, 0.0, 1.0);
|
||||
attr = ss.str().c_str();
|
||||
break;
|
||||
}
|
||||
@@ -416,11 +414,12 @@ xml_node xml_write_node(Node *node, xml_node xml_root)
|
||||
for(size_t j = 0; j < value.size(); j++) {
|
||||
const Transform& tfm = value[j];
|
||||
|
||||
for(int i = 0; i < 4; i++) {
|
||||
ss << string_printf("%g %g %g %g", (double)tfm[i][0], (double)tfm[i][1], (double)tfm[i][2], (double)tfm[i][3]);
|
||||
if(j != value.size() - 1 || i != 3) {
|
||||
ss << " ";
|
||||
}
|
||||
for(int i = 0; i < 3; i++) {
|
||||
ss << string_printf("%g %g %g %g ", (double)tfm[i][0], (double)tfm[i][1], (double)tfm[i][2], (double)tfm[i][3]);
|
||||
}
|
||||
ss << string_printf("%g %g %g %g", 0.0, 0.0, 0.0, 1.0);
|
||||
if(j != value.size() - 1) {
|
||||
ss << " ";
|
||||
}
|
||||
}
|
||||
attr = ss.str().c_str();
|
||||
|
||||
Reference in New Issue
Block a user