Title: [126587] trunk/Source/WebCore
Revision
126587
Author
[email protected]
Date
2012-08-24 08:12:53 -0700 (Fri, 24 Aug 2012)

Log Message

[BlackBerry] Extend LayerFilterRenderer in preparation for CSS Shaders
https://bugs.webkit.org/show_bug.cgi?id=94724

Patch by Joshua Netterfield <[email protected]> on 2012-08-24
Reviewed by George Staikos.

LayerFilterRenderer defines a CSS Filter in terms of one or more `Action`s.
A LayerFilterRendererAction holds a vertex shader, a fragment shader, and
zero or more `Parameter`s. A Parameter is a uniform, varying, or other
information which is needed to render a filter.

This patch implements certain new Parameter types, including vertex/element
buffers and vertex attributes which are needed to implement composited
CSS Shaders on BB10. In addition, a new drawing mode is required in order
to draw CSS Shaders meshes from vertex/element buffers.

No new tests, because this patch introduces no new functionality. When
the patch which enables CSS Shaders on BB10 in upstreamed, tests for
CSS Shaders will prove this code to be correct.

* platform/graphics/blackberry/LayerFilterRenderer.cpp:
(WebCore::operationTypeToProgramID):
(WebCore::Uniform::Uniform):
(WebCore::Uniform1f::create):
(WebCore::Uniform1f::Uniform1f):
(WebCore):
(WebCore::Uniform1i::apply):
(WebCore::Uniform1i::create):
(WebCore::Uniform1i::Uniform1i):
(WebCore::Uniform2f::create):
(WebCore::Uniform2f::Uniform2f):
(WebCore::Uniform3f::create):
(WebCore::Uniform3f::Uniform3f):
(WebCore::Uniform4f::apply):
(WebCore::Uniform4f::create):
(WebCore::Uniform4f::Uniform4f):
(WebCore::Matrix4fv::apply):
(WebCore::Matrix4fv::create):
(WebCore::Matrix4fv::Matrix4fv):
(WebCore::Matrix4fv::~Matrix4fv):
(WebCore::Buffer::apply):
(WebCore::Buffer::restoreState):
(WebCore::Buffer::create):
(WebCore::Buffer::Buffer):
(WebCore::VertexAttribf::apply):
(WebCore::VertexAttribf::restoreState):
(WebCore::VertexAttribf::create):
(WebCore::VertexAttribf::VertexAttribf):
(WebCore::LayerFilterRendererAction::LayerFilterRendererAction):
(WebCore::LayerFilterRendererAction::useActionOn):
(WebCore::LayerFilterRendererAction::restoreState):
(WebCore::LayerFilterRenderer::LayerFilterRenderer):
(WebCore::LayerFilterRenderer::actionsForOperations):
(WebCore::LayerFilterRenderer::applyActions):
* platform/graphics/blackberry/LayerFilterRenderer.h:
(Parameter):
(WebCore::Parameter::restoreState):
(WebCore::Parameter::~Parameter):
(WebCore::Parameter::Parameter):
(WebCore):
(Uniform):
(WebCore::Uniform::~Uniform):
(Uniform1f):
(Uniform1i):
(Uniform2f):
(Uniform3f):
(Uniform4f):
(Matrix4fv):
(Buffer):
(VertexAttribf):
(WebCore::LayerFilterRendererAction::appendParameter):
(LayerFilterRendererAction):
(WebCore::LayerFilterRendererAction::drawingMode):
(WebCore::LayerFilterRendererAction::setDrawingMode):
(WebCore::LayerFilterRendererAction::drawingModeParameter):
(WebCore::LayerFilterRendererAction::setDrawingModeParameter):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (126586 => 126587)


