summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/OpenGLRenderer.h')
-rw-r--r--libs/hwui/OpenGLRenderer.h38
1 files changed, 35 insertions, 3 deletions
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 6f6b997bd81e..527bf3e46308 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -45,12 +45,17 @@ public:
transform(s->transform),
clipRect(s->clipRect),
flags(kFlagDirtyTransform),
- previous(s) {
+ previous(s),
+ layer(0.0f, 0.0f, 0.0f, 0.0f),
+ texture(0),
+ fbo(0),
+ alpha(255) {
}
enum Flags {
kFlagClipSet = 0x1,
kFlagDirtyTransform = 0x2,
+ kFlagIsLayer = 0x4,
};
const Rect& getMappedClip();
@@ -67,6 +72,12 @@ public:
// Previous snapshot in the frames stack
sp<Snapshot> previous;
+ // Layer, only set if kFlagIsLayer is set
+ Rect layer;
+ GLuint texture;
+ GLuint fbo;
+ float alpha;
+
private:
// Clipping rectangle mapped with the transform
Rect mappedClip;
@@ -76,7 +87,10 @@ struct SimpleVertex {
float position[2];
}; // struct SimpleVertex
-typedef char* shader;
+struct TextureVertex {
+ float position[2];
+ float texture[2];
+}; // struct TextureVertex
class Program: public LightRefBase<Program> {
public:
@@ -110,6 +124,7 @@ private:
class DrawColorProgram: public Program {
public:
DrawColorProgram();
+ DrawColorProgram(const char* vertex, const char* fragment);
void use(const GLfloat* projectionMatrix, const GLfloat* modelViewMatrix,
const GLfloat* transformMatrix);
@@ -120,6 +135,17 @@ public:
int projection;
int modelView;
int transform;
+
+protected:
+ void getAttribsAndUniforms();
+};
+
+class DrawTextureProgram: public DrawColorProgram {
+public:
+ DrawTextureProgram();
+
+ int sampler;
+ int texCoords;
};
///////////////////////////////////////////////////////////////////////////////
@@ -139,6 +165,9 @@ public:
void restore();
void restoreToCount(int saveCount);
+ int saveLayer(float left, float top, float right, float bottom, const SkPaint* p, int flags);
+ int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int flags);
+
void translate(float dx, float dy);
void rotate(float degrees);
void scale(float sx, float sy);
@@ -152,7 +181,7 @@ public:
bool clipRect(float left, float top, float right, float bottom);
void drawColor(int color, SkXfermode::Mode mode);
- void drawRect(float left, float top, float right, float bottom, SkPaint* paint);
+ void drawRect(float left, float top, float right, float bottom, const SkPaint* paint);
private:
int saveSnapshot();
@@ -161,6 +190,8 @@ private:
void setScissorFromClip();
void drawColorRect(float left, float top, float right, float bottom, int color);
+ void drawTextureRect(float left, float top, float right, float bottom, GLuint texture,
+ float alpha);
// Dimensions of the drawing surface
int mWidth, mHeight;
@@ -180,6 +211,7 @@ private:
// Shaders
sp<DrawColorProgram> mDrawColorShader;
+ sp<DrawTextureProgram> mDrawTextureShader;
}; // class OpenGLRenderer
}; // namespace uirenderer