1423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen/*
2423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Copyright (C) 2009 The Android Open Source Project
3423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen *
4423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Licensed under the Apache License, Version 2.0 (the "License");
5423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * you may not use this file except in compliance with the License.
6423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * You may obtain a copy of the License at
7423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen *
8423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen *      http://www.apache.org/licenses/LICENSE-2.0
9423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen *
10423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * Unless required by applicable law or agreed to in writing, software
11423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * distributed under the License is distributed on an "AS IS" BASIS,
12423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * See the License for the specific language governing permissions and
14423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen * limitations under the License.
15423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen */
16423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
17423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
18423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenpackage com.android.magicsmoke;
19423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
20423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.content.res.Resources;
2131be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchoukimport android.os.Bundle;
221cac273ca3dc02971458785fe4d6d27cfa3f613eJason Samsimport android.renderscript.RenderScriptGL;
23423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenimport android.renderscript.ScriptC;
2431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk//import android.view.MotionEvent;
25423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
26423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissenpublic abstract class RenderScriptScene {
27423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected int mWidth;
28423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected int mHeight;
29423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected boolean mPreview;
30ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen    protected boolean mIsStarted;
31423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected Resources mResources;
321cac273ca3dc02971458785fe4d6d27cfa3f613eJason Sams    protected RenderScriptGL mRS;
33423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected ScriptC mScript;
34423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
35423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public RenderScriptScene(int width, int height) {
36423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mWidth = width;
37423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mHeight = height;
38423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
39423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
401cac273ca3dc02971458785fe4d6d27cfa3f613eJason Sams    public void init(RenderScriptGL rs, Resources res, boolean isPreview) {
41423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mRS = rs;
42423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mResources = res;
43423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mPreview = isPreview;
44423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mScript = createScript();
45423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
46423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
47423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public boolean isPreview() {
48423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mPreview;
49423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
50423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
51423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public int getWidth() {
52423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mWidth;
53423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
54423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
55423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public int getHeight() {
56423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mHeight;
57423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
58423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
59423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public Resources getResources() {
60423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mResources;
61423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
62423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
631cac273ca3dc02971458785fe4d6d27cfa3f613eJason Sams    public RenderScriptGL getRS() {
64423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mRS;
65423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
66423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
67423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public ScriptC getScript() {
68423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        return mScript;
69423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
70423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
71423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    protected abstract ScriptC createScript();
72423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
73ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen    public void stop(boolean forReal) {
7469f9d2200feba0b961cb89f1710ecd647befced3Jason Sams        mRS.bindRootScript(null);
75ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen        mIsStarted = false;
76423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
77423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
78423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public void start() {
7969f9d2200feba0b961cb89f1710ecd647befced3Jason Sams        mRS.bindRootScript(mScript);
80ce631a529b74ae79acc0d37da34a5ce8722fbc8cMarco Nelissen        mIsStarted = true;
81423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
82423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
83423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    public void resize(int width, int height) {
84423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mWidth = width;
85423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen        mHeight = height;
86423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
87423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
88423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    @SuppressWarnings({"UnusedDeclaration"})
898d57c78704797dff5df2df2b10a08dec885fe489Marco Nelissen    public void setOffset(float xOffset, float yOffset, float xStep, float yStep, int xPixels, int yPixels) {
90423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen    }
91423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen
9231be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk    @SuppressWarnings({"UnusedDeclaration"})
9331be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk    public Bundle onCommand(String action, int x, int y, int z, Bundle extras,
9431be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk            boolean resultRequested) {
9531be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk        return null;
9631be678ff706bdf7e7c9f34c9ffcd8d2794643e2Alex Sakhartchouk    }
97423d39f6a9fd7b6399b92a272eadc49676375f48Marco Nelissen}
98