Skip to content

API BREAKAGE: this change aims to fix multi-view support#2376

Merged
pixelflinger merged 2 commits intomasterfrom
ma/clear
Apr 10, 2020
Merged

API BREAKAGE: this change aims to fix multi-view support#2376
pixelflinger merged 2 commits intomasterfrom
ma/clear

Conversation

@pixelflinger
Copy link
Collaborator

What has changed:

  • View doesn't have a notion of clear color anymore
  • View doesn't have a notion of discard flags anymore
  • The clear color and color-buffer discard/clear flags are moved to Renderer
  • Skybox can now be set to a constant color
  • View have a blend-mode

What does is all mean:
"Clearing" (i.e.) setting its background is now handled by Skybox, by
setting a constant color to the Skybox. This should take care of
drawing views side by side.

When a view needs to be drawn on top of another, it's BlendMode needs to
be set to TRANSLUCENT and of course and, generally, it wither won't have
a skybox, or will have one that sets some translucent pixels.

As an optimization, a View with BlendMode::OPAQUE will have its
background cleared with the color specified in Renderer.

If the SwapChain already has some content, it's now possible to set
the Renderer to not discard the content, together with TRANSLUCENT views,
it's possible to draw on top of that content.

It is NOT possible to share depth/stencil buffers between views.

Fixes: #2369, #2372, #2364

What has changed:
- View doesn't have a notion of clear color anymore
- View doesn't have a notion of discard flags anymore
- The clear color and color-buffer discard/clear flags are moved to Renderer
- Skybox can now be set to a constant color
- View have a blend-mode

What does is all mean:
"Clearing" (i.e.) setting its background is now handled by Skybox, by
setting a constant color to the Skybox. This should take care of
drawing views side by side.

When a view needs to be drawn on top of another, it's BlendMode needs to
be set to TRANSLUCENT and of course and, generally, it wither won't have
a skybox, or will have one that sets some translucent pixels.

As an optimization, a View with BlendMode::OPAQUE will have its
background cleared with the color specified in Renderer.

If the SwapChain already has some content, it's now possible to set
the Renderer to not discard the content, together with TRANSLUCENT views,
it's possible to draw on top of that content.


It is NOT possible to share depth/stencil buffers between views.

Fixes: #2369, #2372, #2364
@bejado
Copy link
Member

bejado commented Apr 10, 2020

A couple iOS samples use the old clear API and are failing to compile:

ios/samples/transparent-rendering/transparent-rendering/FilamentView.mm
167:    filaView->setClearColor({0.0f, 0.0f, 0.0f, 0.0f});

ios/samples/hello-triangle/hello-triangle/FilamentView.mm
156:    filaView->setClearColor({0.1, 0.125, 0.25, 1.0});

Note: WebGL is still broken with this PR
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Clearing multiple views is confusing

5 participants