Improved Player view of pre- and post-filtered images

This commit is contained in:
Bruno Herbelin
2022-05-23 19:31:36 +02:00
parent 8852914ceb
commit ed7d42cf6d
2 changed files with 44 additions and 27 deletions

View File

@@ -375,8 +375,7 @@ void ImageFilter::draw (FrameBuffer *input)
if (buffers_.first != nullptr) if (buffers_.first != nullptr)
delete buffers_.first; delete buffers_.first;
// FBO with mipmapping // FBO with mipmapping
FrameBuffer::FrameBufferFlags f = input_->flags() | FrameBuffer::FrameBuffer_mipmap; buffers_.first = new FrameBuffer( input_->resolution(), input_->flags() );
buffers_.first = new FrameBuffer( input_->resolution(), f );
// enforce framebuffer if first-pass is created now, filled with input framebuffer // enforce framebuffer if first-pass is created now, filled with input framebuffer
input_->blit( buffers_.first ); input_->blit( buffers_.first );
// create second-pass surface and shader, taking as texture the first-pass framebuffer // create second-pass surface and shader, taking as texture the first-pass framebuffer

View File

@@ -2199,20 +2199,20 @@ void SourceController::Render()
if (ImGui::MenuItem( ICON_FA_PLAY " Play | Pause", "Space")) if (ImGui::MenuItem( ICON_FA_PLAY " Play | Pause", "Space"))
play_toggle_request_ = true; play_toggle_request_ = true;
ImGui::Separator();
// Menu section for displayed image // Menu section for displayed image
if (ImGui::BeginMenu( ICON_FA_IMAGE " Displayed image")) if (ImGui::BeginMenu( ICON_FA_IMAGE " Displayed image"))
{ {
if (ImGuiToolkit::MenuItemIcon(7, 9, " Pre-processed"))
Settings::application.widget.media_player_slider = 1.0;
if (ImGuiToolkit::MenuItemIcon(6, 9, " Split view"))
Settings::application.widget.media_player_slider = 0.5;
if (ImGuiToolkit::MenuItemIcon(8, 9, " Post-processed")) if (ImGuiToolkit::MenuItemIcon(8, 9, " Post-processed"))
Settings::application.widget.media_player_slider = 0.0; Settings::application.widget.media_player_slider = 0.0;
if (ImGuiToolkit::MenuItemIcon(6, 9, " Split view"))
Settings::application.widget.media_player_slider = 0.5;
if (ImGuiToolkit::MenuItemIcon(7, 9, " Pre-processed"))
Settings::application.widget.media_player_slider = 1.0;
ImGui::EndMenu(); ImGui::EndMenu();
} }
// Menu section for list // Menu section for list
ImGui::Separator();
if (ImGui::MenuItem( ICON_FA_TH " List all")) { if (ImGui::MenuItem( ICON_FA_TH " List all")) {
selection_.clear(); selection_.clear();
resetActiveSelection(); resetActiveSelection();
@@ -2828,7 +2828,12 @@ bool SourceController::SourceButton(Source *s, ImVec2 framesize)
bool ret = false; bool ret = false;
ImVec2 frame_top = ImGui::GetCursorScreenPos(); ImVec2 frame_top = ImGui::GetCursorScreenPos();
ImGui::Image((void*)(uintptr_t) s->texture(), framesize);
// Always draw pre- and post-processed images
ImGui::Image((void*)(uintptr_t) s->texture(), framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), ImVec2(0.f,0.f), ImVec2(Settings::application.widget.media_player_slider,1.f));
ImGui::SetCursorScreenPos(frame_top + ImVec2(Settings::application.widget.media_player_slider * framesize.x, 0.f));
ImGui::Image((void*)(uintptr_t) s->frame()->texture(), framesize * ImVec2(1.f-Settings::application.widget.media_player_slider,1.f), ImVec2(Settings::application.widget.media_player_slider,0.f), ImVec2(1.f,1.f));
frame_top.x += 1.f; frame_top.x += 1.f;
ImGui::SetCursorScreenPos(frame_top); ImGui::SetCursorScreenPos(frame_top);
@@ -3009,18 +3014,25 @@ void SourceController::RenderSingleSource(Source *s)
/// ///
top += corner; top += corner;
ImGui::SetCursorScreenPos(top); ImGui::SetCursorScreenPos(top);
ImGui::Image((void*)(uintptr_t) s->texture(), framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), ImVec2(0.f,0.f), ImVec2(Settings::application.widget.media_player_slider,1.f)); CloneSource *cloned = dynamic_cast<CloneSource *>(s);
ImGui::SetCursorScreenPos(top + ImVec2(Settings::application.widget.media_player_slider * framesize.x, 0.f)); if (s->imageProcessingEnabled() || cloned != nullptr) {
ImGui::Image((void*)(uintptr_t) s->frame()->texture(), framesize * ImVec2(1.f-Settings::application.widget.media_player_slider,1.f), ImVec2(Settings::application.widget.media_player_slider,0.f), ImVec2(1.f,1.f)); ImGui::Image((void*)(uintptr_t) s->texture(), framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), ImVec2(0.f,0.f), ImVec2(Settings::application.widget.media_player_slider,1.f));
draw_list->AddCircleFilled(top + framesize * ImVec2(Settings::application.widget.media_player_slider,0.5f), 20.f, IM_COL32(255, 255, 255, 150), 26); ImGui::SetCursorScreenPos(top + ImVec2(Settings::application.widget.media_player_slider * framesize.x, 0.f));
draw_list->AddLine(top + framesize * ImVec2(Settings::application.widget.media_player_slider,0.0f), top + framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), IM_COL32(255, 255, 255, 150), 1); ImGui::Image((void*)(uintptr_t) s->frame()->texture(), framesize * ImVec2(1.f-Settings::application.widget.media_player_slider,1.f), ImVec2(Settings::application.widget.media_player_slider,0.f), ImVec2(1.f,1.f));
ImGui::SetCursorScreenPos(top + ImVec2(0.f, 0.5f * framesize.y - 20.0f)); draw_list->AddCircleFilled(top + framesize * ImVec2(Settings::application.widget.media_player_slider,0.5f), 20.f, IM_COL32(255, 255, 255, 150), 26);
ImGuiToolkit::InvisibleSliderFloat("#filter_slider", &Settings::application.widget.media_player_slider, 0.f, 1.f, ImVec2(framesize.x, 40.0f) ); draw_list->AddLine(top + framesize * ImVec2(Settings::application.widget.media_player_slider,0.0f), top + framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), IM_COL32(255, 255, 255, 150), 1);
if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); ImGui::SetCursorScreenPos(top + ImVec2(0.f, 0.5f * framesize.y - 20.0f));
ImGuiToolkit::InvisibleSliderFloat("#filter_slider", &Settings::application.widget.media_player_slider, 0.f, 1.f, ImVec2(framesize.x, 40.0f) );
if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);
}
else {
ImGui::Image((void*)(uintptr_t) s->texture(), framesize);
}
/// ///
/// Info overlays /// Info overlays
@@ -3097,18 +3109,24 @@ void SourceController::RenderMediaPlayer(MediaSource *ms)
/// ///
const ImVec2 top_image = top + corner; const ImVec2 top_image = top + corner;
ImGui::SetCursorScreenPos(top_image); ImGui::SetCursorScreenPos(top_image);
ImGui::Image((void*)(uintptr_t) ms->texture(), framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), ImVec2(0.f,0.f), ImVec2(Settings::application.widget.media_player_slider,1.f));
ImGui::SetCursorScreenPos(top_image + ImVec2(Settings::application.widget.media_player_slider * framesize.x, 0.f)); if (ms->imageProcessingEnabled()) {
ImGui::Image((void*)(uintptr_t) ms->frame()->texture(), framesize * ImVec2(1.f-Settings::application.widget.media_player_slider,1.f), ImVec2(Settings::application.widget.media_player_slider,0.f), ImVec2(1.f,1.f)); ImGui::Image((void*)(uintptr_t) ms->texture(), framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), ImVec2(0.f,0.f), ImVec2(Settings::application.widget.media_player_slider,1.f));
draw_list->AddCircleFilled(top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,0.5f), 20.f, IM_COL32(255, 255, 255, 150), 26); ImGui::SetCursorScreenPos(top_image + ImVec2(Settings::application.widget.media_player_slider * framesize.x, 0.f));
draw_list->AddLine(top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,0.0f), top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), IM_COL32(255, 255, 255, 150), 1); ImGui::Image((void*)(uintptr_t) ms->frame()->texture(), framesize * ImVec2(1.f-Settings::application.widget.media_player_slider,1.f), ImVec2(Settings::application.widget.media_player_slider,0.f), ImVec2(1.f,1.f));
ImGui::SetCursorScreenPos(top_image + ImVec2(0.f, 0.5f * framesize.y - 20.0f)); draw_list->AddCircleFilled(top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,0.5f), 20.f, IM_COL32(255, 255, 255, 150), 26);
ImGuiToolkit::InvisibleSliderFloat("#Settings::application.widget.media_player_slider2", &Settings::application.widget.media_player_slider, 0.f, 1.f, ImVec2(framesize.x, 40.0f) ); draw_list->AddLine(top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,0.0f), top_image + framesize * ImVec2(Settings::application.widget.media_player_slider,1.f), IM_COL32(255, 255, 255, 150), 1);
if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW); ImGui::SetCursorScreenPos(top_image + ImVec2(0.f, 0.5f * framesize.y - 20.0f));
ImGuiToolkit::InvisibleSliderFloat("#Settings::application.widget.media_player_slider2", &Settings::application.widget.media_player_slider, 0.f, 1.f, ImVec2(framesize.x, 40.0f) );
if (ImGui::IsItemHovered() || ImGui::IsItemFocused())
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);
}
else {
ImGui::Image((void*)(uintptr_t) mediaplayer_active_->texture(), framesize);
}
/// ///
/// Info overlays /// Info overlays