Вопрос Как сделать закруглённый блюр imgui

Mersiles the best
Начинающий
Статус
Оффлайн
Регистрация
2 Авг 2019
Сообщения
193
Реакции[?]
15
Поинты[?]
1K
Отрисовка blur:
oid _draw(ImDrawList* drawList, float alpha) noexcept
    {
        createTextures();
        createShaders();

        if (!blurTexture1 || !blurTexture2)
            return;

        drawList->AddCallback(&begin, nullptr);
        for (int i = 0; i < 8; ++i) {
            drawList->AddCallback(&firstPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), { -1.0f, -1.0f }, { 1.0f, 1.0f }, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE,10, ImDrawFlags_RoundCornersAll);
            drawList->AddCallback(&secondPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture2), { -1.0f, -1.0f }, { 1.0f, 1.0f }, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
        }
        drawList->AddCallback(&end, nullptr);
        drawList->AddCallback(ImDrawCallback_ResetRenderState, nullptr);

#ifdef _WIN32
        drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), { 0.0f, 0.0f }, { backbufferWidth * 1.0f, backbufferHeight * 1.0f }, { 0.0f, 0.0f }, { 1.0f, 1.0f }, IM_COL32(155, 185 , 231, 255 * alpha),10, ImDrawFlags_RoundCornersAll);
#else
        drawList->AddImage(reinterpret_cast<ImTextureID>(blurTexture1), { 0.0f, 0.0f }, { backbufferWidth * 1.0f, backbufferHeight * 1.0f }, { 0.0f, 1.0f }, { 1.0f, 0.0f }, IM_COL32(255, 255, 255, 255 * alpha));
#endif
    }
поменял AddImage на AddImageRounded и ничего
1684578642274.png
 
Эксперт
Статус
Оффлайн
Регистрация
13 Сен 2020
Сообщения
1,415
Реакции[?]
713
Поинты[?]
10K
Отрисовка blur:
oid _draw(ImDrawList* drawList, float alpha) noexcept
    {
        createTextures();
        createShaders();

        if (!blurTexture1 || !blurTexture2)
            return;

        drawList->AddCallback(&begin, nullptr);
        for (int i = 0; i < 8; ++i) {
            drawList->AddCallback(&firstPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), { -1.0f, -1.0f }, { 1.0f, 1.0f }, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE,10, ImDrawFlags_RoundCornersAll);
            drawList->AddCallback(&secondPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture2), { -1.0f, -1.0f }, { 1.0f, 1.0f }, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
        }
        drawList->AddCallback(&end, nullptr);
        drawList->AddCallback(ImDrawCallback_ResetRenderState, nullptr);

#ifdef _WIN32
        drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), { 0.0f, 0.0f }, { backbufferWidth * 1.0f, backbufferHeight * 1.0f }, { 0.0f, 0.0f }, { 1.0f, 1.0f }, IM_COL32(155, 185 , 231, 255 * alpha),10, ImDrawFlags_RoundCornersAll);
#else
        drawList->AddImage(reinterpret_cast<ImTextureID>(blurTexture1), { 0.0f, 0.0f }, { backbufferWidth * 1.0f, backbufferHeight * 1.0f }, { 0.0f, 1.0f }, { 1.0f, 0.0f }, IM_COL32(255, 255, 255, 255 * alpha));
#endif
    }
поменял AddImage на AddImageRounded и ничего
Посмотреть вложение 248359
рендери картинку не от начала экрана и до конца, а от начала окна и до конца окна, ток тебе надо будет еще 2 аргумента поменять какую область текстуры рендерить
 
Mersiles the best
Начинающий
Статус
Оффлайн
Регистрация
2 Авг 2019
Сообщения
193
Реакции[?]
15
Поинты[?]
1K
рендери картинку не от начала экрана и до конца, а от начала окна и до конца окна, ток тебе надо будет еще 2 аргумента поменять какую область текстуры рендерить
Попробовал сделать так
C++:
void _draws(ImDrawList* drawList, const ImVec2& p_min, const ImVec2& p_max, float alpha) noexcept
    {
        createTextures();
        createShaders();

        if (!blurTexture1 || !blurTexture2)
            return;

        drawList->AddCallback(&begin, nullptr);
        for (int i = 0; i < 8; ++i) {
            drawList->AddCallback(&firstPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(0,0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
            drawList->AddCallback(&secondPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture2), p_min, p_max, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
        }
        drawList->AddCallback(&end, nullptr);
        drawList->AddCallback(ImDrawCallback_ResetRenderState, nullptr);

#ifdef _WIN32
        drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(backbufferWidth * 1, backbufferHeight * 1), ImVec2(backbufferWidth * 1, backbufferHeight * 1), IM_COL32(150, 150, 150, 255 * alpha), 10, ImDrawFlags_RoundCornersAll);
#else
        drawList->AddImage(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(backbufferWidth * 1, backbufferHeight * 1), ImVec2(backbufferWidth * 1, backbufferHeight * 1), IM_COL32(255, 255, 255, 255 * alpha));
#endif
    }
1684580931069.png
 
Эксперт
Статус
Оффлайн
Регистрация
13 Сен 2020
Сообщения
1,415
Реакции[?]
713
Поинты[?]
10K
Попробовал сделать так
C++:
void _draws(ImDrawList* drawList, const ImVec2& p_min, const ImVec2& p_max, float alpha) noexcept
    {
        createTextures();
        createShaders();

        if (!blurTexture1 || !blurTexture2)
            return;

        drawList->AddCallback(&begin, nullptr);
        for (int i = 0; i < 8; ++i) {
            drawList->AddCallback(&firstPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(0,0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
            drawList->AddCallback(&secondPass, nullptr);
            drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture2), p_min, p_max, ImVec2(0, 0), ImVec2(1, 1), IM_COL32_WHITE, 10, ImDrawFlags_RoundCornersAll);
        }
        drawList->AddCallback(&end, nullptr);
        drawList->AddCallback(ImDrawCallback_ResetRenderState, nullptr);

#ifdef _WIN32
        drawList->AddImageRounded(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(backbufferWidth * 1, backbufferHeight * 1), ImVec2(backbufferWidth * 1, backbufferHeight * 1), IM_COL32(150, 150, 150, 255 * alpha), 10, ImDrawFlags_RoundCornersAll);
#else
        drawList->AddImage(reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, ImVec2(backbufferWidth * 1, backbufferHeight * 1), ImVec2(backbufferWidth * 1, backbufferHeight * 1), IM_COL32(255, 255, 255, 255 * alpha));
#endif
    }
Посмотреть вложение 248360
Код:
drawList->AddImageRounded( reinterpret_cast<ImTextureID>(blurTexture1), p_min, p_max, p_min/ ImGui::GetIO( ).DisplaySize, p_max/ ImGui::GetIO( ).DisplaySize, ImColor( 1.f, 1.f, 1.f, ImGui::GetStyle( ).Alpha ), rounding, flags );
 
Mersiles the best
Начинающий
Статус
Оффлайн
Регистрация
2 Авг 2019
Сообщения
193
Реакции[?]
15
Поинты[?]
1K
Сверху Снизу