class CompositorFrameMetadata;
class ScopedResource;
+struct RendererCapabilitiesImpl {
+ RendererCapabilitiesImpl();
+ ~RendererCapabilitiesImpl();
+
+ // Capabilities copied to main thread.
+ ResourceFormat best_texture_format;
+ bool allow_partial_texture_updates;
+ bool using_offscreen_context3d;
+ int max_texture_size;
+ bool using_shared_memory_resources;
+
+ // Capabilities used on compositor thread only.
+ bool using_partial_swap;
+ bool using_egl_image;
+ bool avoid_pow2_textures;
+ bool using_map_image;
+ bool using_discard_framebuffer;
+ bool allow_rasterize_on_demand;
+
+ RendererCapabilities MainThreadCapabilities() const;
+};
+
class CC_EXPORT RendererClient {
public:
- // These return the draw viewport and clip in non-y-flipped window space.
- // Note that while a draw is in progress, these are guaranteed to be
- // contained within the output surface size.
- virtual gfx::Rect DeviceViewport() const = 0;
- virtual gfx::Rect DeviceClip() const = 0;
virtual void SetFullRootLayerDamage() = 0;
- virtual CompositorFrameMetadata MakeCompositorFrameMetadata() const = 0;
-
- protected:
- virtual ~RendererClient() {}
};
class CC_EXPORT Renderer {
public:
virtual ~Renderer() {}
- virtual const RendererCapabilities& Capabilities() const = 0;
-
- virtual void ViewportChanged() {}
+ virtual const RendererCapabilitiesImpl& Capabilities() const = 0;
virtual bool CanReadPixels() const = 0;
// This passes ownership of the render passes to the renderer. It should
// consume them, and empty the list. The parameters here may change from frame
// to frame and should not be cached.
+ // The |device_viewport_rect| and |device_clip_rect| are in non-y-flipped
+ // window space.
virtual void DrawFrame(RenderPassList* render_passes_in_draw_order,
ContextProvider* offscreen_context_provider,
float device_scale_factor,
+ const gfx::Rect& device_viewport_rect,
+ const gfx::Rect& device_clip_rect,
bool allow_partial_swap,
bool disable_picture_quad_image_filtering) = 0;
virtual void DoNoOp() {}
// Puts backbuffer onscreen.
- virtual void SwapBuffers() = 0;
+ virtual void SwapBuffers(const CompositorFrameMetadata& metadata) = 0;
virtual void ReceiveSwapBuffersAck(const CompositorFrameAck& ack) {}
- virtual void GetFramebufferPixels(void* pixels, gfx::Rect rect) = 0;
+ virtual void GetFramebufferPixels(void* pixels, const gfx::Rect& rect) = 0;
virtual bool IsContextLost();