Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10bc3652 authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Add support for paletted textures."

parents e2163557 7adaf3d1
Loading
Loading
Loading
Loading
+21 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@

#include <GLES2/gl2.h>

#include <SkCanvas.h>

#include <utils/threads.h>

#include "TextureCache.h"
@@ -192,8 +194,12 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool rege
        // decoding happened
        texture->blend = !bitmap->isOpaque();
        break;
    case SkBitmap::kIndex8_Config:
        uploadPalettedTexture(resize, bitmap, texture->width, texture->height);
        texture->blend = false;
        break;
    default:
        LOGW("Unsupported bitmap config");
        LOGW("Unsupported bitmap config: %d", bitmap->getConfig());
        break;
    }

@@ -204,6 +210,20 @@ void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool rege
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}

void TextureCache::uploadPalettedTexture(bool resize, SkBitmap* bitmap,
        uint32_t width, uint32_t height) {
    SkBitmap rgbaBitmap;
    rgbaBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height);
    rgbaBitmap.allocPixels();
    rgbaBitmap.eraseColor(0);

    SkCanvas canvas(rgbaBitmap);
    canvas.drawBitmap(*bitmap, 0.0f, 0.0f, NULL);

    uploadToTexture(resize, GL_RGBA, rgbaBitmap.rowBytesAsPixels(), height,
            GL_UNSIGNED_BYTE, rgbaBitmap.getPixels());
}

void TextureCache::uploadToTexture(bool resize, GLenum format, GLsizei width, GLsizei height,
        GLenum type, const GLvoid * data) {
    if (resize) {
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ private:
     */
    void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false);

    void uploadPalettedTexture(bool resize, SkBitmap* bitmap, uint32_t width, uint32_t height);
    void uploadToTexture(bool resize, GLenum format, GLsizei width, GLsizei height,
            GLenum type, const GLvoid * data);