diff options
author | shichengfeng <shichengfeng@google.com> | 2015-08-19 12:20:47 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-19 19:21:31 +0000 |
commit | 62dbc7a77f863ae7f916268808ff097dc08f183b (patch) | |
tree | 9bd2a06ad094f4e6d2df90d278702f1350c5c218 /remoting | |
parent | b85d21a510e9515c518dfdd391101f17bfb38024 (diff) | |
download | chromium_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.java | 85 | ||||
-rw-r--r-- | remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java | 55 |
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() { |