| Index: ui/ozone/demo/surfaceless_gl_renderer.cc
|
| diff --git a/ui/ozone/demo/surfaceless_gl_renderer.cc b/ui/ozone/demo/surfaceless_gl_renderer.cc
|
| index 744e5c4add81508206ef8190d1537e976a718397..ff50168b863d414f633905f354e21fa56556d75c 100644
|
| --- a/ui/ozone/demo/surfaceless_gl_renderer.cc
|
| +++ b/ui/ozone/demo/surfaceless_gl_renderer.cc
|
| @@ -4,8 +4,10 @@
|
|
|
| #include "ui/ozone/demo/surfaceless_gl_renderer.h"
|
|
|
| +#include "base/bind.h"
|
| #include "ui/gl/gl_bindings.h"
|
| #include "ui/gl/gl_image.h"
|
| +#include "ui/gl/gl_surface.h"
|
|
|
| namespace ui {
|
|
|
| @@ -77,7 +79,10 @@ void SurfacelessGlRenderer::BufferWrapper::SchedulePlane() {
|
|
|
| SurfacelessGlRenderer::SurfacelessGlRenderer(gfx::AcceleratedWidget widget,
|
| const gfx::Size& size)
|
| - : GlRenderer(widget, size), back_buffer_(0) {
|
| + : GlRenderer(widget, size),
|
| + back_buffer_(0),
|
| + is_swapping_buffers_(false),
|
| + weak_ptr_factory_(this) {
|
| }
|
|
|
| SurfacelessGlRenderer::~SurfacelessGlRenderer() {
|
| @@ -95,11 +100,28 @@ bool SurfacelessGlRenderer::Initialize() {
|
| }
|
|
|
| void SurfacelessGlRenderer::RenderFrame() {
|
| + if (is_swapping_buffers_)
|
| + return;
|
| +
|
| + float fraction = NextFraction();
|
| +
|
| buffers_[back_buffer_].BindFramebuffer();
|
| +
|
| + glViewport(0, 0, size_.width(), size_.height());
|
| + glClearColor(1 - fraction, fraction, 0.0, 1.0);
|
| + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
| +
|
| buffers_[back_buffer_].SchedulePlane();
|
| - back_buffer_ ^= 1;
|
| + is_swapping_buffers_ = true;
|
| + if (!surface_->SwapBuffersAsync(
|
| + base::Bind(&SurfacelessGlRenderer::OnSwapBuffersAck,
|
| + weak_ptr_factory_.GetWeakPtr())))
|
| + LOG(FATAL) << "Failed to swap buffers";
|
| +}
|
|
|
| - GlRenderer::RenderFrame();
|
| +void SurfacelessGlRenderer::OnSwapBuffersAck() {
|
| + is_swapping_buffers_ = false;
|
| + back_buffer_ ^= 1;
|
| }
|
|
|
| } // namespace ui
|
|
|