summaryrefslogtreecommitdiff
path: root/libs/hwui/OpenGLRenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
-rw-r--r--libs/hwui/OpenGLRenderer.cpp34
1 files changed, 12 insertions, 22 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 3d9aa261edeb..3c36f954947f 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -144,11 +144,13 @@ OpenGLRenderer::OpenGLRenderer():
memcpy(mMeshVertices, gMeshVertices, sizeof(gMeshVertices));
- glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mMaxTextureUnits);
- if (mMaxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) {
+ mFirstSnapshot = new Snapshot;
+
+ GLint maxTextureUnits;
+ glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &maxTextureUnits);
+ if (maxTextureUnits < REQUIRED_TEXTURE_UNITS_COUNT) {
LOGW("At least %d texture units are required!", REQUIRED_TEXTURE_UNITS_COUNT);
}
- mLastTexture[0] = mLastTexture[1] = mLastTexture[2] = 0;
}
OpenGLRenderer::~OpenGLRenderer() {
@@ -171,11 +173,11 @@ void OpenGLRenderer::setViewport(int width, int height) {
mWidth = width;
mHeight = height;
- mFirstSnapshot.height = height;
+ mFirstSnapshot->height = height;
}
void OpenGLRenderer::prepare() {
- mSnapshot = &mFirstSnapshot;
+ mSnapshot = mFirstSnapshot;
mSaveCount = 0;
glDisable(GL_SCISSOR_TEST);
@@ -265,10 +267,6 @@ void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
glScissor(clip.left, mHeight - clip.bottom, clip.getWidth(), clip.getHeight());
Layer* layer = current->layer;
-
- // Compute the correct texture coordinates for the FBO texture
- // The texture is currently as big as the window but drawn with
- // a quad of the appropriate size
const Rect& rect = layer->layer;
drawTextureRect(rect.left, rect.top, rect.right, rect.bottom,
@@ -323,7 +321,6 @@ int OpenGLRenderer::saveLayerAlpha(float left, float top, float right, float bot
bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
float right, float bottom, int alpha, SkXfermode::Mode mode,int flags) {
-
LAYER_LOGD("Requesting layer %fx%f", right - left, bottom - top);
LAYER_LOGD("Layer cache size = %d", mLayerCache.getSize());
@@ -537,8 +534,6 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count,
return;
}
- glActiveTexture(GL_TEXTURE0);
-
float length;
switch (paint->getTextAlign()) {
case SkPaint::kCenter_Align:
@@ -687,7 +682,6 @@ void OpenGLRenderer::drawColorRect(float left, float top, float right, float bot
void OpenGLRenderer::drawLinearGradientShader(float left, float top, float right, float bottom,
float alpha, SkXfermode::Mode mode) {
- glActiveTexture(GL_TEXTURE1);
Texture* texture = mGradientCache.get(mShaderKey);
if (!texture) {
SkShader::TileMode tileMode = SkShader::kClamp_TileMode;
@@ -714,8 +708,8 @@ void OpenGLRenderer::drawLinearGradientShader(float left, float top, float right
mCurrentProgram->set(mOrthoMatrix, mModelView, mSnapshot->transform);
chooseBlending(mShaderBlend || alpha < 1.0f, mode);
- bindTexture(texture->id, mShaderTileX, mShaderTileY, 1);
- glUniform1i(mCurrentProgram->getUniform("gradientSampler"), 1);
+ bindTexture(texture->id, mShaderTileX, mShaderTileY, 0);
+ glUniform1i(mCurrentProgram->getUniform("gradientSampler"), 0);
Rect start(mShaderBounds[0], mShaderBounds[1], mShaderBounds[2], mShaderBounds[3]);
if (mShaderMatrix) {
@@ -747,7 +741,6 @@ void OpenGLRenderer::drawLinearGradientShader(float left, float top, float right
void OpenGLRenderer::drawBitmapShader(float left, float top, float right, float bottom,
float alpha, SkXfermode::Mode mode) {
- glActiveTexture(GL_TEXTURE2);
const Texture* texture = mTextureCache.get(mShaderBitmap);
const float width = texture->width;
@@ -782,8 +775,8 @@ void OpenGLRenderer::drawBitmapShader(float left, float top, float right, float
chooseBlending(texture->blend || alpha < 1.0f, mode);
// Texture
- bindTexture(texture->id, mShaderTileX, mShaderTileY, 2);
- glUniform1i(mCurrentProgram->getUniform("bitmapSampler"), 2);
+ bindTexture(texture->id, mShaderTileX, mShaderTileY, 0);
+ glUniform1i(mCurrentProgram->getUniform("bitmapSampler"), 0);
glUniformMatrix4fv(mCurrentProgram->getUniform("textureTransform"), 1,
GL_FALSE, &textureTransform.data[0]);
glUniform2f(mCurrentProgram->getUniform("textureDimension"), 1.0f / width, 1.0f / height);
@@ -917,10 +910,7 @@ void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermod
void OpenGLRenderer::bindTexture(GLuint texture, GLenum wrapS, GLenum wrapT, GLuint textureUnit) {
glActiveTexture(gTextureUnits[textureUnit]);
- if (texture != mLastTexture[textureUnit]) {
- glBindTexture(GL_TEXTURE_2D, texture);
- mLastTexture[textureUnit] = texture;
- }
+ glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrapS);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrapT);
}