blob: 5bd8f0bccf1612f0325d645f836a3f31c2d22510 [file] [log] [blame]
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.testapp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import com.android.scenegraph.SceneManager;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.renderscript.*;
import android.renderscript.Allocation.MipmapControl;
import android.renderscript.Element.Builder;
import android.renderscript.Font.Style;
import android.renderscript.Program.TextureType;
import android.renderscript.ProgramStore.DepthFunc;
import android.util.Log;
// This is where the scenegraph and the rendered objects are initialized and used
public class TestAppLoadingScreen {
private static String TAG = "TestAppLoadingScreen";
private Resources mRes;
private RenderScriptGL mRS;
private ScriptC_test_app mScript;
public TestAppLoadingScreen(RenderScriptGL rs, Resources res) {
mRS = rs;
mRes = res;
// Shows the loading screen with some text
renderLoading();
// Adds a little 3D bugdroid model to the laoding screen asynchronously.
new LoadingScreenLoaderTask().execute();
}
public void showLoadingScreen(boolean show) {
if (show) {
mRS.bindRootScript(mScript);
} else {
mRS.bindRootScript(SceneManager.getInstance().getRenderLoop());
}
}
// The loading screen has some elements that shouldn't be loaded on the UI thread
private class LoadingScreenLoaderTask extends AsyncTask<String, Void, Boolean> {
Allocation robotTex;
Mesh robotMesh;
protected Boolean doInBackground(String... names) {
long start = System.currentTimeMillis();
robotTex = Allocation.createFromBitmapResource(mRS, mRes, R.drawable.robot,
MipmapControl.MIPMAP_ON_SYNC_TO_TEXTURE,
Allocation.USAGE_GRAPHICS_TEXTURE);
FileA3D model = FileA3D.createFromResource(mRS, mRes, R.raw.robot);
FileA3D.IndexEntry entry = model.getIndexEntry(0);
if (entry != null && entry.getEntryType() == FileA3D.EntryType.MESH) {
robotMesh = entry.getMesh();
}
mScript.set_gPFSBackground(ProgramStore.BLEND_NONE_DEPTH_TEST(mRS));
ProgramFragmentFixedFunction.Builder b = new ProgramFragmentFixedFunction.Builder(mRS);
b.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
ProgramFragment pfDefault = b.create();
pfDefault.bindSampler(Sampler.CLAMP_LINEAR(mRS), 0);
mScript.set_gPFBackground(pfDefault);
ProgramVertexFixedFunction.Builder pvb = new ProgramVertexFixedFunction.Builder(mRS);
ProgramVertexFixedFunction pvDefault = pvb.create();
ProgramVertexFixedFunction.Constants va = new ProgramVertexFixedFunction.Constants(mRS);
((ProgramVertexFixedFunction)pvDefault).bindConstants(va);
mScript.set_gPVBackground(pvDefault);
long end = System.currentTimeMillis();
Log.v("TIMER", "Loading load time: " + (end - start));
return new Boolean(true);
}
protected void onPostExecute(Boolean result) {
mScript.set_gRobotTex(robotTex);
mScript.set_gRobotMesh(robotMesh);
}
}
// Creates a simple script to show a loding screen until everything is initialized
// Could also be used to do some custom renderscript work before handing things over
// to the scenegraph
void renderLoading() {
mScript = new ScriptC_test_app(mRS, mRes, R.raw.test_app);
mRS.bindRootScript(mScript);
}
}