Commit 75420245 authored by Christopher Grant's avatar Christopher Grant Committed by Commit Bot

VR: Render the keyboard through a UI renderer

This ensures that it interacts properly with other renderers. If we
render the keyboard directly, it won't flush previously-queued work, and
elements may draw out of order.

BUG=815078
R=ymalik

Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_vr;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Change-Id: Id691fea5a5a0bbbbe5f8e6d56b0ed2c33b0a8b59
Reviewed-on: https://chromium-review.googlesource.com/934981
Commit-Queue: Christopher Grant <cjgrant@chromium.org>
Reviewed-by: default avatarYash Malik <ymalik@chromium.org>
Cr-Commit-Position: refs/heads/master@{#538890}
parent c7485d82
......@@ -113,7 +113,7 @@ void Keyboard::Render(UiElementRenderer* renderer,
if (!delegate_)
return;
delegate_->Draw(camera_model);
renderer->DrawKeyboard(camera_model, delegate_);
}
void Keyboard::OnSetFocusable() {
......@@ -130,4 +130,13 @@ void Keyboard::UpdateDelegateVisibility() {
delegate_->HideKeyboard();
}
Keyboard::Renderer::Renderer() {}
Keyboard::Renderer::~Renderer() {}
void Keyboard::Renderer::Draw(const CameraModel& camera_model,
KeyboardDelegate* delegate) {
delegate->Draw(camera_model);
}
} // namespace vr
......@@ -8,6 +8,7 @@
#include "base/macros.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/keyboard_delegate.h"
#include "chrome/browser/vr/renderers/base_renderer.h"
namespace vr {
......@@ -31,6 +32,16 @@ class Keyboard : public UiElement {
void OnButtonDown(const gfx::PointF& position) override;
void OnButtonUp(const gfx::PointF& position) override;
class Renderer : public BaseRenderer {
public:
Renderer();
~Renderer() override;
void Draw(const CameraModel& camera_model, KeyboardDelegate* delegate);
private:
DISALLOW_COPY_AND_ASSIGN(Renderer);
};
private:
bool OnBeginFrame(const base::TimeTicks& time,
const gfx::Transform& head_pose) override;
......
......@@ -17,10 +17,11 @@ class BaseRenderer {
virtual void Flush();
protected:
BaseRenderer() = default;
BaseRenderer(const char* vertex_src, const char* fragment_src);
GLuint program_handle_;
GLuint position_handle_;
GLuint program_handle_ = 0;
GLuint position_handle_ = 0;
DISALLOW_COPY_AND_ASSIGN(BaseRenderer);
};
......
......@@ -47,6 +47,7 @@ void UiElementRenderer::Init() {
shadow_renderer_ = std::make_unique<Shadow::Renderer>();
stars_renderer_ = std::make_unique<Stars::Renderer>();
background_renderer_ = std::make_unique<Background::Renderer>();
keyboard_renderer_ = std::make_unique<Keyboard::Renderer>();
}
void UiElementRenderer::DrawTexturedQuad(
......@@ -159,6 +160,12 @@ void UiElementRenderer::DrawBackground(
fullscreen_factor);
}
void UiElementRenderer::DrawKeyboard(const CameraModel& camera_model,
KeyboardDelegate* delegate) {
FlushIfNecessary(keyboard_renderer_.get());
keyboard_renderer_->Draw(camera_model, delegate);
}
void UiElementRenderer::Flush() {
textured_quad_renderer_->Flush();
external_textured_quad_renderer_->Flush();
......
......@@ -13,6 +13,7 @@
#include "chrome/browser/vr/elements/environment/background.h"
#include "chrome/browser/vr/elements/environment/grid.h"
#include "chrome/browser/vr/elements/environment/stars.h"
#include "chrome/browser/vr/elements/keyboard.h"
#include "chrome/browser/vr/elements/laser.h"
#include "chrome/browser/vr/elements/reticle.h"
#include "chrome/browser/vr/elements/shadow.h"
......@@ -118,6 +119,9 @@ class UiElementRenderer {
float incognito_factor,
float fullscreen_factor);
VIRTUAL_FOR_MOCKS void DrawKeyboard(const CameraModel& camera_model,
KeyboardDelegate* delegate);
void Flush();
protected:
......@@ -141,6 +145,7 @@ class UiElementRenderer {
std::unique_ptr<Shadow::Renderer> shadow_renderer_;
std::unique_ptr<Stars::Renderer> stars_renderer_;
std::unique_ptr<Background::Renderer> background_renderer_;
std::unique_ptr<Keyboard::Renderer> keyboard_renderer_;
DISALLOW_COPY_AND_ASSIGN(UiElementRenderer);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment