// Original File By Emil Ernerfeldt 2018 // https://github.com/emilk/imgui_software_renderer // LICENSE: // This software is dual-licensed to the public domain and under the following // license: you are granted a perpetual, irrevocable license to copy, modify, // publish, and distribute this file as you see fit. // WHAT: // This is a software renderer for Dear ImGui. // It is decently fast, but has a lot of room for optimization. // The goal was to get something fast and decently accurate in not too many lines of code. // LIMITATIONS: // * It is not pixel-perfect, but it is good enough for must use cases. // * It does not support painting with any other texture than the default font texture. #pragma once #include namespace imgui_sw { struct SwOptions { bool optimize_text = true; // No reason to turn this off. bool optimize_rectangles = true; // No reason to turn this off. }; struct Stats { int uniform_triangle_pixels = 0; int textured_triangle_pixels = 0; int gradient_triangle_pixels = 0; int font_pixels = 0; double uniform_rectangle_pixels = 0; double textured_rectangle_pixels = 0; double gradient_rectangle_pixels = 0; double gradient_textured_rectangle_pixels = 0; }; /// Optional: tweak ImGui style to make it render faster. void make_style_fast(); /// Undo what make_style_fast did. void restore_style(); /// Call once a the start of your program. void bind_imgui_painting(); /// The buffer is assumed to follow how ImGui packs pixels, i.e. ABGR by default. /// Change with IMGUI_USE_BGRA_PACKED_COLOR. /// If width/height differs from ImGui::GetIO().DisplaySize then /// the function scales the UI to fit the given pixel buffer. void paint_imgui(uint32_t* pixels, int width_pixels, int height_pixels, const SwOptions& options = {}); /// Free the resources allocated by bind_imgui_painting. void unbind_imgui_painting(); /// Show ImGui controls for rendering options if you want to. bool show_options(SwOptions* io_options); /// Show rendering stats in an ImGui window if you want to. void show_stats(); Stats get_stats(); } // namespace imgui_sw