--- trunk/Source/WebCore/ChangeLog	2012-08-24 15:10:17 UTC (rev 126586)
+++ trunk/Source/WebCore/ChangeLog	2012-08-24 15:12:53 UTC (rev 126587)
@@ -1,3 +1,81 @@
+2012-08-24  Joshua Netterfield  <[email protected]>
+
+        [BlackBerry] Extend LayerFilterRenderer in preparation for CSS Shaders
+        https://bugs.webkit.org/show_bug.cgi?id=94724
+
+        Reviewed by George Staikos.
+
+        LayerFilterRenderer defines a CSS Filter in terms of one or more `Action`s.
+        A LayerFilterRendererAction holds a vertex shader, a fragment shader, and
+        zero or more `Parameter`s. A Parameter is a uniform, varying, or other
+        information which is needed to render a filter.
+
+        This patch implements certain new Parameter types, including vertex/element
+        buffers and vertex attributes which are needed to implement composited
+        CSS Shaders on BB10. In addition, a new drawing mode is required in order
+        to draw CSS Shaders meshes from vertex/element buffers.
+
+        No new tests, because this patch introduces no new functionality. When
+        the patch which enables CSS Shaders on BB10 in upstreamed, tests for
+        CSS Shaders will prove this code to be correct.
+
+        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
+        (WebCore::operationTypeToProgramID):
+        (WebCore::Uniform::Uniform):
+        (WebCore::Uniform1f::create):
+        (WebCore::Uniform1f::Uniform1f):
+        (WebCore):
+        (WebCore::Uniform1i::apply):
+        (WebCore::Uniform1i::create):
+        (WebCore::Uniform1i::Uniform1i):
+        (WebCore::Uniform2f::create):
+        (WebCore::Uniform2f::Uniform2f):
+        (WebCore::Uniform3f::create):
+        (WebCore::Uniform3f::Uniform3f):
+        (WebCore::Uniform4f::apply):
+        (WebCore::Uniform4f::create):
+        (WebCore::Uniform4f::Uniform4f):
+        (WebCore::Matrix4fv::apply):
+        (WebCore::Matrix4fv::create):
+        (WebCore::Matrix4fv::Matrix4fv):
+        (WebCore::Matrix4fv::~Matrix4fv):
+        (WebCore::Buffer::apply):
+        (WebCore::Buffer::restoreState):
+        (WebCore::Buffer::create):
+        (WebCore::Buffer::Buffer):
+        (WebCore::VertexAttribf::apply):
+        (WebCore::VertexAttribf::restoreState):
+        (WebCore::VertexAttribf::create):
+        (WebCore::VertexAttribf::VertexAttribf):
+        (WebCore::LayerFilterRendererAction::LayerFilterRendererAction):
+        (WebCore::LayerFilterRendererAction::useActionOn):
+        (WebCore::LayerFilterRendererAction::restoreState):
+        (WebCore::LayerFilterRenderer::LayerFilterRenderer):
+        (WebCore::LayerFilterRenderer::actionsForOperations):
+        (WebCore::LayerFilterRenderer::applyActions):
+        * platform/graphics/blackberry/LayerFilterRenderer.h:
+        (Parameter):
+        (WebCore::Parameter::restoreState):
+        (WebCore::Parameter::~Parameter):
+        (WebCore::Parameter::Parameter):
+        (WebCore):
+        (Uniform):
+        (WebCore::Uniform::~Uniform):
+        (Uniform1f):
+        (Uniform1i):
+        (Uniform2f):
+        (Uniform3f):
+        (Uniform4f):
+        (Matrix4fv):
+        (Buffer):
+        (VertexAttribf):
+        (WebCore::LayerFilterRendererAction::appendParameter):
+        (LayerFilterRendererAction):
+        (WebCore::LayerFilterRendererAction::drawingMode):
+        (WebCore::LayerFilterRendererAction::setDrawingMode):
+        (WebCore::LayerFilterRendererAction::drawingModeParameter):
+        (WebCore::LayerFilterRendererAction::setDrawingModeParameter):
+
 2012-08-24  Tommy Widenflycht  <[email protected]>
 
         MediaStream API: Add readyState functionality to RTCPeerConnection

Modified: trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp (126586 => 126587)


--- trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp	2012-08-24 15:10:17 UTC (rev 126586)
+++ trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.cpp	2012-08-24 15:12:53 UTC (rev 126587)
@@ -63,7 +63,7 @@
         return LayerData::CSSFilterShaderShadow;
 #if ENABLE(CSS_SHADERS)
     case FilterOperation::CUSTOM:
-        return LayerData::CSSFilterCustom;
+        return LayerData::CSSFilterShaderCustom;
 #endif
     default:
         ASSERT_NOT_REACHED();
@@ -71,7 +71,7 @@
     }
 }
 
-Uniformf::Uniformf(int c_location)
+Uniform::Uniform(int c_location)
     : m_location(c_location)
 {
 }
