#ifndef FECustomFilter_h
#define FECustomFilter_h
#if ENABLE(CSS_SHADERS) && ENABLE(WEBGL)
#include "CustomFilterOperation.h"
#include "Filter.h"
#include "FilterEffect.h"
#include <wtf/RefPtr.h>
namespace JSC {
class Uint8ClampedArray;
}
namespace WebCore {
class CachedShader;
class CustomFilterMesh;
class CustomFilterNumberParameter;
class CustomFilterProgram;
class CustomFilterShader;
class DrawingBuffer;
class GraphicsContext3D;
class HostWindow;
class IntSize;
class Texture;
class FECustomFilter : public FilterEffect {
public:
static PassRefPtr<FECustomFilter> create(Filter*, HostWindow*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType,
CustomFilterOperation::MeshType);
virtual void platformApplySoftware();
virtual void dump();
virtual TextStream& externalRepresentation(TextStream&, int indention) const;
private:
FECustomFilter(Filter*, HostWindow*, PassRefPtr<CustomFilterProgram>, const CustomFilterParameterList&,
unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType,
CustomFilterOperation::MeshType);
void initializeContext(const IntSize& contextSize);
void resizeContext(const IntSize& newContextSize);
void bindVertexAttribute(int attributeLocation, unsigned size, unsigned& offset);
void bindProgramNumberParameters(int uniformLocation, CustomFilterNumberParameter*);
void bindProgramParameters();
void bindProgramAndBuffers(Uint8ClampedArray* srcPixelArray);
HostWindow* m_hostWindow;
RefPtr<GraphicsContext3D> m_context;
RefPtr<DrawingBuffer> m_drawingBuffer;
RefPtr<Texture> m_inputTexture;
RefPtr<CustomFilterShader> m_shader;
RefPtr<CustomFilterMesh> m_mesh;
IntSize m_contextSize;
RefPtr<CustomFilterProgram> m_program;
CustomFilterParameterList m_parameters;
unsigned m_meshRows;
unsigned m_meshColumns;
CustomFilterOperation::MeshBoxType m_meshBoxType;
CustomFilterOperation::MeshType m_meshType;
};
}
#endif // ENABLE(CSS_SHADERS) && ENABLE(WEBGL)
#endif // FECustomFilter_h