Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2088)

Unified Diff: remoting/android/java/src/org/chromium/chromoting/CardboardDesktopRenderer.java

Issue 1305633002: Refactor drawing desktop. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor desktop drawing. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
}
}

Powered by Google App Engine
This is Rietveld 408576698