Share retained stroke sampler dispatch helpers
This commit is contained in:
@@ -49,6 +49,29 @@ struct LegacyCanvasStrokeTextureBinding {
|
||||
int slot = 0;
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokeTextureInputDispatch {
|
||||
std::function<void(int)> activate_texture_unit;
|
||||
std::function<void()> bind_brush_tip;
|
||||
std::function<void()> unbind_brush_tip;
|
||||
std::function<void()> bind_stroke_destination;
|
||||
std::function<void()> unbind_stroke_destination;
|
||||
std::function<void()> bind_pattern;
|
||||
std::function<void()> unbind_pattern;
|
||||
std::function<void()> bind_mixer;
|
||||
std::function<void()> unbind_mixer;
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokeSamplerDispatch {
|
||||
std::function<void(int)> bind_brush_tip_sampler;
|
||||
std::function<void()> unbind_brush_tip_sampler;
|
||||
std::function<void(int)> bind_stroke_destination_sampler;
|
||||
std::function<void()> unbind_stroke_destination_sampler;
|
||||
std::function<void(int)> bind_pattern_sampler;
|
||||
std::function<void()> unbind_pattern_sampler;
|
||||
std::function<void(int)> bind_mixer_sampler;
|
||||
std::function<void()> unbind_mixer_sampler;
|
||||
};
|
||||
|
||||
struct LegacyCanvasStrokeFaceDirtyRequest {
|
||||
pp::renderer::Extent2D extent {};
|
||||
glm::vec4 previous_accumulated_dirty_box {};
|
||||
@@ -232,6 +255,165 @@ inline void unbind_legacy_canvas_stroke_texture_inputs(
|
||||
}
|
||||
}
|
||||
|
||||
inline void bind_legacy_canvas_stroke_texture_input(
|
||||
LegacyCanvasStrokeTextureInput input,
|
||||
const LegacyCanvasStrokeTextureInputDispatch& dispatch)
|
||||
{
|
||||
switch (input) {
|
||||
case LegacyCanvasStrokeTextureInput::brush_tip:
|
||||
if (dispatch.bind_brush_tip) {
|
||||
dispatch.bind_brush_tip();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::stroke_destination:
|
||||
if (dispatch.bind_stroke_destination) {
|
||||
dispatch.bind_stroke_destination();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::pattern:
|
||||
if (dispatch.bind_pattern) {
|
||||
dispatch.bind_pattern();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::mixer:
|
||||
if (dispatch.bind_mixer) {
|
||||
dispatch.bind_mixer();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
inline void unbind_legacy_canvas_stroke_texture_input(
|
||||
LegacyCanvasStrokeTextureInput input,
|
||||
const LegacyCanvasStrokeTextureInputDispatch& dispatch)
|
||||
{
|
||||
switch (input) {
|
||||
case LegacyCanvasStrokeTextureInput::brush_tip:
|
||||
if (dispatch.unbind_brush_tip) {
|
||||
dispatch.unbind_brush_tip();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::stroke_destination:
|
||||
if (dispatch.unbind_stroke_destination) {
|
||||
dispatch.unbind_stroke_destination();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::pattern:
|
||||
if (dispatch.unbind_pattern) {
|
||||
dispatch.unbind_pattern();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::mixer:
|
||||
if (dispatch.unbind_mixer) {
|
||||
dispatch.unbind_mixer();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
inline void bind_legacy_canvas_stroke_sampler_input(
|
||||
LegacyCanvasStrokeTextureInput input,
|
||||
int slot,
|
||||
const LegacyCanvasStrokeSamplerDispatch& dispatch)
|
||||
{
|
||||
switch (input) {
|
||||
case LegacyCanvasStrokeTextureInput::brush_tip:
|
||||
if (dispatch.bind_brush_tip_sampler) {
|
||||
dispatch.bind_brush_tip_sampler(slot);
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::stroke_destination:
|
||||
if (dispatch.bind_stroke_destination_sampler) {
|
||||
dispatch.bind_stroke_destination_sampler(slot);
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::pattern:
|
||||
if (dispatch.bind_pattern_sampler) {
|
||||
dispatch.bind_pattern_sampler(slot);
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::mixer:
|
||||
if (dispatch.bind_mixer_sampler) {
|
||||
dispatch.bind_mixer_sampler(slot);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
inline void unbind_legacy_canvas_stroke_sampler_input(
|
||||
LegacyCanvasStrokeTextureInput input,
|
||||
const LegacyCanvasStrokeSamplerDispatch& dispatch)
|
||||
{
|
||||
switch (input) {
|
||||
case LegacyCanvasStrokeTextureInput::brush_tip:
|
||||
if (dispatch.unbind_brush_tip_sampler) {
|
||||
dispatch.unbind_brush_tip_sampler();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::stroke_destination:
|
||||
if (dispatch.unbind_stroke_destination_sampler) {
|
||||
dispatch.unbind_stroke_destination_sampler();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::pattern:
|
||||
if (dispatch.unbind_pattern_sampler) {
|
||||
dispatch.unbind_pattern_sampler();
|
||||
}
|
||||
break;
|
||||
case LegacyCanvasStrokeTextureInput::mixer:
|
||||
if (dispatch.unbind_mixer_sampler) {
|
||||
dispatch.unbind_mixer_sampler();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t BindingCount>
|
||||
inline void bind_legacy_canvas_stroke_texture_inputs(
|
||||
const std::array<LegacyCanvasStrokeTextureBinding, BindingCount>& bindings,
|
||||
const LegacyCanvasStrokeTextureInputDispatch& dispatch)
|
||||
{
|
||||
for (const auto& binding : bindings) {
|
||||
if (dispatch.activate_texture_unit) {
|
||||
dispatch.activate_texture_unit(binding.slot);
|
||||
}
|
||||
bind_legacy_canvas_stroke_texture_input(binding.input, dispatch);
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t BindingCount>
|
||||
inline void unbind_legacy_canvas_stroke_texture_inputs(
|
||||
const std::array<LegacyCanvasStrokeTextureBinding, BindingCount>& bindings,
|
||||
const LegacyCanvasStrokeTextureInputDispatch& dispatch)
|
||||
{
|
||||
for (const auto& binding : bindings) {
|
||||
if (dispatch.activate_texture_unit) {
|
||||
dispatch.activate_texture_unit(binding.slot);
|
||||
}
|
||||
unbind_legacy_canvas_stroke_texture_input(binding.input, dispatch);
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t BindingCount>
|
||||
inline void bind_legacy_canvas_stroke_sampler_inputs(
|
||||
const std::array<LegacyCanvasStrokeTextureBinding, BindingCount>& bindings,
|
||||
const LegacyCanvasStrokeSamplerDispatch& dispatch)
|
||||
{
|
||||
for (const auto& binding : bindings) {
|
||||
bind_legacy_canvas_stroke_sampler_input(binding.input, binding.slot, dispatch);
|
||||
}
|
||||
}
|
||||
|
||||
template <std::size_t BindingCount>
|
||||
inline void unbind_legacy_canvas_stroke_sampler_inputs(
|
||||
const std::array<LegacyCanvasStrokeTextureBinding, BindingCount>& bindings,
|
||||
const LegacyCanvasStrokeSamplerDispatch& dispatch)
|
||||
{
|
||||
for (const auto& binding : bindings) {
|
||||
unbind_legacy_canvas_stroke_sampler_input(binding.input, dispatch);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Frames, typename BeginFrame, typename BeginFace, typename ExecuteSample, typename FinishFace>
|
||||
std::size_t execute_legacy_canvas_stroke_frame_samples(
|
||||
Frames&& frames,
|
||||
|
||||
Reference in New Issue
Block a user