Chromium Code Reviews| Index: remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java |
| diff --git a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java |
| index b9995c4b4a2e1752bbad001968c4d377a65fb5de..a218d202c85eb0a4ca756c15f9b6df89653b1dc9 100644 |
| --- a/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java |
| +++ b/remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java |
| @@ -100,31 +100,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| 7, 2, 3 |
| }); |
| - private static final String DESKTOP_VERTEX_SHADER = |
| - "uniform mat4 u_CombinedMatrix;" |
| - + "attribute vec4 a_Position;" |
| - + "attribute vec2 a_TexCoordinate;" |
| - + "varying vec2 v_TexCoordinate;" |
| - + "void main() {" |
| - + " v_TexCoordinate = a_TexCoordinate;" |
| - + " gl_Position = u_CombinedMatrix * a_Position;" |
| - + "}"; |
| - |
| - private static final String DESKTOP_FRAGMENT_SHADER = |
| - "precision highp float;" |
| - + "uniform sampler2D u_Texture;" |
| - + "varying vec2 v_TexCoordinate;" |
| - + "const float borderWidth = 0.002;" |
| - + "void main() {" |
| - + " if (v_TexCoordinate.x > (1.0 - borderWidth) || v_TexCoordinate.x < borderWidth" |
| - + " || v_TexCoordinate.y > (1.0 - borderWidth)" |
| - + " || v_TexCoordinate.y < borderWidth) {" |
| - + " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);" |
| - + " } else {" |
| - + " gl_FragColor = texture2D(u_Texture, v_TexCoordinate);" |
| - + " }" |
| - + "}"; |
| - |
| private static final String SKYBOX_VERTEX_SHADER = |
| "uniform mat4 u_CombinedMatrix;" |
| + "attribute vec3 a_Position;" |
| @@ -189,14 +164,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| // Eye position in desktop. |
| private float[] mEyePositionVector; |
| - private int mDesktopCombinedMatrixHandle; |
| - private int mPositionHandle; |
| - private int mTextureDataHandle; |
| - private int mTextureUniformHandle; |
| - private int mTextureCoordinateHandle; |
| - private int mProgramHandle; |
| - private int mDesktopVertexShaderHandle; |
| - private int mDesktopFragmentShaderHandle; |
| private int mSkyboxVertexShaderHandle; |
| private int mSkyboxFragmentShaderHandle; |
| private int mSkyboxProgramHandle; |
| @@ -204,6 +171,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| private int mSkyboxCombinedMatrixHandle; |
| private int mSkyboxTextureUnitHandle; |
| private int mSkyboxTextureDataHandle; |
| + private CardboardActivityDesktop mDesktop; |
| private CardboardActivityEyePoint mEyePoint; |
| // Flag to indicate whether reload the desktop texture or not. |
| @@ -285,20 +253,6 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| // Enable depth testing. |
| GLES20.glEnable(GLES20.GL_DEPTH_TEST); |
| - // Set handles for desktop drawing. |
| - mDesktopVertexShaderHandle = |
| - ShaderHelper.compileShader(GLES20.GL_VERTEX_SHADER, DESKTOP_VERTEX_SHADER); |
| - mDesktopFragmentShaderHandle = |
| - ShaderHelper.compileShader(GLES20.GL_FRAGMENT_SHADER, DESKTOP_FRAGMENT_SHADER); |
| - mProgramHandle = ShaderHelper.createAndLinkProgram(mDesktopVertexShaderHandle, |
| - mDesktopFragmentShaderHandle, new String[] {"a_Position", "a_TexCoordinate"}); |
| - mDesktopCombinedMatrixHandle = |
| - GLES20.glGetUniformLocation(mProgramHandle, "u_CombinedMatrix"); |
| - mTextureUniformHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_Texture"); |
| - mPositionHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_Position"); |
| - mTextureCoordinateHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_TexCoordinate"); |
| - mTextureDataHandle = TextureHelper.createTextureHandle(); |
| - |
| // Set handlers for skybox drawing. |
| GLES20.glEnable(GLES20.GL_TEXTURE_CUBE_MAP); |
| mSkyboxVertexShaderHandle = |
| @@ -316,6 +270,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| GLES20.glGetUniformLocation(mSkyboxProgramHandle, "u_TextureUnit"); |
| mSkyboxTextureDataHandle = TextureHelper.createTextureHandle(); |
| + mDesktop = new CardboardActivityDesktop(); |
| mEyePoint = new CardboardActivityEyePoint(); |
| } |
| @@ -347,7 +302,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| headTransform.getForwardVector(mForwardVector, 0); |
| getLookingPosition(); |
| - maybeLoadTexture(mTextureDataHandle); |
| + maybeLoadDesktopTexture(); |
| maybeLoadCubeMapAndCleanImages(mSkyboxTextureDataHandle); |
| } |
| @@ -367,12 +322,10 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| @Override |
| public void onRendererShutdown() { |
| - GLES20.glDeleteShader(mDesktopVertexShaderHandle); |
| - GLES20.glDeleteShader(mDesktopFragmentShaderHandle); |
| + mDesktop.cleanup(); |
| mEyePoint.cleanup(); |
| GLES20.glDeleteShader(mSkyboxVertexShaderHandle); |
| GLES20.glDeleteShader(mSkyboxFragmentShaderHandle); |
| - GLES20.glDeleteTextures(1, new int[] {mTextureDataHandle}, 0); |
| GLES20.glDeleteTextures(1, new int[] {mSkyboxTextureDataHandle}, 0); |
| mActivity.runOnUiThread(new Runnable() { |
| public void run() { |
| @@ -386,9 +339,12 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| } |
| private void drawDesktop() { |
| - GLES20.glUseProgram(mProgramHandle); |
| + if (mDesktopCoordinates == null) { |
|
Lambros
2015/08/19 23:17:28
mDesktopCoordinates is no longer used in this meth
shichengfeng
2015/08/20 01:02:53
Done.
|
| + // This can happen if the client is connected, but a complete video frame has not yet |
| + // been decoded. |
| + return; |
| + } |
| - // Translate the desktop model. |
| Matrix.setIdentityM(mDesktopModelMatrix, 0); |
| Matrix.translateM(mDesktopModelMatrix, 0, DESKTOP_POSITION_X, |
| DESKTOP_POSITION_Y, DESKTOP_POSITION_Z); |
| @@ -397,34 +353,9 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| Matrix.multiplyMM(mDesktopCombinedMatrix, 0, mViewMatrix, 0, mDesktopModelMatrix, 0); |
| Matrix.multiplyMM(mDesktopCombinedMatrix, 0, mProjectionMatrix, |
| 0, mDesktopCombinedMatrix, 0); |
| + mDesktop.setCombinedMatrix(mDesktopCombinedMatrix); |
| - // Pass in model view project matrix. |
| - GLES20.glUniformMatrix4fv(mDesktopCombinedMatrixHandle, 1, false, |
| - mDesktopCombinedMatrix, 0); |
| - |
| - if (mDesktopCoordinates == null) { |
| - // This can happen if the client is connected, but a complete video frame has not yet |
| - // been decoded. |
| - return; |
| - } |
| - // Pass in the desktop position. |
| - GLES20.glVertexAttribPointer(mPositionHandle, POSITION_DATA_SIZE, GLES20.GL_FLOAT, false, |
| - 0, mDesktopCoordinates); |
| - GLES20.glEnableVertexAttribArray(mPositionHandle); |
| - |
| - // Pass in texture coordinate. |
| - GLES20.glVertexAttribPointer(mTextureCoordinateHandle, TEXTURE_COORDINATE_DATA_SIZE, |
| - GLES20.GL_FLOAT, false, 0, DESKTOP_TEXTURE_COORDINATES); |
| - GLES20.glEnableVertexAttribArray(mTextureCoordinateHandle); |
| - |
| - // Pass in texture data. |
| - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); |
| - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureDataHandle); |
| - GLES20.glUniform1i(mTextureUniformHandle, 0); |
| - |
| - // Draw the desktop. |
| - int totalPointNumber = 6; |
| - GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, totalPointNumber); |
| + mDesktop.draw(); |
| } |
| private void drawEyePoint() { |
| @@ -605,7 +536,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| * Link desktop texture with textureDataHandle if {@link mReloadTexture} is true. |
| * @param textureDataHandle the handle we want attach texture to |
| */ |
| - private void maybeLoadTexture(int textureDataHandle) { |
| + private void maybeLoadDesktopTexture() { |
| synchronized (mReloadTextureLock) { |
| if (!mReloadTexture) { |
| return; |
| @@ -627,7 +558,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| } |
| updateDesktopCoordinatesBuffer(bitmap); |
| - TextureHelper.linkTexture(textureDataHandle, bitmap); |
| + mDesktop.setTexture(bitmap); |
| synchronized (mReloadTextureLock) { |
| mReloadTexture = false; |
| @@ -637,7 +568,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| /** |
| * Convert float array to a FloatBuffer for use in OpenGL calls. |
| */ |
| - private static FloatBuffer makeFloatBuffer(float[] data) { |
| + public static FloatBuffer makeFloatBuffer(float[] data) { |
| FloatBuffer result = ByteBuffer |
| .allocateDirect(data.length * BYTE_PER_FLOAT) |
| .order(ByteOrder.nativeOrder()).asFloatBuffer(); |
| @@ -664,6 +595,7 @@ public class CardboardDesktopRenderer implements CardboardView.StereoRenderer { |
| mHalfDesktopWidth, -HALF_DESKTOP_HEIGHT, 0.0f, |
| mHalfDesktopWidth, HALF_DESKTOP_HEIGHT, 0.0f |
| }); |
| + mDesktop.setPosition(mDesktopCoordinates); |
| } |
| } |