MosaicRendererSurfaceViewRenderer.java revision 2faf16a90a6a6d18e40faf45ced217b913b214b6
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";
2836839102e03107e3fb121197036365a58ec2686eAngus Kong
2936839102e03107e3fb121197036365a58ec2686eAngus Kong    private MosaicSurfaceCreateListener mSurfaceCreateListener;
3036839102e03107e3fb121197036365a58ec2686eAngus Kong
3136839102e03107e3fb121197036365a58ec2686eAngus Kong    /** A callback to be called when the surface is created */
3236839102e03107e3fb121197036365a58ec2686eAngus Kong    public interface MosaicSurfaceCreateListener {
332faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong        public void onMosaicSurfaceCreated(final int surface);
3436839102e03107e3fb121197036365a58ec2686eAngus Kong    }
3536839102e03107e3fb121197036365a58ec2686eAngus Kong
36eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    @Override
3741a2e9735136f372de95652d0828600282c8e967mbansal    public void onDrawFrame(GL10 gl) {
38eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal        MosaicRenderer.step();
39eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    }
40eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
41eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    @Override
4241a2e9735136f372de95652d0828600282c8e967mbansal    public void onSurfaceChanged(GL10 gl, int width, int height) {
43eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal        MosaicRenderer.reset(width, height);
4441a2e9735136f372de95652d0828600282c8e967mbansal        Log.i(TAG, "Renderer: onSurfaceChanged");
45eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    }
46eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
47eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    @Override
4841a2e9735136f372de95652d0828600282c8e967mbansal    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
492faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong        Log.i(TAG, "onSurfaceCreated");
5036839102e03107e3fb121197036365a58ec2686eAngus Kong        if (mSurfaceCreateListener != null) {
512faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong            mSurfaceCreateListener.onMosaicSurfaceCreated(MosaicRenderer.init());
5236839102e03107e3fb121197036365a58ec2686eAngus Kong        }
5336839102e03107e3fb121197036365a58ec2686eAngus Kong    }
5441a2e9735136f372de95652d0828600282c8e967mbansal
5536839102e03107e3fb121197036365a58ec2686eAngus Kong    public void setMosaicSurfaceCreateListener(MosaicSurfaceCreateListener listener) {
5636839102e03107e3fb121197036365a58ec2686eAngus Kong        mSurfaceCreateListener = listener;
57eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    }
58eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
5941a2e9735136f372de95652d0828600282c8e967mbansal    public void setReady() {
60eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal        MosaicRenderer.ready();
61eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal    }
62eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal
632faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong    public void preprocess(float[] transformMatrix) {
642faf16a90a6a6d18e40faf45ced217b913b214b6Angus Kong        MosaicRenderer.preprocess(transformMatrix);
6541a2e9735136f372de95652d0828600282c8e967mbansal    }
6641a2e9735136f372de95652d0828600282c8e967mbansal
6741a2e9735136f372de95652d0828600282c8e967mbansal    public void transferGPUtoCPU() {
6841a2e9735136f372de95652d0828600282c8e967mbansal        MosaicRenderer.transferGPUtoCPU();
6941a2e9735136f372de95652d0828600282c8e967mbansal    }
7041a2e9735136f372de95652d0828600282c8e967mbansal
7141a2e9735136f372de95652d0828600282c8e967mbansal    public void setWarping(boolean flag) {
7241a2e9735136f372de95652d0828600282c8e967mbansal        MosaicRenderer.setWarping(flag);
7341a2e9735136f372de95652d0828600282c8e967mbansal    }
74eeb94d4de94bfd4e01f3a716803f77a530f5b92cmbansal}
75