15b539461dcc159bd89297443780d635ccc5e3564John Hoford/* 25b539461dcc159bd89297443780d635ccc5e3564John Hoford * Copyright (C) 2015 The Android Open Source Project 35b539461dcc159bd89297443780d635ccc5e3564John Hoford * 45b539461dcc159bd89297443780d635ccc5e3564John Hoford * Licensed under the Apache License, Version 2.0 (the "License"); 55b539461dcc159bd89297443780d635ccc5e3564John Hoford * you may not use this file except in compliance with the License. 65b539461dcc159bd89297443780d635ccc5e3564John Hoford * You may obtain a copy of the License at 75b539461dcc159bd89297443780d635ccc5e3564John Hoford * 85b539461dcc159bd89297443780d635ccc5e3564John Hoford * http://www.apache.org/licenses/LICENSE-2.0 95b539461dcc159bd89297443780d635ccc5e3564John Hoford * 105b539461dcc159bd89297443780d635ccc5e3564John Hoford * Unless required by applicable law or agreed to in writing, software 115b539461dcc159bd89297443780d635ccc5e3564John Hoford * distributed under the License is distributed on an "AS IS" BASIS, 125b539461dcc159bd89297443780d635ccc5e3564John Hoford * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135b539461dcc159bd89297443780d635ccc5e3564John Hoford * See the License for the specific language governing permissions and 145b539461dcc159bd89297443780d635ccc5e3564John Hoford * limitations under the License. 155b539461dcc159bd89297443780d635ccc5e3564John Hoford */ 165b539461dcc159bd89297443780d635ccc5e3564John Hoford 175b539461dcc159bd89297443780d635ccc5e3564John Hofordpackage com.example.android.rs.vr.engine; 185b539461dcc159bd89297443780d635ccc5e3564John Hoford 195b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.Matrix3f; 205b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.Matrix4f; 215b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.Script; 225b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.renderscript.ScriptIntrinsicResize; 235b539461dcc159bd89297443780d635ccc5e3564John Hofordimport android.util.Log; 245b539461dcc159bd89297443780d635ccc5e3564John Hoford 255b539461dcc159bd89297443780d635ccc5e3564John Hofordimport java.text.DecimalFormat; 265b539461dcc159bd89297443780d635ccc5e3564John Hoford 275b539461dcc159bd89297443780d635ccc5e3564John Hofordpublic class VrPipline1 extends BasicPipeline { 285b539461dcc159bd89297443780d635ccc5e3564John Hoford private static final String LOGTAG = "VrPipline1"; 295b539461dcc159bd89297443780d635ccc5e3564John Hoford 305b539461dcc159bd89297443780d635ccc5e3564John Hoford float[] mMatrixBuffer = new float[16]; 315b539461dcc159bd89297443780d635ccc5e3564John Hoford ScriptC_vr scriptC_vr; 325b539461dcc159bd89297443780d635ccc5e3564John Hoford ScriptIntrinsicResize script_resize; 335b539461dcc159bd89297443780d635ccc5e3564John Hoford Script.LaunchOptions options = new Script.LaunchOptions(); 345b539461dcc159bd89297443780d635ccc5e3564John Hoford 355b539461dcc159bd89297443780d635ccc5e3564John Hoford @Override 365b539461dcc159bd89297443780d635ccc5e3564John Hoford public void initBuffers(VrState state) { 375b539461dcc159bd89297443780d635ccc5e3564John Hoford super.initBuffers(state); 385b539461dcc159bd89297443780d635ccc5e3564John Hoford } 395b539461dcc159bd89297443780d635ccc5e3564John Hoford 405b539461dcc159bd89297443780d635ccc5e3564John Hoford static DecimalFormat df = new DecimalFormat(" ##0.000"); 415b539461dcc159bd89297443780d635ccc5e3564John Hoford 425b539461dcc159bd89297443780d635ccc5e3564John Hoford private static String trim(double d) { 435b539461dcc159bd89297443780d635ccc5e3564John Hoford String s = df.format(d); 445b539461dcc159bd89297443780d635ccc5e3564John Hoford return s.substring(s.length() - 6); 455b539461dcc159bd89297443780d635ccc5e3564John Hoford } 465b539461dcc159bd89297443780d635ccc5e3564John Hoford 475b539461dcc159bd89297443780d635ccc5e3564John Hoford private static String trim(float[] d) { 485b539461dcc159bd89297443780d635ccc5e3564John Hoford String ret = ""; 495b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < d.length; i++) { 505b539461dcc159bd89297443780d635ccc5e3564John Hoford ret += ((i == 0) ? "[ " : " , ") + trim(d[i]); 515b539461dcc159bd89297443780d635ccc5e3564John Hoford } 525b539461dcc159bd89297443780d635ccc5e3564John Hoford return ret + ("]"); 535b539461dcc159bd89297443780d635ccc5e3564John Hoford } 545b539461dcc159bd89297443780d635ccc5e3564John Hoford 555b539461dcc159bd89297443780d635ccc5e3564John Hoford private void creatOpacityAllocation(VrState state) { 565b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_opacity(state.mMaterial.getOpacityAllocation(state.mRs)); 575b539461dcc159bd89297443780d635ccc5e3564John Hoford } 585b539461dcc159bd89297443780d635ccc5e3564John Hoford 595b539461dcc159bd89297443780d635ccc5e3564John Hoford private void creatColorMapAllocation(VrState state) { 605b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_color_map(state.mMaterial.getColorMapAllocation(state.mRs)); 615b539461dcc159bd89297443780d635ccc5e3564John Hoford } 625b539461dcc159bd89297443780d635ccc5e3564John Hoford 635b539461dcc159bd89297443780d635ccc5e3564John Hoford @Override 645b539461dcc159bd89297443780d635ccc5e3564John Hoford public void setupTriangles(VrState state) { 655b539461dcc159bd89297443780d635ccc5e3564John Hoford super.setupTriangles(state); 665b539461dcc159bd89297443780d635ccc5e3564John Hoford if (mCancel){ 675b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 685b539461dcc159bd89297443780d635ccc5e3564John Hoford } 695b539461dcc159bd89297443780d635ccc5e3564John Hoford Matrix m = state.mTransform.getMatrix(Transform.SCREEN_SPACE, Transform.VOLUME_SPACE); 705b539461dcc159bd89297443780d635ccc5e3564John Hoford m.getAsFloats(mMatrixBuffer); 715b539461dcc159bd89297443780d635ccc5e3564John Hoford Matrix4f matrix4f = new Matrix4f(mMatrixBuffer); 725b539461dcc159bd89297443780d635ccc5e3564John Hoford if (scriptC_vr == null) { 735b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr = new ScriptC_vr(state.mRs); 745b539461dcc159bd89297443780d635ccc5e3564John Hoford } 755b539461dcc159bd89297443780d635ccc5e3564John Hoford if (script_resize == null) { 765b539461dcc159bd89297443780d635ccc5e3564John Hoford script_resize = ScriptIntrinsicResize.create(state.mRs); 775b539461dcc159bd89297443780d635ccc5e3564John Hoford } 785b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_matrix4(matrix4f); 795b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < 9; i++) { 805b539461dcc159bd89297443780d635ccc5e3564John Hoford int x = i % 3; 815b539461dcc159bd89297443780d635ccc5e3564John Hoford int y = i / 3; 825b539461dcc159bd89297443780d635ccc5e3564John Hoford mMatrixBuffer[i] = mMatrixBuffer[x + y * 4]; 835b539461dcc159bd89297443780d635ccc5e3564John Hoford } 845b539461dcc159bd89297443780d635ccc5e3564John Hoford Matrix3f matrix3f = new Matrix3f(mMatrixBuffer); 855b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_matrix3(matrix3f); 865b539461dcc159bd89297443780d635ccc5e3564John Hoford creatColorMapAllocation(state); 875b539461dcc159bd89297443780d635ccc5e3564John Hoford creatOpacityAllocation(state); 885b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.invoke_setup_vectors(); 895b539461dcc159bd89297443780d635ccc5e3564John Hoford } 905b539461dcc159bd89297443780d635ccc5e3564John Hoford 915b539461dcc159bd89297443780d635ccc5e3564John Hoford @Override 925b539461dcc159bd89297443780d635ccc5e3564John Hoford public void raycast(VrState state) { 935b539461dcc159bd89297443780d635ccc5e3564John Hoford if (mCancel){ 945b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 955b539461dcc159bd89297443780d635ccc5e3564John Hoford } 965b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_volume(state.mVolume.mVolumeAllocation); 975b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_bricks(state.mRsMask.mBrick_allocation); 985b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_brick_dimx(state.mRsMask.m_bricks_dimx); 995b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_brick_dimy(state.mRsMask.m_bricks_dimy); 1005b539461dcc159bd89297443780d635ccc5e3564John Hoford if (mCancel){ 1015b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 1025b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1035b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.set_zbuff(state.mzRangeFullAllocation); 1045b539461dcc159bd89297443780d635ccc5e3564John Hoford if (mCancel){ 1055b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 1065b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1075b539461dcc159bd89297443780d635ccc5e3564John Hoford if (state.mImgWidth*state.mImgHeight < 512*512) { 1085b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.forEach_draw_z_buffer(state.mzRangeFullAllocation, state.mScrAllocation); 1095b539461dcc159bd89297443780d635ccc5e3564John Hoford } else { 1105b539461dcc159bd89297443780d635ccc5e3564John Hoford int blocks = state.mImgWidth*state.mImgHeight/(256*256); 1115b539461dcc159bd89297443780d635ccc5e3564John Hoford for (int i = 0; i < blocks; i++) { 1125b539461dcc159bd89297443780d635ccc5e3564John Hoford options.setX(0,state.mImgWidth); 1135b539461dcc159bd89297443780d635ccc5e3564John Hoford options.setY(i*state.mImgHeight/blocks, (i+1)*state.mImgHeight/blocks); 1145b539461dcc159bd89297443780d635ccc5e3564John Hoford scriptC_vr.forEach_draw_z_buffer(state.mzRangeFullAllocation, state.mScrAllocation, options); 1155b539461dcc159bd89297443780d635ccc5e3564John Hoford state.mRs.finish(); 1165b539461dcc159bd89297443780d635ccc5e3564John Hoford if (mCancel){ 1175b539461dcc159bd89297443780d635ccc5e3564John Hoford Log.v(LOGTAG, "cancel"); 1185b539461dcc159bd89297443780d635ccc5e3564John Hoford return; 1195b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1205b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1215b539461dcc159bd89297443780d635ccc5e3564John Hoford 1225b539461dcc159bd89297443780d635ccc5e3564John Hoford 1235b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1245b539461dcc159bd89297443780d635ccc5e3564John Hoford 1255b539461dcc159bd89297443780d635ccc5e3564John Hoford } 1265b539461dcc159bd89297443780d635ccc5e3564John Hoford 1275b539461dcc159bd89297443780d635ccc5e3564John Hoford} 128