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

Unified Diff: chrome/browser/android/vr_shell/vr_shell_renderer.cc

Issue 2829653003: PROTOTYPE (incomplete): Add quad renderer and stub bits to handle security warnings. (Closed)
Patch Set: Created 3 years, 8 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: chrome/browser/android/vr_shell/vr_shell_renderer.cc
diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.cc b/chrome/browser/android/vr_shell/vr_shell_renderer.cc
index 7951074d0453fedd5f9c2eba49fefdeb4030a37e..9024e0847ba19936fafddcd34b42759972c5b44c 100644
--- a/chrome/browser/android/vr_shell/vr_shell_renderer.cc
+++ b/chrome/browser/android/vr_shell/vr_shell_renderer.cc
@@ -75,6 +75,7 @@ const char* GetShaderSource(vr_shell::ShaderID shader) {
case vr_shell::ShaderID::RETICLE_VERTEX_SHADER:
case vr_shell::ShaderID::LASER_VERTEX_SHADER:
case vr_shell::ShaderID::CONTROLLER_VERTEX_SHADER:
+ case vr_shell::ShaderID::SKIA_QUAD_VERTEX_SHADER:
return SHADER(
/* clang-format off */
uniform mat4 u_ModelViewProjMatrix;
@@ -119,6 +120,24 @@ const char* GetShaderSource(vr_shell::ShaderID shader) {
gl_FragColor = vec4(color.xyz, color.w * opacity);
}
/* clang-format on */);
+ case vr_shell::ShaderID::SKIA_QUAD_FRAGMENT_SHADER:
+ return OEIE_SHADER(
+ /* clang-format off */
+ precision highp float;
+ uniform sampler2D u_Texture;
+ uniform vec4 u_CopyRect; // rectangle
+ varying vec2 v_TexCoordinate;
+ uniform lowp vec4 color;
+ uniform mediump float opacity;
+
+ void main() {
+ vec2 scaledTex =
+ vec2(u_CopyRect[0] + v_TexCoordinate.x * u_CopyRect[2],
+ u_CopyRect[1] + v_TexCoordinate.y * u_CopyRect[3]);
+ lowp vec4 color = texture2D(u_Texture, scaledTex);
+ gl_FragColor = vec4(color.xyz, color.w * opacity);
+ }
+ /* clang-format on */);
case vr_shell::ShaderID::WEBVR_VERTEX_SHADER:
return SHADER(
/* clang-format off */
@@ -398,6 +417,71 @@ void TexturedQuadRenderer::Flush() {
TexturedQuadRenderer::~TexturedQuadRenderer() = default;
+SkiaQuadRenderer::SkiaQuadRenderer()
+ : BaseQuadRenderer(SKIA_QUAD_VERTEX_SHADER,
+ SKIA_QUAD_FRAGMENT_SHADER) {
+ model_view_proj_matrix_handle_ =
+ glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
+ tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
+ copy_rect_uniform_handle_ =
+ glGetUniformLocation(program_handle_, "u_CopyRect");
+ opacity_handle_ = glGetUniformLocation(program_handle_, "opacity");
+}
+
+void SkiaQuadRenderer::Draw(int texture_data_handle,
cjgrant 2017/04/19 16:24:52 This is Flush(), refactored into a queue-less equi
+ const vr::Mat4f& view_proj_matrix,
+ const gfx::RectF& copy_rect,
+ float opacity) {
+ TexturedQuad quad;
+ quad.texture_data_handle = texture_data_handle;
+ quad.view_proj_matrix = view_proj_matrix;
+ quad.copy_rect = {copy_rect.x(), copy_rect.y(), copy_rect.width(),
+ copy_rect.height()};
+ quad.opacity = opacity;
+
+ // Set up GL state that doesn't change between draw calls.
+ glUseProgram(program_handle_);
+
+ glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
+
+ // Set up position attribute.
+ glVertexAttribPointer(position_handle_, kPositionDataSize, GL_FLOAT, false,
+ kTextureQuadDataStride,
+ VOID_OFFSET(kPositionDataOffset));
+ glEnableVertexAttribArray(position_handle_);
+
+ // Set up texture coordinate attribute.
+ glVertexAttribPointer(tex_coord_handle_, kTextureCoordinateDataSize, GL_FLOAT,
+ false, kTextureQuadDataStride,
+ VOID_OFFSET(kTextureCoordinateDataOffset));
+ glEnableVertexAttribArray(tex_coord_handle_);
+
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ // Link texture data with texture unit.
+ glActiveTexture(GL_TEXTURE0);
+ glUniform1i(tex_uniform_handle_, 0);
+
+ glBindTexture(GL_TEXTURE_EXTERNAL_OES, quad.texture_data_handle);
+ glUniform1f(opacity_handle_, quad.opacity);
+
+ // Pass in model view project matrix.
+ glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false,
+ MatrixToGLArray(quad.view_proj_matrix).data());
+
+ // Pass in the copy rect.
+ glUniform4fv(copy_rect_uniform_handle_, 1,
+ reinterpret_cast<const float*>(&quad.copy_rect));
+
+ glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
+
+ glDisableVertexAttribArray(position_handle_);
+ glDisableVertexAttribArray(tex_coord_handle_);
+}
+
+SkiaQuadRenderer::~SkiaQuadRenderer() = default;
+
WebVrRenderer::WebVrRenderer()
: BaseQuadRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) {
tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");

Powered by Google App Engine
This is Rietveld 408576698