/* * Copyright (C) 2019 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.test.hwui; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorSpace; import android.graphics.HardwareRenderer; import android.graphics.Outline; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RenderNode; import android.hardware.HardwareBuffer; import android.media.Image; import android.media.ImageReader; import android.os.Bundle; import android.widget.ImageView; public class MyLittleTextureView extends Activity { private RenderNode mContent = new RenderNode("CustomRenderer"); private HardwareRenderer mRenderer = new HardwareRenderer(); private ImageView mImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mImageView = new ImageView(this); mImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); setContentView(mImageView); ImageReader reader = ImageReader.newInstance(100, 100, PixelFormat.RGBA_8888, 3, HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE | HardwareBuffer.USAGE_GPU_COLOR_OUTPUT); mRenderer.setSurface(reader.getSurface()); mRenderer.setLightSourceAlpha(0.0f, 1.0f); mRenderer.setLightSourceGeometry(100 / 2f, 0f, 800.0f, 20.0f); mContent.setLeftTopRightBottom(0, 0, 100, 100); Rect childRect = new Rect(25, 25, 65, 65); RenderNode childNode = new RenderNode("shadowCaster"); childNode.setLeftTopRightBottom(childRect.left, childRect.top, childRect.right, childRect.bottom); Outline outline = new Outline(); outline.setRect(new Rect(0, 0, childRect.width(), childRect.height())); outline.setAlpha(1f); childNode.setOutline(outline); { Canvas canvas = childNode.beginRecording(); canvas.drawColor(Color.BLUE); } childNode.endRecording(); childNode.setElevation(20f); { Canvas canvas = mContent.beginRecording(); canvas.drawColor(Color.WHITE); canvas.enableZ(); canvas.drawRenderNode(childNode); canvas.disableZ(); } mContent.endRecording(); mRenderer.setContentRoot(mContent); mRenderer.createRenderRequest() .setWaitForPresent(true) .syncAndDraw(); Image image = reader.acquireNextImage(); Bitmap bitmap = Bitmap.wrapHardwareBuffer(image.getHardwareBuffer(), ColorSpace.get(ColorSpace.Named.SRGB)); mImageView.setImageBitmap(bitmap); image.close(); } }