summaryrefslogtreecommitdiff
path: root/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java')
-rw-r--r--java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java126
1 files changed, 126 insertions, 0 deletions
diff --git a/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java b/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java
new file mode 100644
index 00000000..1ac57383
--- /dev/null
+++ b/java/tests/VrDemo/src/com/example/android/rs/vr/engine/VrState.java
@@ -0,0 +1,126 @@
+/*
+ * 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.graphics.SurfaceTexture;
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.RenderScript;
+import android.renderscript.Type;
+import android.util.Log;
+import android.view.Surface;
+
+public class VrState {
+ private static final String LOGTAG = "VrState";
+ public RenderScript mRs;
+ public Volume mVolume;
+ public RsBrickedBitMask mRsMask;
+ public Material mMaterial = new Material();
+ public Cube mCubeVolume;
+ public TriData mCubeScreen;
+ public int mImgWidth;
+ public int mImgHeight;
+ Allocation mzRangeFullAllocation;
+ public Allocation mScrAllocation; // the RGB data out
+ public Transform mTransform = new Transform();
+
+ public void clone(VrState src) {
+ mRs = src.mRs;
+ mVolume = src.mVolume;
+ mRsMask = src.mRsMask;
+ mMaterial = src.mMaterial;
+ if (mCubeVolume == null) {
+ mCubeVolume = new Cube();
+ }
+ mCubeVolume.clone(src.mCubeVolume);
+ mCubeScreen = new TriData(src.mCubeScreen);
+ mImgWidth = src.mImgWidth;
+ mImgHeight = src.mImgHeight;
+ mzRangeFullAllocation = src.mzRangeFullAllocation;
+ mScrAllocation = src.mScrAllocation;
+ mTransform.clone(src.mTransform);
+ }
+
+ public void createOutputAllocation(Surface surface, int w, int h) {
+
+ if (mRs == null) {
+ return;
+ }
+
+ if (mScrAllocation == null
+ || mScrAllocation.getType().getX() != w
+ || mScrAllocation.getType().getY() != h) {
+ if (mScrAllocation != null) {
+ mScrAllocation.destroy();
+ mScrAllocation = null;
+ Log.v(LOGTAG, " destroy mScrAllocation");
+ }
+ Type.Builder b = new Type.Builder(mRs, Element.RGBA_8888(mRs));
+ b.setX(w);
+ b.setY(h);
+
+ mScrAllocation = Allocation.createTyped(mRs, b.create(),
+ Allocation.USAGE_IO_OUTPUT | Allocation.USAGE_SCRIPT);
+
+ }
+ mScrAllocation.setSurface(surface);
+
+ if (mzRangeFullAllocation == null
+ || mzRangeFullAllocation.getType().getX() != w
+ || mzRangeFullAllocation.getType().getY() != h) {
+ if (mzRangeFullAllocation != null) {
+ mzRangeFullAllocation.destroy();
+ mzRangeFullAllocation = null;
+ Log.v(LOGTAG, " destroy mzRangeFullAllocation");
+
+ }
+ Type.Builder b = new Type.Builder(mRs, Element.F32_2(mRs));
+ b.setX(w);
+ b.setY(h);
+
+ mzRangeFullAllocation = Allocation.createTyped(mRs, b.create());
+ }
+
+ mImgWidth = w;
+ mImgHeight = h;
+ mTransform.setScreenDim(w, h);
+ }
+
+ public void copyData(VrState src) {
+ mRs = src.mRs;
+ mVolume = src.mVolume;
+ mRsMask = src.mRsMask;
+ mMaterial = src.mMaterial;
+ if (mCubeVolume == null) {
+ mCubeVolume = new Cube();
+ }
+ mCubeVolume.clone(src.mCubeVolume);
+ mCubeScreen = new TriData(src.mCubeScreen); // TODO I should not have to do new each time
+ mImgWidth = src.mImgWidth;
+ mImgHeight = src.mImgHeight;
+ mTransform.clone(src.mTransform);
+
+ }
+
+ public void destroyScreenAllocation() {
+ Log.v(LOGTAG, "destroyScreenAllocation");
+ if (mScrAllocation != null) {
+ mScrAllocation.destroy();
+ mScrAllocation = null;
+ }
+ }
+}