仍有bug
This commit is contained in:
@@ -28,8 +28,6 @@ struct Afterglow_Prepare_Buffer {
|
||||
}
|
||||
struct Afterglow::Impl
|
||||
: Base::next_Impl<Impl>, ::Render_Frame_Completion {
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
Impl(renderive_Owner<Frequency_Axis> frequency,
|
||||
renderive_Owner<Axis> power) : frequency_axis(std::move(frequency)),
|
||||
power_axis(std::move(power)) {}
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
#include <deque>
|
||||
#include <numbers>
|
||||
#include <optional>
|
||||
namespace renderive {
|
||||
namespace detail {
|
||||
namespace renderive::detail {
|
||||
namespace {
|
||||
struct Timed_Point {
|
||||
PointF point;
|
||||
@@ -20,8 +19,6 @@ using Constellation_History = Plottable_History_Real_Time_Data<Timed_Point, std:
|
||||
}
|
||||
struct Constellation_Diagram::Impl
|
||||
: Base::next_Impl<Impl> {
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
struct Prepare_Buffer {
|
||||
std::vector<PointF> anchors;
|
||||
std::vector<PointF> points;
|
||||
@@ -64,9 +61,9 @@ Constellation_Diagram::Observer Constellation_Diagram::capture_observation() con
|
||||
void Constellation_Diagram::fit_square_to_axes() {
|
||||
const auto state = Renderable::state<State>();
|
||||
const double side = std::max(state.i_range.size(), state.q_range.size());
|
||||
d_func<Impl>().i_axis->set < &Axis_Properties::coordinates > (
|
||||
d_func<Impl>().i_axis->set<&Axis_Properties::coordinates>(
|
||||
Range{state.i_range.center() - side * 0.5, state.i_range.center() + side * 0.5});
|
||||
d_func<Impl>().q_axis->set < &Axis_Properties::coordinates > (
|
||||
d_func<Impl>().q_axis->set<&Axis_Properties::coordinates>(
|
||||
Range{state.q_range.center() + side * 0.5, state.q_range.center() - side * 0.5});
|
||||
}
|
||||
void Constellation_Diagram::Impl::prepare_frame(
|
||||
@@ -108,4 +105,3 @@ void Constellation_Diagram::Impl::paint(Painter& painter,
|
||||
Brush{state.point_color, Brush_Style::Solid});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,15 +7,12 @@
|
||||
#include <deque>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
namespace renderive {
|
||||
namespace detail {
|
||||
namespace renderive::detail {
|
||||
namespace {
|
||||
using Frequency_Trace_History = Plottable_History_Real_Time_Data<std::pair<int, double>, std::deque<std::pair<int, double>>>;
|
||||
}
|
||||
struct Frequency_Trace::Impl
|
||||
: Base::next_Impl<Impl> {
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
struct Prepare_Buffer {
|
||||
std::vector<PointF> points;
|
||||
};
|
||||
@@ -78,4 +75,3 @@ void Frequency_Trace::Impl::paint(Painter& painter,
|
||||
control.render_state<State>(view).pen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
#include <cmath>
|
||||
#include <sstream>
|
||||
#include <optional>
|
||||
namespace renderive {
|
||||
namespace detail {
|
||||
namespace renderive::detail {
|
||||
namespace {
|
||||
struct Selection_Interaction {
|
||||
bool selecting{};
|
||||
@@ -24,8 +23,6 @@ struct Selection_Rectangle_Overlay::Impl
|
||||
: Base::next_Impl<Impl>,
|
||||
Renderable_Event_Handler {
|
||||
using Observer = Selection_Rectangle_Overlay::Observer;
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
struct Prepared_Region {
|
||||
RectF pixels;
|
||||
std::string label;
|
||||
@@ -175,4 +172,3 @@ void Selection_Rectangle_Overlay::Impl::paint(
|
||||
state.selection_brush);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
#include <cmath>
|
||||
#include <deque>
|
||||
#include <optional>
|
||||
namespace renderive {
|
||||
namespace detail {
|
||||
namespace renderive::detail {
|
||||
namespace {
|
||||
using Sweep_Spectrum_History = Plottable_History_Real_Time_Data<std::vector<double>, std::deque<std::vector<double>>>;
|
||||
std::vector<double> flatten(const std::deque<std::vector<double>>& blocks) {
|
||||
@@ -20,8 +19,6 @@ std::vector<double> flatten(const std::deque<std::vector<double>>& blocks) {
|
||||
struct Sweep_Spectrum::Impl
|
||||
: Base::next_Impl<Impl> {
|
||||
using Observer = Sweep_Spectrum::Observer;
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
friend struct Sweep_Spectrum::Observer;
|
||||
struct Prepare_Buffer {
|
||||
std::vector<PointF> points;
|
||||
@@ -117,4 +114,3 @@ void Sweep_Spectrum::Impl::paint(Painter& painter,
|
||||
state.current_frequency_pen);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,8 +63,6 @@ struct Waterfall::Impl
|
||||
Renderable_Event_Handler,
|
||||
::Render_Frame_Completion {
|
||||
using Observer = Waterfall::Observer;
|
||||
static_assert(inheritance::Inherits_Chain_Parent<
|
||||
Impl, Base::next_Impl<Impl>>);
|
||||
Impl(renderive_Owner<Frequency_Axis> frequency,
|
||||
renderive_Owner<Time_Axis> time) : frequency_axis(std::move(frequency)), time_axis(std::move(time)) {}
|
||||
renderive_Owner<Frequency_Axis> frequency_axis;
|
||||
|
||||
@@ -31,8 +31,7 @@ struct LIB_DECL Waterfall : Renderable<Waterfall> {
|
||||
Render_Partition_Mode partition_mode{Render_Partition_Mode::Automatic};
|
||||
Positive_Count partition_count;
|
||||
bool visible_range_only{true};
|
||||
Image_Interpolation_Mode interpolation_mode =
|
||||
Image_Interpolation_Mode::Nearest;
|
||||
Image_Interpolation_Mode interpolation_mode = Image_Interpolation_Mode::Nearest;
|
||||
Color_Map color_map;
|
||||
};
|
||||
struct Observer : next_Observer<Observer> {
|
||||
|
||||
@@ -14,7 +14,7 @@ struct Blend2D_Color_Cache final : ::Color_Cache {
|
||||
[[nodiscard]] Size size() const noexcept;
|
||||
[[nodiscard]] Image_View view() const noexcept;
|
||||
private:
|
||||
friend class Painter;
|
||||
friend struct Painter;
|
||||
BLImage image_;
|
||||
};
|
||||
struct Painter {
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace renderive {
|
||||
class Abs_Axis;
|
||||
namespace detail {
|
||||
class Paint_Overlay;
|
||||
struct Paint_Overlay;
|
||||
template <class Renderable_Type, class Axis_Type> requires std::derived_from<Renderable_Type, Renderable> && std::derived_from<Axis_Type, Abs_Axis>
|
||||
void attach_renderable_dependency(::Scene_2D_Base::Attach_Builder& builder, const renderive_Owner<Renderable_Type>& renderable, const renderive_Owner<Axis_Type>& axis) {
|
||||
if (!axis) return;
|
||||
@@ -41,12 +41,12 @@ struct Renderable_Builder {
|
||||
Renderable_Builder(Properties properties, Validator validator, ::Scene_2D_Base::Attach_Builder* attach_builder = nullptr) : properties(std::move(properties)), validator(std::move(validator)), attach_builder_(attach_builder) {}
|
||||
template <auto Member, Property_Member_Assignable<Properties, Member> Value>
|
||||
Self& set(Value&& value) {
|
||||
properties.*Member = std::forward < Value > (value);
|
||||
properties.*Member = std::forward<Value>(value);
|
||||
return *this;
|
||||
}
|
||||
template <Property_Configurator<Properties> Configure>
|
||||
Self& configure(Configure&& configure) {
|
||||
std::invoke(std::forward < Configure > (configure), properties);
|
||||
std::invoke(std::forward<Configure>(configure), properties);
|
||||
return *this;
|
||||
}
|
||||
const Properties& properties_value() const noexcept {
|
||||
|
||||
@@ -51,6 +51,10 @@ struct detail::Render_Scene_2D::Impl
|
||||
std::shared_ptr<const Frame_Control_Strategy_Base> frame_control_strategy() const override {
|
||||
return frame_control->runtime();
|
||||
}
|
||||
void replace_frame_control_strategy(
|
||||
std::shared_ptr<Frame_Control_Strategy_Base> strategy) override {
|
||||
frame_control->replace(std::move(strategy));
|
||||
}
|
||||
std::shared_ptr<Color_Cache> make_renderable_color_cache() override {
|
||||
std::pmr::polymorphic_allocator<detail::Blend2D_Color_Cache>
|
||||
allocator(&memory_resource());
|
||||
|
||||
@@ -88,21 +88,24 @@ protected:
|
||||
using Editor_Base::Editor_Base;
|
||||
};
|
||||
public:
|
||||
struct State : Base::template next_State<State> {
|
||||
struct State_Fields {
|
||||
Size viewport;
|
||||
Color background = Color::black();
|
||||
};
|
||||
struct State : Base::template next_State<State>, State_Fields {
|
||||
[[nodiscard]] bool operator==(const State& other) const {
|
||||
return viewport == other.viewport &&
|
||||
background == other.background;
|
||||
}
|
||||
};
|
||||
struct Observer : Base::template next_Observer<Observer> {
|
||||
struct Observer_Fields {
|
||||
State state;
|
||||
std::size_t renderable_count{};
|
||||
double frequency_hz{};
|
||||
std::uint64_t next_refresh_interval_ns{};
|
||||
bool view_active{};
|
||||
};
|
||||
struct Observer : Base::template next_Observer<Observer>, Observer_Fields {};
|
||||
[[nodiscard]] ::renderive_Owner<::renderive::Renderable> root_renderable() const;
|
||||
void dispatch_event(const Event& event);
|
||||
[[nodiscard]] auto render_frame(bool force = false) -> Expected<Plot_Render_Status, Plot_Render_Frame_Error>;
|
||||
|
||||
@@ -31,5 +31,21 @@ TEST(RenderScene2DIntegration, FrameImageMatchesConfiguredViewport) {
|
||||
});
|
||||
}
|
||||
|
||||
TEST(RenderScene2DIntegration, FrameStrategyIsReplacedInsideRenderableEdit) {
|
||||
Render_Scene_2D::State state;
|
||||
state.viewport = {48, 27};
|
||||
auto scene = Render_Scene_2D::Builder{state}.build(
|
||||
std::make_shared<Low_Latency_Render_Scene_2D_Strategy>());
|
||||
const auto operation = scene->edit_renderables(
|
||||
[](Scene_2D_Base::Renderable_Editor& editor) {
|
||||
editor.replace_frame_control_strategy(
|
||||
std::make_shared<Manual_Render_Scene_2D_Strategy>());
|
||||
});
|
||||
ASSERT_EQ(operation.wait(), Scene_Edit_Error::none);
|
||||
EXPECT_NE(std::dynamic_pointer_cast<Manual_Render_Scene_2D_Strategy>(
|
||||
scene->frame_control_strategy()),
|
||||
nullptr);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace renderive
|
||||
|
||||
Reference in New Issue
Block a user