Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: include/gpu/GrContext.h

Issue 622663002: GrContext::copyTexture->GrContext::copySurface. Add a flush writes pixel ops flag. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | include/gpu/GrSurface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrContext_DEFINED 8 #ifndef GrContext_DEFINED
9 #define GrContext_DEFINED 9 #define GrContext_DEFINED
10 10
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 * underlying 3D API. 590 * underlying 3D API.
591 * @param flagsBitfield flags that control the flushing behavior. See 591 * @param flagsBitfield flags that control the flushing behavior. See
592 * FlushBits. 592 * FlushBits.
593 */ 593 */
594 void flush(int flagsBitfield = 0); 594 void flush(int flagsBitfield = 0);
595 595
596 /** 596 /**
597 * These flags can be used with the read/write pixels functions below. 597 * These flags can be used with the read/write pixels functions below.
598 */ 598 */
599 enum PixelOpsFlags { 599 enum PixelOpsFlags {
600 /** The GrContext will not be flushed. This means that the read or write may occur before 600 /** The GrContext will not be flushed before the surface read or write. This means that
601 previous draws have executed. */ 601 the read or write may occur before previous draws have executed. */
602 kDontFlush_PixelOpsFlag = 0x1, 602 kDontFlush_PixelOpsFlag = 0x1,
603 /** Any surface writes should be flushed to the backend 3D API after the surface operation
604 is complete */
605 kFlushWrites_PixelOp = 0x2,
603 /** The src for write or dst read is unpremultiplied. This is only respe cted if both the 606 /** The src for write or dst read is unpremultiplied. This is only respe cted if both the
604 config src and dst configs are an RGBA/BGRA 8888 format. */ 607 config src and dst configs are an RGBA/BGRA 8888 format. */
605 kUnpremul_PixelOpsFlag = 0x2, 608 kUnpremul_PixelOpsFlag = 0x4,
606 }; 609 };
607 610
608 /** 611 /**
609 * Reads a rectangle of pixels from a render target. 612 * Reads a rectangle of pixels from a render target.
610 * @param target the render target to read from. NULL means the curre nt render target. 613 * @param target the render target to read from. NULL means the curre nt render target.
611 * @param left left edge of the rectangle to read (inclusive) 614 * @param left left edge of the rectangle to read (inclusive)
612 * @param top top edge of the rectangle to read (inclusive) 615 * @param top top edge of the rectangle to read (inclusive)
613 * @param width width of rectangle to read in pixels. 616 * @param width width of rectangle to read in pixels.
614 * @param height height of rectangle to read in pixels. 617 * @param height height of rectangle to read in pixels.
615 * @param config the pixel config of the destination buffer 618 * @param config the pixel config of the destination buffer
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 * @return true if the write succeeded, false if not. The write can fail bec ause of an 691 * @return true if the write succeeded, false if not. The write can fail bec ause of an
689 * unsupported combination of texture and pixel configs. 692 * unsupported combination of texture and pixel configs.
690 */ 693 */
691 bool writeTexturePixels(GrTexture* texture, 694 bool writeTexturePixels(GrTexture* texture,
692 int left, int top, int width, int height, 695 int left, int top, int width, int height,
693 GrPixelConfig config, const void* buffer, 696 GrPixelConfig config, const void* buffer,
694 size_t rowBytes, 697 size_t rowBytes,
695 uint32_t pixelOpsFlags = 0); 698 uint32_t pixelOpsFlags = 0);
696 699
697 /** 700 /**
698 * Copies a rectangle of texels from src to dst. The size of dst is the size of the rectangle 701 * Copies a rectangle of texels from src to dst.
699 * copied and topLeft is the position of the rect in src. The rectangle is c lipped to src's
700 * bounds. 702 * bounds.
701 * @param src the texture to copy from. 703 * @param dst the surface to copy to.
702 * @param dst the render target to copy to. 704 * @param src the surface to copy from.
703 * @param topLeft the point in src that will be copied to the top-left of dst. If NULL, 705 * @param srcRect the rectangle of the src that should be copied.
704 * (0, 0) will be used. 706 * @param dstPoint the translation applied when writing the srcRect's p ixels to the dst.
707 * @param pixelOpsFlags see PixelOpsFlags enum above. (kUnpremul_PixelOpsFla g is not allowed).
705 */ 708 */
706 void copyTexture(GrTexture* src, GrRenderTarget* dst, const SkIPoint* topLef t = NULL); 709 void copySurface(GrSurface* dst,
710 GrSurface* src,
711 const SkIRect& srcRect,
712 const SkIPoint& dstPoint,
713 uint32_t pixelOpsFlags = 0);
714
715 /** Helper that copies the whole surface but fails when the two surfaces are not identically
716 sized. */
717 bool copySurface(GrSurface* dst, GrSurface* src) {
718 if (NULL == dst || NULL == src || dst->width() != src->width() ||
719 dst->height() != src->height()) {
720 return false;
721 }
722 this->copySurface(dst, src, SkIRect::MakeWH(dst->width(), dst->height()) ,
723 SkIPoint::Make(0,0));
724 return true;
725 }
726
727 /**
728 * After this returns any pending writes to the surface will have been issue d to the backend 3D API.
729 */
730 void flushSurfaceWrites(GrSurface* surface);
707 731
708 /** 732 /**
709 * Resolves a render target that has MSAA. The intermediate MSAA buffer is 733 * Resolves a render target that has MSAA. The intermediate MSAA buffer is
710 * down-sampled to the associated GrTexture (accessible via 734 * down-sampled to the associated GrTexture (accessible via
711 * GrRenderTarget::asTexture()). Any pending draws to the render target will 735 * GrRenderTarget::asTexture()). Any pending draws to the render target will
712 * be executed before the resolve. 736 * be executed before the resolve.
713 * 737 *
714 * This is only necessary when a client wants to access the object directly 738 * This is only necessary when a client wants to access the object directly
715 * using the backend API directly. GrContext will detect when it must 739 * using the backend API directly. GrContext will detect when it must
716 * perform a resolve to a GrTexture used as the source of a draw or before 740 * perform a resolve to a GrTexture used as the source of a draw or before
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 } 1165 }
1142 1166
1143 GrTexture* texture() { return fTexture; } 1167 GrTexture* texture() { return fTexture; }
1144 1168
1145 private: 1169 private:
1146 GrContext* fContext; 1170 GrContext* fContext;
1147 GrTexture* fTexture; 1171 GrTexture* fTexture;
1148 }; 1172 };
1149 1173
1150 #endif 1174 #endif
OLDNEW
« no previous file with comments | « no previous file | include/gpu/GrSurface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698