diff options
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.java | 127 |
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; + } + } + + + } + + } + +} |