nodes: Added Image visualizer
Supports JPG, PNG, TGA, BMP, PSD, GIF, HDR and PIC via stb_image
This commit is contained in:
parent
16a9d0c0c6
commit
69c48edfdf
@ -29,8 +29,8 @@ enum ImGuiCustomCol {
|
|||||||
namespace ImGui {
|
namespace ImGui {
|
||||||
|
|
||||||
struct Texture {
|
struct Texture {
|
||||||
ImTextureID textureId;
|
ImTextureID textureId = nullptr;
|
||||||
int width, height;
|
int width = 0, height = 0;
|
||||||
|
|
||||||
[[nodiscard]] constexpr bool valid() const noexcept {
|
[[nodiscard]] constexpr bool valid() const noexcept {
|
||||||
return this->textureId != nullptr;
|
return this->textureId != nullptr;
|
||||||
@ -43,6 +43,12 @@ namespace ImGui {
|
|||||||
[[nodiscard]] auto size() const noexcept {
|
[[nodiscard]] auto size() const noexcept {
|
||||||
return ImVec2(this->width, this->height);
|
return ImVec2(this->width, this->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] constexpr auto aspectRatio() const noexcept {
|
||||||
|
if (this->height == 0) return 1.0F;
|
||||||
|
|
||||||
|
return float(this->width) / float(this->height);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int UpdateStringSizeCallback(ImGuiInputTextCallbackData *data);
|
int UpdateStringSizeCallback(ImGuiInputTextCallbackData *data);
|
||||||
|
@ -835,6 +835,27 @@ namespace hex::plugin::builtin {
|
|||||||
size_t m_highestCount = 0;
|
size_t m_highestCount = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NodeVisualizerImage : public dp::Node {
|
||||||
|
public:
|
||||||
|
NodeVisualizerImage() : Node("hex.builtin.nodes.visualizer.image.header", { dp::Attribute(dp::Attribute::IOType::In, dp::Attribute::Type::Buffer, "hex.builtin.nodes.visualizer.image.input") }) { }
|
||||||
|
|
||||||
|
void drawNode() override {
|
||||||
|
ImGui::Image(this->m_texture, scaled(ImVec2(this->m_texture.aspectRatio() * 200, 200)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void process() override {
|
||||||
|
auto rawData = this->getBufferOnInput(0);
|
||||||
|
|
||||||
|
if (this->m_texture.valid())
|
||||||
|
ImGui::UnloadImage(this->m_texture);
|
||||||
|
|
||||||
|
this->m_texture = ImGui::LoadImageFromMemory(rawData.data(), rawData.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
ImGui::Texture m_texture;
|
||||||
|
};
|
||||||
|
|
||||||
void registerDataProcessorNodes() {
|
void registerDataProcessorNodes() {
|
||||||
ContentRegistry::DataProcessorNode::add<NodeInteger>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.int");
|
ContentRegistry::DataProcessorNode::add<NodeInteger>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.int");
|
||||||
ContentRegistry::DataProcessorNode::add<NodeFloat>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.float");
|
ContentRegistry::DataProcessorNode::add<NodeFloat>("hex.builtin.nodes.constants", "hex.builtin.nodes.constants.float");
|
||||||
@ -883,6 +904,7 @@ namespace hex::plugin::builtin {
|
|||||||
ContentRegistry::DataProcessorNode::add<NodeCryptoAESDecrypt>("hex.builtin.nodes.crypto", "hex.builtin.nodes.crypto.aes");
|
ContentRegistry::DataProcessorNode::add<NodeCryptoAESDecrypt>("hex.builtin.nodes.crypto", "hex.builtin.nodes.crypto.aes");
|
||||||
|
|
||||||
ContentRegistry::DataProcessorNode::add<NodeVisualizerDigram>("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.digram");
|
ContentRegistry::DataProcessorNode::add<NodeVisualizerDigram>("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.digram");
|
||||||
|
ContentRegistry::DataProcessorNode::add<NodeVisualizerImage>("hex.builtin.nodes.visualizer", "hex.builtin.nodes.visualizer.image");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -607,6 +607,9 @@ namespace hex::plugin::builtin {
|
|||||||
{ "hex.builtin.nodes.visualizer.digram", "Digram" },
|
{ "hex.builtin.nodes.visualizer.digram", "Digram" },
|
||||||
{ "hex.builtin.nodes.visualizer.digram.header", "Digram Visualizer" },
|
{ "hex.builtin.nodes.visualizer.digram.header", "Digram Visualizer" },
|
||||||
{ "hex.builtin.nodes.visualizer.digram.input", "Input" },
|
{ "hex.builtin.nodes.visualizer.digram.input", "Input" },
|
||||||
|
{ "hex.builtin.nodes.visualizer.image", "Image" },
|
||||||
|
{ "hex.builtin.nodes.visualizer.image.header", "Image Visualizer" },
|
||||||
|
{ "hex.builtin.nodes.visualizer.image.input", "Input" },
|
||||||
|
|
||||||
|
|
||||||
{ "hex.builtin.tools.demangler", "Itanium/MSVC demangler" },
|
{ "hex.builtin.tools.demangler", "Itanium/MSVC demangler" },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user