Home | History | Annotate | Download | only in hwui

Lines Matching refs:Layer

38 LayerRenderer::LayerRenderer(RenderState& renderState, Layer* layer)
40 , mLayer(layer) {
48 LAYER_RENDERER_LOGD("Rendering into layer, fbo = %d", mLayer->getFbo());
52 const float width = mLayer->layer.getWidth();
53 const float height = mLayer->layer.getHeight();
87 LAYER_RENDERER_LOGD("Finished rendering into layer, fbo = %d", mLayer->getFbo());
103 // Layer support
163 const float height = mLayer->layer.getHeight();
186 Layer* LayerRenderer::createRenderLayer(RenderState& renderState, uint32_t width, uint32_t height) {
187 ATRACE_FORMAT("Allocate %ux%u HW Layer", width, height);
188 LAYER_RENDERER_LOGD("Requesting new render layer %dx%d", width, height);
198 Layer* layer = caches.layerCache.get(renderState, width, height);
199 if (!layer) {
200 ALOGW("Could not obtain a layer");
204 // We first obtain a layer before comparing against the max texture size
208 if (layer->getWidth() > maxTextureSize || layer->getHeight() > maxTextureSize) {
209 ALOGW("Layer exceeds max. dimensions supported by the GPU (%dx%d, max=%dx%d)",
212 // Creating a new layer always increment its refcount by 1, this allows
213 // us to destroy the layer object if one was created for us
214 layer->decStrong(nullptr);
219 layer->setFbo(fbo);
220 layer->layer.set(0.0f, 0.0f, width, height);
221 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
222 width / float(layer->getWidth()), 0.0f);
223 layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
224 layer->setColorFilter(nullptr);
225 layer->setDirty(true);
226 layer->region.clear();
230 renderState.bindFramebuffer(layer->getFbo());
231 layer->bindTexture();
234 if (layer->isEmpty()) {
235 layer->setEmpty(false);
236 layer->allocateTexture();
240 LOG_ALWAYS_FATAL("Could not allocate texture for layer (fbo=%d %dx%d)",
243 layer->decStrong(nullptr);
249 layer->getTextureId(), 0);
253 return layer;
256 bool LayerRenderer::resizeLayer(Layer* layer, uint32_t width, uint32_t height) {
257 if (layer) {
258 LAYER_RENDERER_LOGD("Resizing layer fbo = %d to %dx%d", layer->getFbo(), width, height);
260 if (layer->resize(width, height)) {
261 layer->layer.set(0.0f, 0.0f, width, height);
262 layer->texCoords.set(0.0f, height / float(layer->getHeight()),
263 width / float(layer->getWidth()), 0.0f);
272 Layer* LayerRenderer::createTextureLayer(RenderState& renderState) {
273 LAYER_RENDERER_LOGD("Creating new texture layer");
275 Layer* layer = new Layer(Layer::kType_Texture, renderState, 0, 0);
276 layer->setCacheable(false);
277 layer->layer.set(0.0f, 0.0f, 0.0f, 0.0f);
278 layer->texCoords.set(0.0f, 1.0f, 1.0f, 0.0f);
279 layer->region.clear();
280 layer->setRenderTarget(GL_NONE); // see ::updateTextureLayer()
283 layer->generateTexture();
285 return layer;
288 void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
290 if (layer) {
291 layer->setBlend(!isOpaque);
292 layer->setForceFilter(forceFilter);
293 layer->setSize(width, height);
294 layer->layer.set(0.0f, 0.0f, width, height);
295 layer->region.set(width, height);
296 layer->regionRect.set(0.0f, 0.0f, width, height);
297 layer->getTexTransform().load(textureTransform);
299 if (renderTarget != layer->getRenderTarget()) {
300 layer->setRenderTarget(renderTarget);
301 layer->bindTexture();
302 layer->setFilter(GL_NEAREST, false, true);
303 layer->setWrap(GL_CLAMP_TO_EDGE, false, true);
308 void LayerRenderer::destroyLayer(Layer* layer) {
309 if (layer) {
310 ATRACE_FORMAT("Destroy %ux%u HW Layer", layer->getWidth(), layer->getHeight());
311 LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d",
312 layer->getWidth(), layer->getHeight(), layer->getFbo());
314 if (!Caches::getInstance().layerCache.put(layer)) {
316 layer->decStrong(nullptr);
322 layer->removeFbo();
323 layer->region.clear();
328 void LayerRenderer::flushLayer(RenderState& renderState, Layer* layer) {
330 if (!layer) return;
332 GLuint fbo = layer->getFbo();
353 bool LayerRenderer::copyLayer(RenderState& renderState, Layer* layer, SkBitmap* bitmap) {
355 if (layer
398 float alpha = layer->getAlpha();
399 SkXfermode::Mode mode = layer->getMode();
400 GLuint previousLayerFbo = layer->getFbo();
402 layer->setAlpha(255, SkXfermode::kSrc_Mode);
403 layer->setFbo(fbo);
432 LayerRenderer renderer(renderState, layer);
435 bitmap->width(), bitmap->height(), !layer->isBlend());
446 renderer.drawTextureLayer(layer, bounds);
460 ALOGD("GL error while copying layer into bitmap = 0x%x", error);
465 layer->setAlpha(alpha, mode);
466 layer->setFbo(previousLayerFbo);