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); |
} |
} |