google / filament

Filament is a real-time physically based rendering engine for Android, iOS, Windows, Linux, macOS, and WebGL2
https://google.github.io/filament/
Apache License 2.0
17.35k stars 1.83k forks source link

why renderer_->setClearOptions have no effect on alpha? #7920

Closed as010101 closed 2 weeks ago

as010101 commented 2 weeks ago
   filament::Renderer::ClearOptions op;
    op.clear = true;
    op.clearColor = {0.0f, 0.0f, 0.0f, 0.0f};
    op.discard = true;
    renderer_->setClearOptions(op);
    scene_->SetBackground({0.0f, 0.0f, 0.0f, 0.0f});

    view_->GetNativeView()->setBlendMode(
            filament::View::BlendMode::TRANSLUCENT);

    if (renderer_->beginFrame(swapchain_)) {

        filament::Renderer::ClearOptions op;
        op.clear = true;
        op.clearColor = {0.0f, 0.0f, 0.0f, 0.0f};
        op.discard = true;
        renderer_->setClearOptions(op);
        scene_->SetBackground({0.0f, 0.0f, 0.0f, 0.0f});

        auto mode = view_->GetNativeView()->getBlendMode();
        view_->GetNativeView()->setBlendMode(
                filament::View::BlendMode::TRANSLUCENT);

        renderer_->render(view_->GetNativeView());

        using namespace filament;
        using namespace backend;

        auto format = (n_channels_ == 3 ? PixelDataFormat::RGB
                                        : PixelDataFormat::RGBA);
        auto type = PixelDataType::UBYTE;
        if (depth_image_) {
            format = PixelDataFormat::DEPTH_COMPONENT;
            type = PixelDataType::FLOAT;
        }
        auto user_param = new PBDParams(this, callback_);
        PixelBufferDescriptor pd(buffer_, buffer_size_, format, type,
                                 ReadPixelsCallback, user_param);
        auto vp = view_->GetNativeView()->getViewport();

        renderer_->readPixels(vp.left, vp.bottom, vp.width, vp.height,
                              std::move(pd));

I use this code get image from render buffer, and clear buffer by setClearOptions ,but the image alpha value are always 255, how can I make the alpha value become zero?