google/filament

readPixels callback function is not called in headless mode

GrigorySamokhin opened this issue · 6 comments

Im successfully save images via callback function with GLFW windows, but in headless mode it doesn't work, Text message inside callback does not appear. To simplify I run test code from from filament_rendering_test.cpp, where I can be wrong here?

static void callback(void* buffer, size_t size, void* user) {
    std::cout << "Here" << std::endl;
}

int runTest()
{
    mEngine = Engine::create(Engine::Backend::OPENGL);
    mSurface = mEngine->createSwapChain(16,16);
    mRenderer = mEngine->createRenderer();

    mScene = mEngine->createScene();

    mCameraEntity = utils::EntityManager::get().create();
    mCamera = mEngine->createCamera(mCameraEntity);

    mView = mEngine->createView();
    mView->setViewport({0, 0, 16, 16});
    mView->setScene(mScene);
    mView->setCamera(mCamera);

    mColorGrading = ColorGrading::Builder()
           .toneMapping(ColorGrading::ToneMapping::LINEAR)
            .build(*mEngine);
    mView->setColorGrading(mColorGrading);

    mSkybox = Skybox::Builder().build(*mEngine);
    mScene->setSkybox(mSkybox);

    size_t size = 16 * 16 * 4;
    void* buffer = malloc(size);
    memset(buffer, 0, size);
    PixelBufferDescriptor pd(buffer, size,
          PixelDataFormat::RGBA, PixelDataType::UBYTE,
          callback, nullptr);

    Renderer* pRenderer = mRenderer;
    pRenderer->beginFrame(mSurface);
    pRenderer->render(mView);
    pRenderer->readPixels(0, 0, 16, 16, std::move(pd));
    pRenderer->endFrame();
      
    mEngine->flushAndWait();

}

Which version of Filament are you using? I'm able to run your code and see "Here" printed out.

Didn't we recently fixed something for this?

We fixed a crash with headless SwapChains on macOS/OpenGL: a09037c

hello! I have the same problem - in headless mode it doesn't work, text msg inside callback does not appear.
I run test code filament_rendering_test.cpp too
@bejado

I use filament 1.9.9
macOS 10.15.7 (19H2)

@noseeevil If you run filament_rendering_test.cpp, what output do you see?

./build.sh -p desktop debug test_filament
out/cmake-debug/filament/test/test_filament '--gtest_filter=RenderingTest.*'

Note that currently that test is failing for unrelated reasons (you can apply #3407 to temporarily fix it).

I've tried as well, and it's working fine.