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