summaryrefslogtreecommitdiff
path: root/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java')
-rw-r--r--java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java b/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java
new file mode 100644
index 00000000..291a5880
--- /dev/null
+++ b/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrPipline1.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2015 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.example.android.rs.vr.engine;
+
+import android.renderscript.Matrix3f;
+import android.renderscript.Matrix4f;
+import android.renderscript.Script;
+import android.renderscript.ScriptIntrinsicResize;
+import android.util.Log;
+
+import java.text.DecimalFormat;
+
+public class VrPipline1 extends BasicPipeline {
+ private static final String LOGTAG = "VrPipline1";
+
+ float[] mMatrixBuffer = new float[16];
+ ScriptC_vr scriptC_vr;
+ ScriptIntrinsicResize script_resize;
+ Script.LaunchOptions options = new Script.LaunchOptions();
+
+ @Override
+ public void initBuffers(VrState state) {
+ super.initBuffers(state);
+ }
+
+ static DecimalFormat df = new DecimalFormat(" ##0.000");
+
+ private static String trim(double d) {
+ String s = df.format(d);
+ return s.substring(s.length() - 6);
+ }
+
+ private static String trim(float[] d) {
+ String ret = "";
+ for (int i = 0; i < d.length; i++) {
+ ret += ((i == 0) ? "[ " : " , ") + trim(d[i]);
+ }
+ return ret + ("]");
+ }
+
+ private void creatOpacityAllocation(VrState state) {
+ scriptC_vr.set_opacity(state.mMaterial.getOpacityAllocation(state.mRs));
+ }
+
+ private void creatColorMapAllocation(VrState state) {
+ scriptC_vr.set_color_map(state.mMaterial.getColorMapAllocation(state.mRs));
+ }
+
+ @Override
+ public void setupTriangles(VrState state) {
+ super.setupTriangles(state);
+ if (mCancel){
+ return;
+ }
+ Matrix m = state.mTransform.getMatrix(Transform.SCREEN_SPACE, Transform.VOLUME_SPACE);
+ m.getAsFloats(mMatrixBuffer);
+ Matrix4f matrix4f = new Matrix4f(mMatrixBuffer);
+ if (scriptC_vr == null) {
+ scriptC_vr = new ScriptC_vr(state.mRs);
+ }
+ if (script_resize == null) {
+ script_resize = ScriptIntrinsicResize.create(state.mRs);
+ }
+ scriptC_vr.set_matrix4(matrix4f);
+ for (int i = 0; i < 9; i++) {
+ int x = i % 3;
+ int y = i / 3;
+ mMatrixBuffer[i] = mMatrixBuffer[x + y * 4];
+ }
+ Matrix3f matrix3f = new Matrix3f(mMatrixBuffer);
+ scriptC_vr.set_matrix3(matrix3f);
+ creatColorMapAllocation(state);
+ creatOpacityAllocation(state);
+ scriptC_vr.invoke_setup_vectors();
+ }
+
+ @Override
+ public void raycast(VrState state) {
+ if (mCancel){
+ return;
+ }
+ scriptC_vr.set_volume(state.mVolume.mVolumeAllocation);
+ scriptC_vr.set_bricks(state.mRsMask.mBrick_allocation);
+ scriptC_vr.set_brick_dimx(state.mRsMask.m_bricks_dimx);
+ scriptC_vr.set_brick_dimy(state.mRsMask.m_bricks_dimy);
+ if (mCancel){
+ return;
+ }
+ scriptC_vr.set_zbuff(state.mzRangeFullAllocation);
+ if (mCancel){
+ return;
+ }
+ if (state.mImgWidth*state.mImgHeight < 512*512) {
+ scriptC_vr.forEach_draw_z_buffer(state.mzRangeFullAllocation, state.mScrAllocation);
+ } else {
+ int blocks = state.mImgWidth*state.mImgHeight/(256*256);
+ for (int i = 0; i < blocks; i++) {
+ options.setX(0,state.mImgWidth);
+ options.setY(i*state.mImgHeight/blocks, (i+1)*state.mImgHeight/blocks);
+ scriptC_vr.forEach_draw_z_buffer(state.mzRangeFullAllocation, state.mScrAllocation, options);
+ state.mRs.finish();
+ if (mCancel){
+ Log.v(LOGTAG, "cancel");
+ return;
+ }
+ }
+
+
+ }
+
+ }
+
+}