void SkiaBitmapShader::describe(ProgramDescription& description, const Extensions& extensions) { Texture* texture = mCaches->textureCache.get(mBitmap); if (!texture) return; mTexture = texture; const float width = texture->width; const float height = texture->height; description.hasBitmap = true; // The driver does not support non-power of two mirrored/repeated // textures, so do it ourselves if (!extensions.hasNPot() && (!isPowerOfTwo(width) || !isPowerOfTwo(height)) && (mTileX != SkShader::kClamp_TileMode || mTileY != SkShader::kClamp_TileMode)) { description.isBitmapNpot = true; description.bitmapWrapS = gTileModes[mTileX]; description.bitmapWrapT = gTileModes[mTileY]; mWrapS = GL_CLAMP_TO_EDGE; mWrapT = GL_CLAMP_TO_EDGE; } else { mWrapS = gTileModes[mTileX]; mWrapT = gTileModes[mTileY]; } }