1 /* 2 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer. 12 * 2. Redistributions in binary form must reproduce the above 13 * copyright notice, this list of conditions and the following 14 * disclaimer in the documentation and/or other materials 15 * provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 21 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 22 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 26 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 27 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31 #ifndef FECustomFilter_h 32 #define FECustomFilter_h 33 34 #include "platform/graphics/GraphicsTypes3D.h" 35 #include "platform/graphics/filters/Filter.h" 36 #include "platform/graphics/filters/FilterEffect.h" 37 #include "platform/graphics/filters/custom/CustomFilterConstants.h" 38 #include "platform/graphics/filters/custom/CustomFilterOperation.h" 39 #include "wtf/RefPtr.h" 40 41 namespace WebCore { 42 43 class CustomFilterRenderer; 44 class CustomFilterValidatedProgram; 45 class GraphicsContext3D; 46 class IntSize; 47 48 class PLATFORM_EXPORT FECustomFilter : public FilterEffect { 49 public: 50 static PassRefPtr<FECustomFilter> create(Filter*, PassRefPtr<GraphicsContext3D>, PassRefPtr<CustomFilterValidatedProgram>, const CustomFilterParameterList&, 51 unsigned meshRows, unsigned meshColumns, CustomFilterMeshType); 52 53 virtual TextStream& externalRepresentation(TextStream&, int indention) const; 54 55 private: 56 FECustomFilter(Filter*, PassRefPtr<GraphicsContext3D>, PassRefPtr<CustomFilterValidatedProgram>, const CustomFilterParameterList&, 57 unsigned meshRows, unsigned meshColumns, CustomFilterMeshType); 58 ~FECustomFilter(); 59 60 virtual void applySoftware() OVERRIDE; 61 62 bool applyShader(); 63 void clearShaderResult(); 64 bool initializeContext(); 65 66 bool prepareForDrawing(); 67 68 void drawFilterMesh(Platform3DObject inputTexture); 69 bool ensureInputTexture(); 70 void uploadInputTexture(Uint8ClampedArray* srcPixelArray); 71 bool resizeContextIfNeeded(const IntSize&); 72 bool resizeContext(const IntSize&); 73 74 bool canUseMultisampleBuffers() const; 75 bool createMultisampleBuffer(); 76 bool resizeMultisampleBuffers(const IntSize&); 77 void resolveMultisampleBuffer(); 78 void deleteMultisampleRenderBuffers(); 79 80 bool ensureFrameBuffer(); 81 void deleteRenderBuffers(); 82 83 RefPtr<GraphicsContext3D> m_context; 84 RefPtr<CustomFilterValidatedProgram> m_validatedProgram; 85 RefPtr<CustomFilterRenderer> m_customFilterRenderer; 86 IntSize m_contextSize; 87 88 Platform3DObject m_inputTexture; 89 Platform3DObject m_frameBuffer; 90 Platform3DObject m_depthBuffer; 91 Platform3DObject m_destTexture; 92 93 bool m_triedMultisampleBuffer; 94 Platform3DObject m_multisampleFrameBuffer; 95 Platform3DObject m_multisampleRenderBuffer; 96 Platform3DObject m_multisampleDepthBuffer; 97 }; 98 99 } // namespace WebCore 100 101 #endif // FECustomFilter_h 102