mirror of https://github.com/WerWolv/ImHex.git
nodes: Added Float <-> Buffer casting nodes
This commit is contained in:
parent
015266181e
commit
cc9dc90655
|
@ -402,8 +402,8 @@ namespace hex::plugin::builtin {
|
||||||
void process() override {
|
void process() override {
|
||||||
auto input = this->getIntegerOnInput(0);
|
auto input = this->getIntegerOnInput(0);
|
||||||
|
|
||||||
std::vector<u8> output(sizeof(u64), 0x00);
|
std::vector<u8> output(sizeof(input), 0x00);
|
||||||
std::memcpy(output.data(), &input, sizeof(u64));
|
std::memcpy(output.data(), &input, sizeof(input));
|
||||||
|
|
||||||
this->setBufferOnOutput(1, output);
|
this->setBufferOnOutput(1, output);
|
||||||
}
|
}
|
||||||
|
@ -416,16 +416,47 @@ namespace hex::plugin::builtin {
|
||||||
void process() override {
|
void process() override {
|
||||||
auto input = this->getBufferOnInput(0);
|
auto input = this->getBufferOnInput(0);
|
||||||
|
|
||||||
if (input.empty() || input.size() > sizeof(u64))
|
i64 output = 0;
|
||||||
|
if (input.empty() || input.size() > sizeof(output))
|
||||||
throwNodeError("Buffer is empty or bigger than 64 bits");
|
throwNodeError("Buffer is empty or bigger than 64 bits");
|
||||||
|
|
||||||
u64 output = 0;
|
|
||||||
std::memcpy(&output, input.data(), input.size());
|
std::memcpy(&output, input.data(), input.size());
|
||||||
|
|
||||||
this->setIntegerOnOutput(1, output);
|
this->setIntegerOnOutput(1, output);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NodeCastFloatToBuffer : public dp::Node {
|
||||||
|
public:
|
||||||
|
NodeCastFloatToBuffer() : Node("hex.builtin.nodes.casting.float_to_buffer.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Float, "hex.builtin.nodes.common.input"), dp::Attribute(dp::Attribute::IOType::Out, dp::Attribute::Type::Buffer, "hex.builtin.nodes.common.output") }) { }
|
||||||
|
|
||||||
|
void process() override {
|
||||||
|
auto input = this->getFloatOnInput(0);
|
||||||
|
|
||||||
|
std::vector<u8> output(sizeof(input), 0x00);
|
||||||
|
std::memcpy(output.data(), &input, sizeof(input));
|
||||||
|
|
||||||
|
this->setBufferOnOutput(1, output);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class NodeCastBufferToFloat : public dp::Node {
|
||||||
|
public:
|
||||||
|
NodeCastBufferToFloat() : Node("hex.builtin.nodes.casting.buffer_to_float.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Buffer, "hex.builtin.nodes.common.input"), dp::Attribute(dp::Attribute::IOType::Out, dp::Attribute::Type::Float, "hex.builtin.nodes.common.output") }) { }
|
||||||
|
|
||||||
|
void process() override {
|
||||||
|
auto input = this->getBufferOnInput(0);
|
||||||
|
|
||||||
|
float output = 0;
|
||||||
|
if (input.empty() || input.size() != sizeof(output))
|
||||||
|
throwNodeError("Buffer is empty or not the right size to fit a float");
|
||||||
|
|
||||||
|
std::memcpy(&output, input.data(), input.size());
|
||||||
|
|
||||||
|
this->setFloatOnOutput(1, output);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class NodeArithmeticAdd : public dp::Node {
|
class NodeArithmeticAdd : public dp::Node {
|
||||||
public:
|
public:
|
||||||
NodeArithmeticAdd() : Node("hex.builtin.nodes.arithmetic.add.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.input.a"), dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.input.b"), dp::Attribute(dp::Attribute::IOType::Out, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.output") }) { }
|
NodeArithmeticAdd() : Node("hex.builtin.nodes.arithmetic.add.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.input.a"), dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.input.b"), dp::Attribute(dp::Attribute::IOType::Out, dp::Attribute::Type::Integer, "hex.builtin.nodes.common.output") }) { }
|
||||||
|
@ -1038,6 +1069,8 @@ namespace hex::plugin::builtin {
|
||||||
|
|
||||||
ContentRegistry::DataProcessorNode::add<NodeCastIntegerToBuffer>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.int_to_buffer");
|
ContentRegistry::DataProcessorNode::add<NodeCastIntegerToBuffer>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.int_to_buffer");
|
||||||
ContentRegistry::DataProcessorNode::add<NodeCastBufferToInteger>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.buffer_to_int");
|
ContentRegistry::DataProcessorNode::add<NodeCastBufferToInteger>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.buffer_to_int");
|
||||||
|
ContentRegistry::DataProcessorNode::add<NodeCastFloatToBuffer>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.float_to_buffer");
|
||||||
|
ContentRegistry::DataProcessorNode::add<NodeCastBufferToFloat>("hex.builtin.nodes.casting", "hex.builtin.nodes.casting.buffer_to_float");
|
||||||
|
|
||||||
ContentRegistry::DataProcessorNode::add<NodeArithmeticAdd>("hex.builtin.nodes.arithmetic", "hex.builtin.nodes.arithmetic.add");
|
ContentRegistry::DataProcessorNode::add<NodeArithmeticAdd>("hex.builtin.nodes.arithmetic", "hex.builtin.nodes.arithmetic.add");
|
||||||
ContentRegistry::DataProcessorNode::add<NodeArithmeticSubtract>("hex.builtin.nodes.arithmetic", "hex.builtin.nodes.arithmetic.sub");
|
ContentRegistry::DataProcessorNode::add<NodeArithmeticSubtract>("hex.builtin.nodes.arithmetic", "hex.builtin.nodes.arithmetic.sub");
|
||||||
|
|
Loading…
Reference in New Issue