summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorshichengfeng <shichengfeng@google.com>2015-08-19 12:20:47 -0700
committerCommit bot <commit-bot@chromium.org>2015-08-19 19:21:31 +0000
commit62dbc7a77f863ae7f916268808ff097dc08f183b (patch)
tree9bd2a06ad094f4e6d2df90d278702f1350c5c218 /remoting
parentb85d21a510e9515c518dfdd391101f17bfb38024 (diff)
downloadchromium_src-62dbc7a77f863ae7f916268808ff097dc08f183b.zip
chromium_src-62dbc7a77f863ae7f916268808ff097dc08f183b.tar.gz
chromium_src-62dbc7a77f863ae7f916268808ff097dc08f183b.tar.bz2
Chromoting Android: Refactor the eye point drawing code into CardboardActivityEyePoint class.
BUG=516871 Review URL: https://codereview.chromium.org/1287163006 Cr-Commit-Position: refs/heads/master@{#344300}
Diffstat (limited to 'remoting')
-rw-r--r--remoting/android/java/src/org/chromium/chromoting/CardboardActivityEyePoint.java85
-rw-r--r--remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java55
2 files changed, 91 insertions, 49 deletions
diff --git a/remoting/android/java/src/org/chromium/chromoting/CardboardActivityEyePoint.java b/remoting/android/java/src/org/chromium/chromoting/CardboardActivityEyePoint.java
new file mode 100644
index 0000000..57d02b5
--- /dev/null
+++ b/remoting/android/java/src/org/chromium/chromoting/CardboardActivityEyePoint.java
@@ -0,0 +1,85 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chromoting;
+
+import android.opengl.GLES20;
+
+/**
+ * Chromoting Cardboard activity eye point, which represents the location on the desktop
+ * where user is looking at.
+ */
+public class CardboardActivityEyePoint {
+ private static final String VERTEX_SHADER =
+ "uniform mat4 u_CombinedMatrix;"
+ + "attribute vec4 a_EyePosition;"
+ + "void main() {"
+ + " gl_Position = u_CombinedMatrix * a_EyePosition;"
+ + " gl_PointSize = 3.0;"
+ + "}";
+
+ private static final String FRAGMENT_SHADER =
+ "precision mediump float;"
+ + "void main() {"
+ + " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);"
+ + "}";
+
+ // Size of the vertexes to draw eye point.
+ private static final int VERTEXES_NUMBER = 1;
+
+ private int mVertexShaderHandle;
+ private int mFragmentShaderHandle;
+ private int mProgramHandle;
+ private int mCombinedMatrixHandle;
+ private int mPositionHandle;
+ private float[] mCombinedMatrix;
+
+ public CardboardActivityEyePoint() {
+ // Set handlers for eye point drawing.
+ mVertexShaderHandle =
+ ShaderHelper.compileShader(GLES20.GL_VERTEX_SHADER, VERTEX_SHADER);
+ mFragmentShaderHandle =
+ ShaderHelper.compileShader(GLES20.GL_FRAGMENT_SHADER, FRAGMENT_SHADER);
+ mProgramHandle = ShaderHelper.createAndLinkProgram(mVertexShaderHandle,
+ mFragmentShaderHandle, new String[] {"a_EyePosition", "u_CombinedMatrix"});
+ mPositionHandle =
+ GLES20.glGetAttribLocation(mProgramHandle, "a_EyePosition");
+ mCombinedMatrixHandle =
+ GLES20.glGetUniformLocation(mProgramHandle, "u_CombinedMatrix");
+ }
+
+ /**
+ * Set up model view projection matrix.
+ */
+ public void setCombinedMatrix(float[] combinedMatrix) {
+ mCombinedMatrix = combinedMatrix.clone();
+ }
+
+ /**
+ * Draw the eye point based on given model view projection matrix.
+ */
+ public void draw() {
+ GLES20.glUseProgram(mProgramHandle);
+
+ // Set the eye point in front of desktop.
+ GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT);
+
+ GLES20.glUniformMatrix4fv(mCombinedMatrixHandle, 1, false, mCombinedMatrix, 0);
+
+ GLES20.glVertexAttrib4f(mPositionHandle, 0.0f, 0.0f, 0.0f, 1.0f);
+
+ // Since we are not using a buffer object, disable vertex arrays for this attribute.
+ GLES20.glDisableVertexAttribArray(mPositionHandle);
+
+ GLES20.glDrawArrays(GLES20.GL_POINTS, 0, VERTEXES_NUMBER);
+ }
+
+ /**
+ * Clean up opengl data.
+ */
+ public void cleanup() {
+ GLES20.glDeleteShader(mVertexShaderHandle);
+ GLES20.glDeleteShader(mFragmentShaderHandle);
+ }
+} \ No newline at end of file
diff --git a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java
index fe9a30c..b9995c4 100644
--- a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java
+++ b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java
@@ -125,20 +125,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
+ " }"
+ "}";
- private static final String EYE_POINT_VERTEX_SHADER =
- "uniform mat4 u_CombinedMatrix;"
- + "attribute vec4 a_EyePosition;"
- + "void main() {"
- + " gl_Position = u_CombinedMatrix * a_EyePosition;"
- + " gl_PointSize = 3.0;"
- + "}";
-
- private static final String EYE_POINT_FRAGMENT_SHADER =
- "precision mediump float;"
- + "void main() {"
- + " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);"
- + "}";
-
private static final String SKYBOX_VERTEX_SHADER =
"uniform mat4 u_CombinedMatrix;"
+ "attribute vec3 a_Position;"
@@ -211,11 +197,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
private int mProgramHandle;
private int mDesktopVertexShaderHandle;
private int mDesktopFragmentShaderHandle;
- private int mEyePointVertexShaderHandle;
- private int mEyePointFragmentShaderHandle;
- private int mEyePointProgramHandle;
- private int mEyePointPositionHandle;
- private int mEyePointCombinedMatrixHandle;
private int mSkyboxVertexShaderHandle;
private int mSkyboxFragmentShaderHandle;
private int mSkyboxProgramHandle;
@@ -223,6 +204,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
private int mSkyboxCombinedMatrixHandle;
private int mSkyboxTextureUnitHandle;
private int mSkyboxTextureDataHandle;
+ private CardboardActivityEyePoint mEyePoint;
// Flag to indicate whether reload the desktop texture or not.
private boolean mReloadTexture;
@@ -317,18 +299,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
mTextureCoordinateHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_TexCoordinate");
mTextureDataHandle = TextureHelper.createTextureHandle();
- // Set handlers for eye point drawing.
- mEyePointVertexShaderHandle =
- ShaderHelper.compileShader(GLES20.GL_VERTEX_SHADER, EYE_POINT_VERTEX_SHADER);
- mEyePointFragmentShaderHandle =
- ShaderHelper.compileShader(GLES20.GL_FRAGMENT_SHADER, EYE_POINT_FRAGMENT_SHADER);
- mEyePointProgramHandle = ShaderHelper.createAndLinkProgram(mEyePointVertexShaderHandle,
- mEyePointFragmentShaderHandle, new String[] {"a_EyePosition", "u_CombinedMatrix"});
- mEyePointPositionHandle =
- GLES20.glGetAttribLocation(mEyePointProgramHandle, "a_EyePosition");
- mEyePointCombinedMatrixHandle =
- GLES20.glGetUniformLocation(mEyePointProgramHandle, "u_CombinedMatrix");
-
// Set handlers for skybox drawing.
GLES20.glEnable(GLES20.GL_TEXTURE_CUBE_MAP);
mSkyboxVertexShaderHandle =
@@ -345,6 +315,8 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
mSkyboxTextureUnitHandle =
GLES20.glGetUniformLocation(mSkyboxProgramHandle, "u_TextureUnit");
mSkyboxTextureDataHandle = TextureHelper.createTextureHandle();
+
+ mEyePoint = new CardboardActivityEyePoint();
}
@Override
@@ -397,8 +369,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
public void onRendererShutdown() {
GLES20.glDeleteShader(mDesktopVertexShaderHandle);
GLES20.glDeleteShader(mDesktopFragmentShaderHandle);
- GLES20.glDeleteShader(mEyePointVertexShaderHandle);
- GLES20.glDeleteShader(mEyePointFragmentShaderHandle);
+ mEyePoint.cleanup();
GLES20.glDeleteShader(mSkyboxVertexShaderHandle);
GLES20.glDeleteShader(mSkyboxFragmentShaderHandle);
GLES20.glDeleteTextures(1, new int[] {mTextureDataHandle}, 0);
@@ -461,11 +432,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
return;
}
- GLES20.glUseProgram(mEyePointProgramHandle);
-
- // Set the eye point in front of desktop.
- GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT);
-
float eyePointX = clamp(mEyePositionVector[0], -mHalfDesktopWidth,
mHalfDesktopWidth);
float eyePointY = clamp(mEyePositionVector[1], -HALF_DESKTOP_HEIGHT,
@@ -477,17 +443,8 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer {
Matrix.multiplyMM(mEyePointCombinedMatrix, 0, mProjectionMatrix,
0, mEyePointCombinedMatrix, 0);
- GLES20.glUniformMatrix4fv(mEyePointCombinedMatrixHandle, 1, false,
- mEyePointCombinedMatrix, 0);
-
- GLES20.glVertexAttrib4f(mEyePointPositionHandle, 0.0f,
- 0.0f, 0.0f, 1.0f);
-
- // Since we are not using a buffer object, disable vertex arrays for this attribute.
- GLES20.glDisableVertexAttribArray(mEyePointPositionHandle);
-
- int totalPointNumber = 1;
- GLES20.glDrawArrays(GLES20.GL_POINTS, 0, totalPointNumber);
+ mEyePoint.setCombinedMatrix(mEyePointCombinedMatrix);
+ mEyePoint.draw();
}
private void drawSkybox() {