@@ -81,29 +81,45 @@
     glUniform1f(location(), m_val);
 }
 
-PassRefPtr<Uniformf> Uniform1f::create(int location, float val)
+PassRefPtr<Uniform> Uniform1f::create(int location, float val)
 {
     return adoptRef(new Uniform1f(location, val));
 }
 
 Uniform1f::Uniform1f(int c_location, float c_val)
-    : Uniformf(c_location)
+    : Uniform(c_location)
     , m_val(c_val)
 {
 }
 
+void Uniform1i::apply()
+{
+    glUniform1i(location(), m_val);
+}
+
+PassRefPtr<Uniform> Uniform1i::create(int location, int val)
+{
+    return adoptRef(new Uniform1i(location, val));
+}
+
+Uniform1i::Uniform1i(int c_location, int c_val)
+    : Uniform(c_location)
+    , m_val(c_val)
+{
+}
+
 void Uniform2f::apply()
 {
     glUniform2f(location(), m_val[0], m_val[1]);
 }
 
-PassRefPtr<Uniformf> Uniform2f::create(int location, float val0, float val1)
+PassRefPtr<Uniform> Uniform2f::create(int location, float val0, float val1)
 {
     return adoptRef(new Uniform2f(location, val0, val1));
 }
 
 Uniform2f::Uniform2f(int c_location, float c_val0, float c_val1)
-    : Uniformf(c_location)
+    : Uniform(c_location)
 {
     m_val[0] = c_val0;
     m_val[1] = c_val1;
@@ -114,19 +130,111 @@
     glUniform3f(location(), m_val[0], m_val[1], m_val[2]);
 }
 
-PassRefPtr<Uniformf> Uniform3f::create(int location, float val0, float val1, float val2)
+PassRefPtr<Uniform> Uniform3f::create(int location, float val0, float val1, float val2)
 {
     return adoptRef(new Uniform3f(location, val0, val1, val2));
 }
 
 Uniform3f::Uniform3f(int c_location, float c_val0, float c_val1, float c_val2)
-    : Uniformf(c_location)
+    : Uniform(c_location)
 {
     m_val[0] = c_val0;
     m_val[1] = c_val1;
     m_val[2] = c_val2;
 }
 
+void Uniform4f::apply()
+{
+    glUniform4f(location(), m_val[0], m_val[1], m_val[2], m_val[3]);
+}
+
+PassRefPtr<Uniform> Uniform4f::create(int location, float val0, float val1, float val2, float val3)
+{
+    return adoptRef(new Uniform4f(location, val0, val1, val2, val3));
+}
+
+Uniform4f::Uniform4f(int c_location, float c_val0, float c_val1, float c_val2, float c_val3)
+    : Uniform(c_location)
+{
+    m_val[0] = c_val0;
+    m_val[1] = c_val1;
+    m_val[2] = c_val2;
+    m_val[3] = c_val3;
+}
+
+void Matrix4fv::apply()
+{
+    glUniformMatrix4fv(location(), m_size, m_transpose, m_array);
+}
+
+PassRefPtr<Parameter> Matrix4fv::create(GLint location, GLsizei size, GLboolean transpose, GLfloat* array)
+{
+    return adoptRef(new Matrix4fv(location, size, transpose, array));
+}
+
+Matrix4fv::Matrix4fv(GLint clocation, GLsizei size, GLboolean transpose, GLfloat* array)
+    : Uniform(clocation)
+    , m_size(size)
+    , m_transpose(transpose)
+    , m_array(0)
+{
+    m_array = new GLfloat[size * 4 * 4];
+    std::memcpy(m_array, array, size * 4 * 4 * sizeof(GLfloat));
+}
+
+Matrix4fv::~Matrix4fv()
+{
+    delete[] m_array;
+}
+
+void Buffer::apply()
+{
+    glBindBuffer(m_buffer, m_object);
+}
+
+void Buffer::restoreState()
+{
+    glBindBuffer(m_buffer, 0);
+}
+
+PassRefPtr<Parameter> Buffer::create(GLenum buffer, GLuint object)
+{
+    return adoptRef(new Buffer(buffer, object));
+}
+
+Buffer::Buffer(GLenum buffer, GLuint object)
+    : Parameter()
+    , m_buffer(buffer)
+    , m_object(object)
+{
+}
+
+void VertexAttribf::apply()
+{
+    glVertexAttribPointer(m_location, m_size, GL_FLOAT, false, m_bytesPerVertex, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(m_offset)));
+    glEnableVertexAttribArray(m_location);
+}
+
+void VertexAttribf::restoreState()
+{
+    glDisableVertexAttribArray(m_location);
+}
+
+PassRefPtr<Parameter> VertexAttribf::create(int location, int size, int bytesPerVertex, int offset)
+{
+    return adoptRef(new VertexAttribf(location, size, bytesPerVertex, offset));
+}
+
+
+VertexAttribf::VertexAttribf(int location, int size, int bytesPerVertex, int offset)
+    : Parameter()
+    , m_location(location)
+    , m_size(size)
+    , m_bytesPerVertex(bytesPerVertex)
+    , m_offset(offset)
+{
+}
+
 PassRefPtr<LayerFilterRendererAction> LayerFilterRendererAction::create(int programId)
 {
     return adoptRef(new LayerFilterRendererAction(programId));
@@ -134,8 +242,10 @@
 
 LayerFilterRendererAction::LayerFilterRendererAction(int c_programId)
     : m_programId(c_programId)
+    , m_customId(-1)
     , m_pushSnapshot(false)
     , m_popSnapshot(false)
+    , m_drawingMode(DrawTriangleFanArrays)
 {
 }
 
@@ -147,10 +257,16 @@
         return;
     }
     glUseProgram(renderer->m_cssFilterProgramObject[m_programId]);
