GLES20TextureLayer.java revision 5c5050d9026f7e0ba52bec094f681e048cdd5d9a
1aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy/* 2aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Copyright (C) 2011 The Android Open Source Project 3aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 4aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * you may not use this file except in compliance with the License. 6aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * You may obtain a copy of the License at 7aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 8aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * 10aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * Unless required by applicable law or agreed to in writing, software 11aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * See the License for the specific language governing permissions and 14aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * limitations under the License. 15aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy */ 16aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 17aa6c24c21c727a196451332448d4e3b11a80be69Romain Guypackage android.view; 18aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 19aa6c24c21c727a196451332448d4e3b11a80be69Romain Guyimport android.graphics.Canvas; 20aa6c24c21c727a196451332448d4e3b11a80be69Romain Guyimport android.graphics.SurfaceTexture; 21aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 22aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy/** 23aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This 24aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * implementation can be used as a texture. Rendering into this 25aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy * layer is not controlled by a {@link HardwareCanvas}. 26aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy */ 27aa6c24c21c727a196451332448d4e3b11a80be69Romain Guyclass GLES20TextureLayer extends GLES20Layer { 28aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy private int mTexture; 29aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy private SurfaceTexture mSurface; 30aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 31a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy GLES20TextureLayer(boolean isOpaque) { 32aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy int[] layerInfo = new int[2]; 33a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy mLayer = GLES20Canvas.nCreateTextureLayer(isOpaque, layerInfo); 34aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 35aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy if (mLayer != 0) { 36aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mTexture = layerInfo[0]; 37aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mFinalizer = new Finalizer(mLayer); 38aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } else { 39aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy mFinalizer = null; 40aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 41aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 42aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 43aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 44aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy boolean isValid() { 45aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return mLayer != 0 && mTexture != 0; 46aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 47aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 48aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 49aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy void resize(int width, int height) { 50aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 51aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 52aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 53aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy HardwareCanvas getCanvas() { 54aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return null; 55aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 56aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 57aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 58aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy HardwareCanvas start(Canvas currentCanvas) { 59aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return null; 60aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 61aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 62aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy @Override 63aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy void end(Canvas currentCanvas) { 64aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 65aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 66aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy SurfaceTexture getSurfaceTexture() { 67aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy if (mSurface == null) { 685c5050d9026f7e0ba52bec094f681e048cdd5d9aGrace Kloba mSurface = new SurfaceTexture(mTexture, false); 69aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 70aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy return mSurface; 71aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 72aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy 73a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy void update(int width, int height, boolean isOpaque) { 74a9489274d67b540804aafb587a226f7c2ae4464dRomain Guy GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface); 75aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy } 76aa6c24c21c727a196451332448d4e3b11a80be69Romain Guy} 77