Home | History | Annotate | Download | only in hwui

Lines Matching full:layer

35     LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->getFbo());
39 const float width = mLayer->layer.getWidth();
40 const float height = mLayer->layer.getHeight();
65 LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->getFbo());
140 const float height = mLayer->layer.getHeight();
176 Layer* LayerRenderer::createLayer(uint32_t width, uint32_t height, bool isOpaque) {
177 LAYER_RENDERER_LOGD("Requesting new render layer %dx%d", width, height);
186 Layer* layer = Caches::getInstance().layerCache.get(width, height);
187 if (!layer) {
188 LOGW("Could not obtain a layer");
192 layer->setFbo(fbo);
193 layer->layer.set(0.0f, 0.0f, width, height);
194 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
195 width / float(layer->getWidth()), 0.0f);
196 layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
197 layer->setBlend(!isOpaque);
198 layer->setColorFilter(NULL);
199 layer->region.clear();
204 glBindFramebuffer(GL_FRAMEBUFFER, layer->getFbo());
205 layer->bindTexture();
208 if (layer->isEmpty()) {
209 layer->setEmpty(false);
210 layer->allocateTexture(GL_RGBA, GL_UNSIGNED_BYTE);
218 layer->deleteTexture();
219 delete layer;
226 layer->getTexture(), 0);
235 return layer;
238 bool LayerRenderer::resizeLayer(Layer* layer, uint32_t width, uint32_t height) {
239 if (layer) {
240 LAYER_RENDERER_LOGD("Resizing layer fbo = %d to %dx%d", layer->getFbo(), width, height);
242 if (Caches::getInstance().layerCache.resize(layer, width, height)) {
243 layer->layer.set(0.0f, 0.0f, width, height);
244 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
245 width / float(layer->getWidth()), 0.0f);
247 layer->deleteTexture();
248 delete layer;
256 Layer* LayerRenderer::createTextureLayer(bool isOpaque) {
257 LAYER_RENDERER_LOGD("Creating new texture layer");
259 Layer* layer = new Layer(0, 0);
260 layer->setCacheable(false);
261 layer->setTextureLayer(true);
262 layer->setBlend(!isOpaque);
263 layer->setEmpty(true);
264 layer->setFbo(0);
265 layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
266 layer->layer.set(0.0f, 0.0f, 0.0f, 0.0f);
267 layer->texCoords.set(0.0f, 1.0f, 0.0f, 1.0f);
268 layer->region.clear();
269 layer->setRenderTarget(GL_NONE); // see ::updateTextureLayer()
272 layer->generateTexture();
274 return layer;
277 void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
279 if (layer) {
280 layer->setBlend(!isOpaque);
281 layer->setSize(width, height);
282 layer->layer.set(0.0f, 0.0f, width, height);
283 layer->region.set(width, height);
284 layer->regionRect.set(0.0f, 0.0f, width, height);
285 layer->getTexTransform().load(transform);
287 if (renderTarget != layer->getRenderTarget()) {
288 layer->setRenderTarget(renderTarget);
289 layer->bindTexture();
290 layer->setFilter(GL_NEAREST, GL_NEAREST, false, true);
291 layer->setWrap(GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, false, true);
296 void LayerRenderer::destroyLayer(Layer* layer) {
297 if (layer) {
298 LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d",
299 layer->getWidth(), layer->getHeight(), layer->getFbo());
301 if (layer->getFbo()) {
302 Caches::getInstance().fboCache.put(layer->getFbo());
305 if (!Caches::getInstance().layerCache.put(layer)) {
307 layer->deleteTexture();
308 delete layer;
314 layer->region.clear();
319 void LayerRenderer::destroyLayerDeferred(Layer* layer) {
320 if (layer) {
321 LAYER_RENDERER_LOGD("Deferring layer destruction, fbo = %d", layer->getFbo());
323 Caches::getInstance().deleteLayerDeferred(layer);
327 bool LayerRenderer::copyLayer(Layer* layer, SkBitmap* bitmap) {
329 if (layer && layer->isTextureLayer() && bitmap->width() <= caches.maxTextureSize &&
369 float alpha = layer->getAlpha();
370 SkXfermode::Mode mode = layer->getMode();
372 layer->setAlpha(255, SkXfermode::kSrc_Mode);
373 layer->setFbo(fbo);
399 LayerRenderer renderer(layer);
402 bitmap->width(), bitmap->height(), !layer->isBlend());
408 renderer.drawTextureLayer(layer, bounds);
422 LOGD("GL error while copying layer into bitmap = 0x%x", error);
427 layer->setAlpha(alpha, mode);
428 layer->setFbo(0);