1eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal/* 2eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * Copyright (C) 2011 The Android Open Source Project 3eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * 4eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * Licensed under the Apache License, Version 2.0 (the "License"); 5eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * you may not use this file except in compliance with the License. 6eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * You may obtain a copy of the License at 7eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * 8eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * http://www.apache.org/licenses/LICENSE-2.0 9eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * 10eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * Unless required by applicable law or agreed to in writing, software 11eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * distributed under the License is distributed on an "AS IS" BASIS, 12eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * See the License for the specific language governing permissions and 14eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal * limitations under the License. 15eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal */ 16eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 17eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansalpackage com.android.camera.panorama; 18eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 19eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansalimport android.opengl.GLSurfaceView; 2041a2e9735136f372de95652d0828600282c8e967mbansalimport android.util.Log; 21eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 2236839102e03107e3fb121197036365a58ec2686eAngus Kongimport javax.microedition.khronos.egl.EGLConfig; 2336839102e03107e3fb121197036365a58ec2686eAngus Kongimport javax.microedition.khronos.opengles.GL10; 2436839102e03107e3fb121197036365a58ec2686eAngus Kong 25eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansalpublic class MosaicRendererSurfaceViewRenderer implements GLSurfaceView.Renderer 26eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal{ 2736839102e03107e3fb121197036365a58ec2686eAngus Kong private static final String TAG = "MosaicRendererSurfaceViewRenderer"; 28d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen private boolean mIsLandscapeOrientation; 2936839102e03107e3fb121197036365a58ec2686eAngus Kong 3036839102e03107e3fb121197036365a58ec2686eAngus Kong private MosaicSurfaceCreateListener mSurfaceCreateListener; 3136839102e03107e3fb121197036365a58ec2686eAngus Kong 32d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen public MosaicRendererSurfaceViewRenderer(boolean isLandscapeOrientation) { 33d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen mIsLandscapeOrientation = isLandscapeOrientation; 34d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen } 35d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen 3636839102e03107e3fb121197036365a58ec2686eAngus Kong /** A callback to be called when the surface is created */ 3736839102e03107e3fb121197036365a58ec2686eAngus Kong public interface MosaicSurfaceCreateListener { 382faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong public void onMosaicSurfaceCreated(final int surface); 39575b49275691f5b539fe2c6dfde1741645dc3e93Raji Reddy Kandi public void onMosaicSurfaceChanged(); 4036839102e03107e3fb121197036365a58ec2686eAngus Kong } 4136839102e03107e3fb121197036365a58ec2686eAngus Kong 42eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal @Override 4341a2e9735136f372de95652d0828600282c8e967mbansal public void onDrawFrame(GL10 gl) { 44eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal MosaicRenderer.step(); 45eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal } 46eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 47eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal @Override 4841a2e9735136f372de95652d0828600282c8e967mbansal public void onSurfaceChanged(GL10 gl, int width, int height) { 49d32aa042a7d7fdb52cd8cec571e7c648f837eaffWei-Ta Chen MosaicRenderer.reset(width, height, mIsLandscapeOrientation); 5041a2e9735136f372de95652d0828600282c8e967mbansal Log.i(TAG, "Renderer: onSurfaceChanged"); 51575b49275691f5b539fe2c6dfde1741645dc3e93Raji Reddy Kandi if (mSurfaceCreateListener != null) { 52575b49275691f5b539fe2c6dfde1741645dc3e93Raji Reddy Kandi mSurfaceCreateListener.onMosaicSurfaceChanged(); 53575b49275691f5b539fe2c6dfde1741645dc3e93Raji Reddy Kandi } 54eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal } 55eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 56eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal @Override 5741a2e9735136f372de95652d0828600282c8e967mbansal public void onSurfaceCreated(GL10 gl, EGLConfig config) { 582faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong Log.i(TAG, "onSurfaceCreated"); 5936839102e03107e3fb121197036365a58ec2686eAngus Kong if (mSurfaceCreateListener != null) { 602faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong mSurfaceCreateListener.onMosaicSurfaceCreated(MosaicRenderer.init()); 6136839102e03107e3fb121197036365a58ec2686eAngus Kong } 6236839102e03107e3fb121197036365a58ec2686eAngus Kong } 6341a2e9735136f372de95652d0828600282c8e967mbansal 6436839102e03107e3fb121197036365a58ec2686eAngus Kong public void setMosaicSurfaceCreateListener(MosaicSurfaceCreateListener listener) { 6536839102e03107e3fb121197036365a58ec2686eAngus Kong mSurfaceCreateListener = listener; 66eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal } 67eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 6841a2e9735136f372de95652d0828600282c8e967mbansal public void setReady() { 69eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal MosaicRenderer.ready(); 70eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal } 71eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal 722faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong public void preprocess(float[] transformMatrix) { 732faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong MosaicRenderer.preprocess(transformMatrix); 7441a2e9735136f372de95652d0828600282c8e967mbansal } 7541a2e9735136f372de95652d0828600282c8e967mbansal 7641a2e9735136f372de95652d0828600282c8e967mbansal public void transferGPUtoCPU() { 7741a2e9735136f372de95652d0828600282c8e967mbansal MosaicRenderer.transferGPUtoCPU(); 7841a2e9735136f372de95652d0828600282c8e967mbansal } 7941a2e9735136f372de95652d0828600282c8e967mbansal 8041a2e9735136f372de95652d0828600282c8e967mbansal public void setWarping(boolean flag) { 8141a2e9735136f372de95652d0828600282c8e967mbansal MosaicRenderer.setWarping(flag); 8241a2e9735136f372de95652d0828600282c8e967mbansal } 83eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal} 84