diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/platform/graphics/GraphicsContext3D.h')
-rw-r--r-- | chromium/third_party/WebKit/Source/platform/graphics/GraphicsContext3D.h | 551 |
1 files changed, 0 insertions, 551 deletions
diff --git a/chromium/third_party/WebKit/Source/platform/graphics/GraphicsContext3D.h b/chromium/third_party/WebKit/Source/platform/graphics/GraphicsContext3D.h deleted file mode 100644 index a4466548f51..00000000000 --- a/chromium/third_party/WebKit/Source/platform/graphics/GraphicsContext3D.h +++ /dev/null @@ -1,551 +0,0 @@ -/* - * Copyright (C) 2009 Apple Inc. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef GraphicsContext3D_h -#define GraphicsContext3D_h - -#include "platform/PlatformExport.h" -#include "platform/geometry/IntRect.h" -#include "platform/graphics/Extensions3D.h" -#include "platform/graphics/GraphicsTypes3D.h" -#include "platform/graphics/Image.h" -#include "platform/weborigin/KURL.h" -#include "third_party/khronos/GLES2/gl2.h" -#include "third_party/khronos/GLES2/gl2ext.h" -#include "third_party/skia/include/core/SkBitmap.h" -#include "wtf/HashMap.h" -#include "wtf/HashSet.h" -#include "wtf/ListHashSet.h" -#include "wtf/Noncopyable.h" -#include "wtf/OwnPtr.h" -#include "wtf/PassOwnPtr.h" -#include "wtf/RefCounted.h" -#include "wtf/text/WTFString.h" - -// FIXME: Find a better way to avoid the name confliction for NO_ERROR. -#if OS(WIN) -#undef NO_ERROR -#endif - -class GrContext; - -namespace blink { -class WebGraphicsContext3D; -class WebGraphicsContext3DProvider; -} - -namespace WebCore { -class DrawingBuffer; -class Extensions3D; -class GraphicsContext3DContextLostCallbackAdapter; -class GraphicsContext3DErrorMessageCallbackAdapter; -class Image; -class ImageBuffer; -class IntRect; -class IntSize; - -struct ActiveInfo { - String name; - GC3Denum type; - GC3Dint size; -}; - -class PLATFORM_EXPORT GraphicsContext3D : public RefCounted<GraphicsContext3D> { -public: - // Context creation attributes. - struct Attributes { - Attributes() - : alpha(true) - , depth(true) - , stencil(false) - , antialias(true) - , premultipliedAlpha(true) - , preserveDrawingBuffer(false) - , noExtensions(false) - , shareResources(true) - , preferDiscreteGPU(false) - , failIfMajorPerformanceCaveat(false) - { - } - - bool alpha; - bool depth; - bool stencil; - bool antialias; - bool premultipliedAlpha; - bool preserveDrawingBuffer; - bool noExtensions; - bool shareResources; - bool preferDiscreteGPU; - bool failIfMajorPerformanceCaveat; - KURL topDocumentURL; - }; - - class ContextLostCallback { - public: - virtual void onContextLost() = 0; - virtual ~ContextLostCallback() {} - }; - - class ErrorMessageCallback { - public: - virtual void onErrorMessage(const String& message, GC3Dint id) = 0; - virtual ~ErrorMessageCallback() { } - }; - - void setContextLostCallback(PassOwnPtr<ContextLostCallback>); - void setErrorMessageCallback(PassOwnPtr<ErrorMessageCallback>); - - static PassRefPtr<GraphicsContext3D> create(Attributes); - - // Callers must make the context current before using it AND check that the context was created successfully - // via ContextLost before using the context in any way. Once made current on a thread, the context cannot - // be used on any other thread. - static PassRefPtr<GraphicsContext3D> createGraphicsContextFromWebContext(PassOwnPtr<blink::WebGraphicsContext3D>, bool preserveDrawingBuffer = false); - static PassRefPtr<GraphicsContext3D> createGraphicsContextFromProvider(PassOwnPtr<blink::WebGraphicsContext3DProvider>, bool preserveDrawingBuffer = false); - - ~GraphicsContext3D(); - - GrContext* grContext(); - blink::WebGraphicsContext3D* webContext() const { return m_impl; } - - bool makeContextCurrent(); - - uint32_t lastFlushID(); - - // Helper to texImage2D with pixel==0 case: pixels are initialized to 0. - // Return true if no GL error is synthesized. - // By default, alignment is 4, the OpenGL default setting. - bool texImage2DResourceSafe(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, GC3Dint alignment = 4); - - //---------------------------------------------------------------------- - // Helpers for texture uploading and pixel readback. - // - - // Computes the components per pixel and bytes per component - // for the given format and type combination. Returns false if - // either was an invalid enum. - static bool computeFormatAndTypeParameters(GC3Denum format, - GC3Denum type, - unsigned int* componentsPerPixel, - unsigned int* bytesPerComponent); - - // Computes the image size in bytes. If paddingInBytes is not null, padding - // is also calculated in return. Returns NO_ERROR if succeed, otherwise - // return the suggested GL error indicating the cause of the failure: - // INVALID_VALUE if width/height is negative or overflow happens. - // INVALID_ENUM if format/type is illegal. - static GC3Denum computeImageSizeInBytes(GC3Denum format, - GC3Denum type, - GC3Dsizei width, - GC3Dsizei height, - GC3Dint alignment, - unsigned int* imageSizeInBytes, - unsigned int* paddingInBytes); - - // Attempt to enumerate all possible native image formats to - // reduce the amount of temporary allocations during texture - // uploading. This enum must be public because it is accessed - // by non-member functions. - enum DataFormat { - DataFormatRGBA8 = 0, - DataFormatRGBA16F, - DataFormatRGBA32F, - DataFormatRGB8, - DataFormatRGB16F, - DataFormatRGB32F, - DataFormatBGR8, - DataFormatBGRA8, - DataFormatARGB8, - DataFormatABGR8, - DataFormatRGBA5551, - DataFormatRGBA4444, - DataFormatRGB565, - DataFormatR8, - DataFormatR16F, - DataFormatR32F, - DataFormatRA8, - DataFormatRA16F, - DataFormatRA32F, - DataFormatAR8, - DataFormatA8, - DataFormatA16F, - DataFormatA32F, - DataFormatNumFormats - }; - - // Check if the format is one of the formats from the ImageData or DOM elements. - // The formats from ImageData is always RGBA8. - // The formats from DOM elements vary with Graphics ports. It can only be RGBA8 or BGRA8. - static ALWAYS_INLINE bool srcFormatComeFromDOMElementOrImageData(DataFormat SrcFormat) - { - return SrcFormat == DataFormatBGRA8 || SrcFormat == DataFormatRGBA8; - } - - //---------------------------------------------------------------------- - // Entry points for WebGL. - // - - void activeTexture(GC3Denum texture); - void attachShader(Platform3DObject program, Platform3DObject shader); - void bindAttribLocation(Platform3DObject, GC3Duint index, const String& name); - void bindBuffer(GC3Denum target, Platform3DObject); - void bindFramebuffer(GC3Denum target, Platform3DObject); - void bindRenderbuffer(GC3Denum target, Platform3DObject); - void bindTexture(GC3Denum target, Platform3DObject); - void blendColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha); - void blendEquation(GC3Denum mode); - void blendEquationSeparate(GC3Denum modeRGB, GC3Denum modeAlpha); - void blendFunc(GC3Denum sfactor, GC3Denum dfactor); - void blendFuncSeparate(GC3Denum srcRGB, GC3Denum dstRGB, GC3Denum srcAlpha, GC3Denum dstAlpha); - - void bufferData(GC3Denum target, GC3Dsizeiptr size, GC3Denum usage); - void bufferData(GC3Denum target, GC3Dsizeiptr size, const void* data, GC3Denum usage); - void bufferSubData(GC3Denum target, GC3Dintptr offset, GC3Dsizeiptr size, const void* data); - - GC3Denum checkFramebufferStatus(GC3Denum target); - void clear(GC3Dbitfield mask); - void clearColor(GC3Dclampf red, GC3Dclampf green, GC3Dclampf blue, GC3Dclampf alpha); - void clearDepth(GC3Dclampf depth); - void clearStencil(GC3Dint s); - void colorMask(GC3Dboolean red, GC3Dboolean green, GC3Dboolean blue, GC3Dboolean alpha); - void compileShader(Platform3DObject); - - void compressedTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Dsizei imageSize, const void* data); - void compressedTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Dsizei imageSize, const void* data); - void copyTexImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Dint border); - void copyTexSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); - void cullFace(GC3Denum mode); - void depthFunc(GC3Denum func); - void depthMask(GC3Dboolean flag); - void depthRange(GC3Dclampf zNear, GC3Dclampf zFar); - void detachShader(Platform3DObject, Platform3DObject); - void disable(GC3Denum cap); - void disableVertexAttribArray(GC3Duint index); - void drawArrays(GC3Denum mode, GC3Dint first, GC3Dsizei count); - void drawElements(GC3Denum mode, GC3Dsizei count, GC3Denum type, GC3Dintptr offset); - - void enable(GC3Denum cap); - void enableVertexAttribArray(GC3Duint index); - void finish(); - void flush(); - void framebufferRenderbuffer(GC3Denum target, GC3Denum attachment, GC3Denum renderbuffertarget, Platform3DObject); - void framebufferTexture2D(GC3Denum target, GC3Denum attachment, GC3Denum textarget, Platform3DObject, GC3Dint level); - void frontFace(GC3Denum mode); - void generateMipmap(GC3Denum target); - - bool getActiveAttrib(Platform3DObject program, GC3Duint index, ActiveInfo&); - bool getActiveUniform(Platform3DObject program, GC3Duint index, ActiveInfo&); - void getAttachedShaders(Platform3DObject program, GC3Dsizei maxCount, GC3Dsizei* count, Platform3DObject* shaders); - GC3Dint getAttribLocation(Platform3DObject, const String& name); - void getBooleanv(GC3Denum pname, GC3Dboolean* value); - void getBufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); - Attributes getContextAttributes(); - GC3Denum getError(); - void getFloatv(GC3Denum pname, GC3Dfloat* value); - void getFramebufferAttachmentParameteriv(GC3Denum target, GC3Denum attachment, GC3Denum pname, GC3Dint* value); - void getIntegerv(GC3Denum pname, GC3Dint* value); - void getProgramiv(Platform3DObject program, GC3Denum pname, GC3Dint* value); - String getProgramInfoLog(Platform3DObject); - void getRenderbufferParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); - void getShaderiv(Platform3DObject, GC3Denum pname, GC3Dint* value); - String getShaderInfoLog(Platform3DObject); - void getShaderPrecisionFormat(GC3Denum shaderType, GC3Denum precisionType, GC3Dint* range, GC3Dint* precision); - String getShaderSource(Platform3DObject); - String getString(GC3Denum name); - void getTexParameterfv(GC3Denum target, GC3Denum pname, GC3Dfloat* value); - void getTexParameteriv(GC3Denum target, GC3Denum pname, GC3Dint* value); - void getUniformfv(Platform3DObject program, GC3Dint location, GC3Dfloat* value); - void getUniformiv(Platform3DObject program, GC3Dint location, GC3Dint* value); - GC3Dint getUniformLocation(Platform3DObject, const String& name); - void getVertexAttribfv(GC3Duint index, GC3Denum pname, GC3Dfloat* value); - void getVertexAttribiv(GC3Duint index, GC3Denum pname, GC3Dint* value); - GC3Dsizeiptr getVertexAttribOffset(GC3Duint index, GC3Denum pname); - - void hint(GC3Denum target, GC3Denum mode); - GC3Dboolean isBuffer(Platform3DObject); - GC3Dboolean isEnabled(GC3Denum cap); - GC3Dboolean isFramebuffer(Platform3DObject); - GC3Dboolean isProgram(Platform3DObject); - GC3Dboolean isRenderbuffer(Platform3DObject); - GC3Dboolean isShader(Platform3DObject); - GC3Dboolean isTexture(Platform3DObject); - void lineWidth(GC3Dfloat); - void linkProgram(Platform3DObject); - void pixelStorei(GC3Denum pname, GC3Dint param); - void polygonOffset(GC3Dfloat factor, GC3Dfloat units); - - void readPixels(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, void* data); - - void releaseShaderCompiler(); - - void renderbufferStorage(GC3Denum target, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height); - void sampleCoverage(GC3Dclampf value, GC3Dboolean invert); - void scissor(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); - void shaderSource(Platform3DObject, const String& string); - void stencilFunc(GC3Denum func, GC3Dint ref, GC3Duint mask); - void stencilFuncSeparate(GC3Denum face, GC3Denum func, GC3Dint ref, GC3Duint mask); - void stencilMask(GC3Duint mask); - void stencilMaskSeparate(GC3Denum face, GC3Duint mask); - void stencilOp(GC3Denum fail, GC3Denum zfail, GC3Denum zpass); - void stencilOpSeparate(GC3Denum face, GC3Denum fail, GC3Denum zfail, GC3Denum zpass); - - void texImage2D(GC3Denum target, GC3Dint level, GC3Denum internalformat, GC3Dsizei width, GC3Dsizei height, GC3Dint border, GC3Denum format, GC3Denum type, const void* pixels); - void texParameterf(GC3Denum target, GC3Denum pname, GC3Dfloat param); - void texParameteri(GC3Denum target, GC3Denum pname, GC3Dint param); - void texSubImage2D(GC3Denum target, GC3Dint level, GC3Dint xoffset, GC3Dint yoffset, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, const void* pixels); - - void uniform1f(GC3Dint location, GC3Dfloat x); - void uniform1fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v); - void uniform1i(GC3Dint location, GC3Dint x); - void uniform1iv(GC3Dint location, GC3Dsizei, GC3Dint* v); - void uniform2f(GC3Dint location, GC3Dfloat x, GC3Dfloat y); - void uniform2fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v); - void uniform2i(GC3Dint location, GC3Dint x, GC3Dint y); - void uniform2iv(GC3Dint location, GC3Dsizei, GC3Dint* v); - void uniform3f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z); - void uniform3fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v); - void uniform3i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z); - void uniform3iv(GC3Dint location, GC3Dsizei, GC3Dint* v); - void uniform4f(GC3Dint location, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w); - void uniform4fv(GC3Dint location, GC3Dsizei, GC3Dfloat* v); - void uniform4i(GC3Dint location, GC3Dint x, GC3Dint y, GC3Dint z, GC3Dint w); - void uniform4iv(GC3Dint location, GC3Dsizei, GC3Dint* v); - void uniformMatrix2fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value); - void uniformMatrix3fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value); - void uniformMatrix4fv(GC3Dint location, GC3Dsizei, GC3Dboolean transpose, GC3Dfloat* value); - - void useProgram(Platform3DObject); - void validateProgram(Platform3DObject); - - void vertexAttrib1f(GC3Duint index, GC3Dfloat x); - void vertexAttrib1fv(GC3Duint index, GC3Dfloat* values); - void vertexAttrib2f(GC3Duint index, GC3Dfloat x, GC3Dfloat y); - void vertexAttrib2fv(GC3Duint index, GC3Dfloat* values); - void vertexAttrib3f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z); - void vertexAttrib3fv(GC3Duint index, GC3Dfloat* values); - void vertexAttrib4f(GC3Duint index, GC3Dfloat x, GC3Dfloat y, GC3Dfloat z, GC3Dfloat w); - void vertexAttrib4fv(GC3Duint index, GC3Dfloat* values); - void vertexAttribPointer(GC3Duint index, GC3Dint size, GC3Denum type, GC3Dboolean normalized, - GC3Dsizei stride, GC3Dintptr offset); - - void viewport(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height); - - void markContextChanged(); - void markLayerComposited(); - bool layerComposited() const; - - void paintRenderingResultsToCanvas(ImageBuffer*, DrawingBuffer*); - PassRefPtr<Uint8ClampedArray> paintRenderingResultsToImageData(DrawingBuffer*, int&, int&); - - // Support for buffer creation and deletion - Platform3DObject createBuffer(); - Platform3DObject createFramebuffer(); - Platform3DObject createProgram(); - Platform3DObject createRenderbuffer(); - Platform3DObject createShader(GC3Denum); - Platform3DObject createTexture(); - - void deleteBuffer(Platform3DObject); - void deleteFramebuffer(Platform3DObject); - void deleteProgram(Platform3DObject); - void deleteRenderbuffer(Platform3DObject); - void deleteShader(Platform3DObject); - void deleteTexture(Platform3DObject); - - // Synthesizes an OpenGL error which will be returned from a - // later call to getError. This is used to emulate OpenGL ES - // 2.0 behavior on the desktop and to enforce additional error - // checking mandated by WebGL. - // - // Per the behavior of glGetError, this stores at most one - // instance of any given error, and returns them from calls to - // getError in the order they were added. - void synthesizeGLError(GC3Denum error); - - // Support for extensions. Returns a non-null object, though not - // all methods it contains may necessarily be supported on the - // current hardware. Must call Extensions3D::supports() to - // determine this. - Extensions3D* extensions(); - - static unsigned getClearBitsByFormat(GC3Denum); - - enum ChannelBits { - ChannelRed = 1, - ChannelGreen = 2, - ChannelBlue = 4, - ChannelAlpha = 8, - ChannelDepth = 16, - ChannelStencil = 32, - ChannelRGB = ChannelRed | ChannelGreen | ChannelBlue, - ChannelRGBA = ChannelRGB | ChannelAlpha, - }; - - static unsigned getChannelBitsByFormat(GC3Denum); - - // Possible alpha operations that may need to occur during - // pixel packing. FIXME: kAlphaDoUnmultiply is lossy and must - // be removed. - enum AlphaOp { - AlphaDoNothing = 0, - AlphaDoPremultiply = 1, - AlphaDoUnmultiply = 2 - }; - - enum ImageHtmlDomSource { - HtmlDomImage = 0, - HtmlDomCanvas = 1, - HtmlDomVideo = 2, - HtmlDomNone = 3 - }; - - class PLATFORM_EXPORT ImageExtractor { - public: - ImageExtractor(Image*, ImageHtmlDomSource, bool premultiplyAlpha, bool ignoreGammaAndColorProfile); - - ~ImageExtractor(); - - bool extractSucceeded() { return m_extractSucceeded; } - const void* imagePixelData() { return m_imagePixelData; } - unsigned imageWidth() { return m_imageWidth; } - unsigned imageHeight() { return m_imageHeight; } - DataFormat imageSourceFormat() { return m_imageSourceFormat; } - AlphaOp imageAlphaOp() { return m_alphaOp; } - unsigned imageSourceUnpackAlignment() { return m_imageSourceUnpackAlignment; } - ImageHtmlDomSource imageHtmlDomSource() { return m_imageHtmlDomSource; } - private: - // Extract the image and keeps track of its status, such as width, height, Source Alignment, format and AlphaOp etc. - // This needs to lock the resources or relevant data if needed and return true upon success - bool extractImage(bool premultiplyAlpha, bool ignoreGammaAndColorProfile); - - RefPtr<NativeImageSkia> m_nativeImage; - RefPtr<NativeImageSkia> m_skiaImage; - Image* m_image; - ImageHtmlDomSource m_imageHtmlDomSource; - bool m_extractSucceeded; - const void* m_imagePixelData; - unsigned m_imageWidth; - unsigned m_imageHeight; - DataFormat m_imageSourceFormat; - AlphaOp m_alphaOp; - unsigned m_imageSourceUnpackAlignment; - }; - - // The Following functions are implemented in GraphicsContext3DImagePacking.cpp - - // Packs the contents of the given Image which is passed in |pixels| into the passed Vector - // according to the given format and type, and obeying the flipY and AlphaOp flags. - // Returns true upon success. - static bool packImageData(Image*, const void* pixels, GC3Denum format, GC3Denum type, bool flipY, AlphaOp, DataFormat sourceFormat, unsigned width, unsigned height, unsigned sourceUnpackAlignment, Vector<uint8_t>& data); - - // Extracts the contents of the given ImageData into the passed Vector, - // packing the pixel data according to the given format and type, - // and obeying the flipY and premultiplyAlpha flags. Returns true - // upon success. - static bool extractImageData(const uint8_t*, const IntSize&, GC3Denum format, GC3Denum type, bool flipY, bool premultiplyAlpha, Vector<uint8_t>& data); - - // Helper function which extracts the user-supplied texture - // data, applying the flipY and premultiplyAlpha parameters. - // If the data is not tightly packed according to the passed - // unpackAlignment, the output data will be tightly packed. - // Returns true if successful, false if any error occurred. - static bool extractTextureData(unsigned width, unsigned height, GC3Denum format, GC3Denum type, unsigned unpackAlignment, bool flipY, bool premultiplyAlpha, const void* pixels, Vector<uint8_t>& data); - - // End GraphicsContext3DImagePacking.cpp functions - - // This is the order of bytes to use when doing a readback. - enum ReadbackOrder { - ReadbackRGBA, - ReadbackSkia - }; - - // Helper function which does a readback from the currently-bound - // framebuffer into a buffer of a certain size with 4-byte pixels. - void readBackFramebuffer(unsigned char* pixels, int width, int height, ReadbackOrder, AlphaOp); - -private: - friend class Extensions3D; - - GraphicsContext3D(PassOwnPtr<blink::WebGraphicsContext3D>, bool preserveDrawingBuffer); - GraphicsContext3D(PassOwnPtr<blink::WebGraphicsContext3DProvider>, bool preserveDrawingBuffer); - - // Helper for packImageData/extractImageData/extractTextureData which implement packing of pixel - // data into the specified OpenGL destination format and type. - // A sourceUnpackAlignment of zero indicates that the source - // data is tightly packed. Non-zero values may take a slow path. - // Destination data will have no gaps between rows. - // Implemented in GraphicsContext3DImagePacking.cpp - static bool packPixels(const uint8_t* sourceData, DataFormat sourceDataFormat, unsigned width, unsigned height, unsigned sourceUnpackAlignment, unsigned destinationFormat, unsigned destinationType, AlphaOp, void* destinationData, bool flipY); - - void paintFramebufferToCanvas(int framebuffer, int width, int height, bool premultiplyAlpha, ImageBuffer*); - // Helper function to flip a bitmap vertically. - void flipVertically(uint8_t* data, int width, int height); - - // Extensions3D support. - bool supportsExtension(const String& name); - bool ensureExtensionEnabled(const String& name); - bool isExtensionEnabled(const String& name); - - void initializeExtensions(); - - bool preserveDrawingBuffer() const { return m_preserveDrawingBuffer; } - - OwnPtr<blink::WebGraphicsContext3DProvider> m_provider; - blink::WebGraphicsContext3D* m_impl; - OwnPtr<GraphicsContext3DContextLostCallbackAdapter> m_contextLostCallbackAdapter; - OwnPtr<GraphicsContext3DErrorMessageCallbackAdapter> m_errorMessageCallbackAdapter; - OwnPtr<blink::WebGraphicsContext3D> m_ownedWebContext; - OwnPtr<Extensions3D> m_extensions; - bool m_initializedAvailableExtensions; - HashSet<String> m_enabledExtensions; - HashSet<String> m_requestableExtensions; - bool m_layerComposited; - bool m_preserveDrawingBuffer; - int m_packAlignment; - - enum ResourceSafety { - ResourceSafetyUnknown, - ResourceSafe, - ResourceUnsafe - }; - ResourceSafety m_resourceSafety; - - // If the width and height of the Canvas's backing store don't - // match those that we were given in the most recent call to - // reshape(), then we need an intermediate bitmap to read back the - // frame buffer into. This seems to happen when CSS styles are - // used to resize the Canvas. - SkBitmap m_resizingBitmap; - - GrContext* m_grContext; - - // Used to flip a bitmap vertically. - Vector<uint8_t> m_scanline; -}; - -} // namespace WebCore - -#endif // GraphicsContext3D_h |