-    for (unsigned i = 0; i < m_uniforms.size(); ++i)
-        m_uniforms[i]->apply();
+    for (unsigned i = 0; i < m_parameters.size(); ++i)
+        m_parameters[i]->apply();
 }
 
+void LayerFilterRendererAction::restoreState()
+{
+    for (unsigned i = 0; i < m_parameters.size(); ++i)
+        m_parameters[i]->restoreState();
+}
+
 PassOwnPtr<LayerFilterRenderer> LayerFilterRenderer::create(const int& positionLocation, const int& texCoordLocation)
 {
     return adoptPtr(new LayerFilterRenderer(positionLocation, texCoordLocation));
@@ -160,6 +276,9 @@
     : m_positionLocation(positionLocation)
     , m_texCoordLocation(texCoordLocation)
 {
+    // If you ever move this stuff, please make sure that
+    // everything in this constructor is called BEFORE actionsForOperations.
+
     for (int i = 0; i < LayerData::NumberOfCSSFilterShaders; ++i)
         m_cssFilterProgramObject[i] = 0;
 
@@ -429,14 +548,14 @@
         case FilterOperation::SEPIA:
         case FilterOperation::SATURATE:
         case FilterOperation::HUE_ROTATE:
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[programId]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[programId]
                 , static_cast<const BasicColorMatrixFilterOperation&>(operation).amount()));
             break;
         case FilterOperation::INVERT:
         case FilterOperation::BRIGHTNESS:
         case FilterOperation::CONTRAST:
         case FilterOperation::OPACITY:
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[programId]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[programId]
                 , static_cast<const BasicComponentTransferFilterOperation&>(operation).amount()));
             break;
         case FilterOperation::BLUR:
@@ -449,14 +568,14 @@
             double amount = static_cast<const BlurFilterOperation&>(operation).stdDeviation().value();
 
             // BLUR Y:
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurY], amount));
-            ret.last()->appendUniform(Uniform1f::create(m_blurAmountLocation[0]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurY], amount));
+            ret.last()->appendParameter(Uniform1f::create(m_blurAmountLocation[0]
                 , 1.0f / float(surface->size().height())));
 
             // BLUR X:
             ret.append(LayerFilterRendererAction::create(LayerData::CSSFilterShaderBlurX));
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurX], amount));
-            ret.last()->appendUniform(Uniform1f::create(m_blurAmountLocation[1]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurX], amount));
+            ret.last()->appendParameter(Uniform1f::create(m_blurAmountLocation[1]
                 , 1.0f / float(surface->size().width())));
 
             }
@@ -471,26 +590,26 @@
             //     4. repaint original on top of mask
             const DropShadowFilterOperation& dsfo = static_cast<const DropShadowFilterOperation&>(operation);
             ret.last()->setPushSnapshot();
