Lines Matching refs:layer

39 LayerRenderer::LayerRenderer(RenderState& renderState, Layer* layer)
41 , mLayer(layer) {
49 LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->getFbo());
53 const float width = mLayer->layer.getWidth();
54 const float height = mLayer->layer.getHeight();
90 LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->getFbo());
165 const float height = mLayer->layer.getHeight();
190 LAYER_RENDERER_LOGD("Requesting new render layer %dx%d", width, height);
200 Layer* layer = caches.layerCache.get(renderState, width, height);
201 if (!layer) {
202 ALOGW("Could not obtain a layer");
206 // We first obtain a layer before comparing against the max texture size
210 if (layer->getWidth() > maxTextureSize || layer->getHeight() > maxTextureSize) {
214 // Creating a new layer always increment its refcount by 1, this allows
215 // us to destroy the layer object if one was created for us
216 layer->decStrong(0);
221 layer->setFbo(fbo);
222 layer->layer.set(0.0f, 0.0f, width, height);
223 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
224 width / float(layer->getWidth()), 0.0f);
225 layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
226 layer->setColorFilter(NULL);
227 layer->setDirty(true);
228 layer->region.clear();
232 renderState.bindFramebuffer(layer->getFbo());
233 layer->bindTexture();
236 if (layer->isEmpty()) {
237 layer->setEmpty(false);
238 layer->allocateTexture();
242 ALOGE("Could not allocate texture for layer (fbo=%d %dx%d)", fbo, width, height);
244 layer->decStrong(0);
250 layer->getTexture(), 0);
254 return layer;
257 bool LayerRenderer::resizeLayer(Layer* layer, uint32_t width, uint32_t height) {
258 if (layer) {
259 LAYER_RENDERER_LOGD("Resizing layer fbo = %d to %dx%d", layer->getFbo(), width, height);
261 if (layer->resize(width, height)) {
262 layer->layer.set(0.0f, 0.0f, width, height);
263 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
264 width / float(layer->getWidth()), 0.0f);
274 LAYER_RENDERER_LOGD("Creating new texture layer");
276 Layer* layer = new Layer(Layer::kType_Texture, renderState, 0, 0);
277 layer->setCacheable(false);
278 layer->setEmpty(true);
279 layer->setFbo(0);
280 layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
281 layer->layer.set(0.0f, 0.0f, 0.0f, 0.0f);
282 layer->texCoords.set(0.0f, 1.0f, 1.0f, 0.0f);
283 layer->region.clear();
284 layer->setRenderTarget(GL_NONE); // see ::updateTextureLayer()
287 layer->generateTexture();
289 return layer;
292 void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
294 if (layer) {
295 layer->setBlend(!isOpaque);
296 layer->setForceFilter(forceFilter);
297 layer->setSize(width, height);
298 layer->layer.set(0.0f, 0.0f, width, height);
299 layer->region.set(width, height);
300 layer->regionRect.set(0.0f, 0.0f, width, height);
301 layer->getTexTransform().load(textureTransform);
303 if (renderTarget != layer->getRenderTarget()) {
304 layer->setRenderTarget(renderTarget);
305 layer->bindTexture();
306 layer->setFilter(GL_NEAREST, false, true);
307 layer->setWrap(GL_CLAMP_TO_EDGE, false, true);
312 void LayerRenderer::destroyLayer(Layer* layer) {
313 if (layer) {
314 ATRACE_FORMAT("Destroy %ux%u HW Layer", layer->getWidth(), layer->getHeight());
315 LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d",
316 layer->getWidth(), layer->getHeight(), layer->getFbo());
318 if (!Caches::getInstance().layerCache.put(layer)) {
320 layer->decStrong(0);
326 layer->removeFbo();
327 layer->region.clear();
332 void LayerRenderer::flushLayer(RenderState& renderState, Layer* layer) {
334 if (!layer) return;
336 GLuint fbo = layer->getFbo();
357 bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap) {
359 if (layer && bitmap->width() <= caches.maxTextureSize &&
401 float alpha = layer->getAlpha();
402 SkXfermode::Mode mode = layer->getMode();
403 GLuint previousLayerFbo = layer->getFbo();
405 layer->setAlpha(255, SkXfermode::kSrc_Mode);
406 layer->setFbo(fbo);
435 LayerRenderer renderer(renderState, layer);
438 bitmap->width(), bitmap->height(), !layer->isBlend());
444 mat4 texTransform(layer->getTexTransform());
449 layer->getTexTransform().multiply(invert);
456 renderer.drawTextureLayer(layer, bounds);
464 layer->getTexTransform().load(texTransform);
471 ALOGD("GL error while copying layer into bitmap = 0x%x", error);
476 layer->setAlpha(alpha, mode);
477 layer->setFbo(previousLayerFbo);