16bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon/*
26bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon * Copyright 2015 Google Inc.
36bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon *
46bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon * Use of this source code is governed by a BSD-style license that can be
56bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon * found in the LICENSE file.
66bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon */
76bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
86bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon#ifndef GrRenderTargetPriv_DEFINED
96bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon#define GrRenderTargetPriv_DEFINED
106bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
116bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon#include "GrRenderTarget.h"
126bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
136bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon/** Class that adds methods to GrRenderTarget that are only intended for use internal to Skia.
146bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    This class is purely a privileged window into GrRenderTarget. It should never have additional
156bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    data members or virtual methods. */
166bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomonclass GrRenderTargetPriv {
176bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomonpublic:
186bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    /**
198dc7c3a839b38b73af34cc2674a06f49eb1ce527egdaniel     * GrStencilAttachment is not part of the public API.
206bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon     */
218dc7c3a839b38b73af34cc2674a06f49eb1ce527egdaniel    GrStencilAttachment* getStencilAttachment() const { return fRenderTarget->fStencilAttachment; }
226bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
236bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    /**
242880df2609eba09b555ca37be04b6ad89290c765Tom Hudson     * Attaches the GrStencilAttachment onto the render target. If stencil is a nullptr then the
252880df2609eba09b555ca37be04b6ad89290c765Tom Hudson     * currently attached GrStencilAttachment will be removed if one was previously attached. This
262880df2609eba09b555ca37be04b6ad89290c765Tom Hudson     * function returns false if there were any failure in attaching the GrStencilAttachment.
276bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon     */
282880df2609eba09b555ca37be04b6ad89290c765Tom Hudson    bool attachStencilAttachment(GrStencilAttachment* stencil);
296bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
306bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomonprivate:
316bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    explicit GrRenderTargetPriv(GrRenderTarget* renderTarget) : fRenderTarget(renderTarget) {}
326bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    GrRenderTargetPriv(const GrRenderTargetPriv&) {} // unimpl
336bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    GrRenderTargetPriv& operator=(const GrRenderTargetPriv&); // unimpl
346bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
356bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    // No taking addresses of this type.
366bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    const GrRenderTargetPriv* operator&() const;
376bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    GrRenderTargetPriv* operator&();
386bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
396bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    GrRenderTarget* fRenderTarget;
406bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
416bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    friend class GrRenderTarget; // to construct/copy this type.
426bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon};
436bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
446bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomoninline GrRenderTargetPriv GrRenderTarget::renderTargetPriv() { return GrRenderTargetPriv(this); }
456bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
466bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomoninline const GrRenderTargetPriv GrRenderTarget::renderTargetPriv () const {
476bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon    return GrRenderTargetPriv(const_cast<GrRenderTarget*>(this));
486bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon}
496bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon
506bc1b5fab8554a9cb643277b4867965dd4535cd6bsalomon#endif
51