-            ret.last()->appendUniform(Uniform2f::create(m_offsetLocation
+            ret.last()->appendParameter(Uniform2f::create(m_offsetLocation
                 , float(dsfo.x()) / float(surface->size().width())
                 , float(dsfo.y()) / float(surface->size().height())));
-            ret.last()->appendUniform(Uniform3f::create(m_shadowColorLocation
+            ret.last()->appendParameter(Uniform3f::create(m_shadowColorLocation
                 , float(dsfo.color().red()) / 255.0f
                 , float(dsfo.color().green()) / 255.0f
                 , float(dsfo.color().blue()) / 255.0f));
 
             // BLUR Y
             ret.append(LayerFilterRendererAction::create(LayerData::CSSFilterShaderBlurY));
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurY]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurY]
                 , dsfo.stdDeviation()));
-            ret.last()->appendUniform(Uniform1f::create(m_blurAmountLocation[0]
+            ret.last()->appendParameter(Uniform1f::create(m_blurAmountLocation[0]
                 , 1.0f / float(surface->size().height())));
 
             // BLUR X
             ret.append(LayerFilterRendererAction::create(LayerData::CSSFilterShaderBlurX));
-            ret.last()->appendUniform(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurX]
+            ret.last()->appendParameter(Uniform1f::create(m_amountLocation[LayerData::CSSFilterShaderBlurX]
                 , dsfo.stdDeviation()));
-            ret.last()->appendUniform(Uniform1f::create(m_blurAmountLocation[1]
+            ret.last()->appendParameter(Uniform1f::create(m_blurAmountLocation[1]
                 , 1.0f / float(surface->size().width())));
 
             // Repaint original image
@@ -575,7 +694,24 @@
         if (actions[i]->shouldPopSnapshot())
             popSnapshot();
 
-        glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+        switch (actions[i]->drawingMode()) {
+        case LayerFilterRendererAction::DrawTriangleFanArrays:
+            glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
+            break;
+        case LayerFilterRendererAction::DrawTriangleElementsUShort0:
+            glDrawElements(GL_TRIANGLES, actions[i]->drawingModeParameter(), GL_UNSIGNED_SHORT, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(0)));
+            break;
+        case LayerFilterRendererAction::NumberOfDrawingModes:
+            ASSERT_NOT_REACHED();
+            break;
+        }
+
+        actions[i]->restoreState();
+
+        glVertexAttribPointer(m_positionLocation, 2, GL_FLOAT, GL_FALSE, 0, &layer->getTransformedBounds() );
+        glEnableVertexAttribArray(m_positionLocation);
+        glVertexAttribPointer(m_texCoordLocation, 2, GL_FLOAT, GL_FALSE, 0, texcoords);
+        glEnableVertexAttribArray(m_texCoordLocation);
     }
 
     m_texture->unprotect();

Modified: trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h (126586 => 126587)


--- trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h	2012-08-24 15:10:17 UTC (rev 126586)
+++ trunk/Source/WebCore/platform/graphics/blackberry/LayerFilterRenderer.h	2012-08-24 15:12:53 UTC (rev 126587)
@@ -41,22 +41,33 @@
 class LayerFilterRendererAction;
 class LayerRendererSurface;
 
-class Uniformf : public RefCounted<Uniformf> {
-    WTF_MAKE_NONCOPYABLE(Uniformf);
+class Parameter : public RefCounted<Parameter> {
+    WTF_MAKE_NONCOPYABLE(Parameter);
 public:
     virtual void apply() = 0;
+    virtual void restoreState() { }
+    virtual ~Parameter() { }
+protected:
+    explicit Parameter() { }
+};
 
+class Uniform : public Parameter {
+    WTF_MAKE_NONCOPYABLE(Uniform);
+public:
+    virtual void apply() = 0;
+    virtual ~Uniform() { }
+
 protected:
-    Uniformf(int location);
+    Uniform(int location);
     const int& location() const { return m_location; }
 
 private:
     int m_location;
 };
 
-class Uniform1f : public Uniformf {
+class Uniform1f : public Uniform {
 public:
-    static PassRefPtr<Uniformf> create(int location, float val);
+    static PassRefPtr<Uniform> create(int location, float val);
 
 protected:
     Uniform1f(int location, float val);
@@ -66,11 +77,23 @@
     float m_val;
 };
 
-class Uniform2f : public Uniformf {
+class Uniform1i : public Uniform {
 public:
-    static PassRefPtr<Uniformf> create(int location, float val0, float val1);
+    static PassRefPtr<Uniform> create(int location, int val);
 
 protected:
+    Uniform1i(int location, int val);
+
+private:
+    virtual void apply();
+    int m_val;
+};
+
+class Uniform2f : public Uniform {
+public:
+    static PassRefPtr<Uniform> create(int location, float val0, float val1);
+
+protected:
     Uniform2f(int location, float val0, float val1);
 
 private:
@@ -78,9 +101,9 @@
     float m_val[2];
 };
 
-class Uniform3f : public Uniformf {
+class Uniform3f : public Uniform {
 public:
-    static PassRefPtr<Uniformf> create(int location, float val0, float val1, float val2);
+    static PassRefPtr<Uniform> create(int location, float val0, float val1, float val2);
 
 protected:
     Uniform3f(int location, float val0, float val1, float val2);
@@ -90,6 +113,64 @@
     float m_val[3];
 };
 
+class Uniform4f : public Uniform {
+public:
+    static PassRefPtr<Uniform> create(int location, float val0, float val1, float val2, float val3);
+
+protected:
+    Uniform4f(int location, float val0, float val1, float val2, float val3);
+
+private:
+    virtual void apply();
+    float m_val[4];
+};
+
+class Matrix4fv : public Uniform {
+public:
+    static PassRefPtr<Parameter> create(GLint location, GLsizei, GLboolean transpose, GLfloat* array);
+
+protected:
+    Matrix4fv(GLint location, GLsizei length, GLboolean transpose, GLfloat* array);
+    ~Matrix4fv();
+
+private:
+    virtual void apply();
+    GLint m_location;
+    GLsizei m_size;
+    GLboolean m_transpose;
+    GLfloat* m_array;
+};
+
+class Buffer : public Parameter {
+public:
+    static PassRefPtr<Parameter> create(GLenum buffer, GLuint index);
+
+protected:
+    Buffer(GLenum buffer, GLuint index);
+
+private:
+    virtual void apply();
+    virtual void restoreState();
+    GLenum m_buffer;
+    GLuint m_object;
+};
+
+class VertexAttribf : public Parameter {
+public:
+    static PassRefPtr<Parameter> create(int location, int size, int bytesPerVertex, int offset);
+
+protected:
+    VertexAttribf(int location, int size, int bytesPerVertex, int offset);
+
+private:
+    virtual void apply();
+    virtual void restoreState();
+    int m_location;
+    int m_size;
+    int m_bytesPerVertex;
+    int m_offset;
+};
+
 class LayerFilterRendererAction : public RefCounted<LayerFilterRendererAction> {
 public:
     static PassRefPtr<LayerFilterRendererAction> create(int programId);
@@ -102,15 +183,33 @@
     bool shouldPopSnapshot() const { return m_popSnapshot; }
     void setPopSnapshot() { m_popSnapshot = true; }
 
-    void appendUniform(const RefPtr<Uniformf>& uniform) { m_uniforms.append(uniform); }
+    void appendParameter(const RefPtr<Parameter>& uniform) { m_parameters.append(uniform); }
     void useActionOn(LayerFilterRenderer*);
+    void restoreState();
 
+    enum DrawingMode {
+        DrawTriangleFanArrays = 0,
+        DrawTriangleElementsUShort0,
+        NumberOfDrawingModes
+    };
+
+    DrawingMode drawingMode() const { return m_drawingMode; }
+    void setDrawingMode(const DrawingMode& mode) { m_drawingMode = mode; }
+
+    int drawingModeParameter() const { return m_drawingModeParameter; }
+    void setDrawingModeParameter(int p) { m_drawingModeParameter = p; }
+
+
 protected:
     int m_programId;
     bool m_pushSnapshot;
     bool m_popSnapshot;
 
-    Vector<RefPtr<Uniformf> > m_uniforms;
+    Vector<RefPtr<Parameter> > m_parameters;
+
+    DrawingMode m_drawingMode;
+    int m_drawingModeParameter;
+
 private:
     LayerFilterRendererAction(int programId);
 };
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to