Index: content/common/gpu/media/surfaceless_gl_renderer.cc |
diff --git a/ui/ozone/demo/surfaceless_gl_renderer.cc b/content/common/gpu/media/surfaceless_gl_renderer.cc |
similarity index 77% |
copy from ui/ozone/demo/surfaceless_gl_renderer.cc |
copy to content/common/gpu/media/surfaceless_gl_renderer.cc |
index 791615dcdbae8a7155999c3ad3f684d4d3699ac8..ac71b9425610024b95215a54d81ba272cf39c6cb 100644 |
--- a/ui/ozone/demo/surfaceless_gl_renderer.cc |
+++ b/content/common/gpu/media/surfaceless_gl_renderer.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "ui/ozone/demo/surfaceless_gl_renderer.h" |
+#include "content/common/gpu/media/surfaceless_gl_renderer.h" |
#include "base/bind.h" |
#include "ui/gl/gl_bindings.h" |
@@ -11,7 +11,7 @@ |
#include "ui/gl/gl_surface.h" |
#include "ui/ozone/gpu/gpu_memory_buffer_factory_ozone_native_buffer.h" |
-namespace ui { |
+namespace content { |
SurfacelessGlRenderer::BufferWrapper::BufferWrapper() |
: widget_(gfx::kNullAcceleratedWidget), gl_fb_(0), gl_tex_(0) { |
@@ -29,7 +29,7 @@ SurfacelessGlRenderer::BufferWrapper::~BufferWrapper() { |
} |
bool SurfacelessGlRenderer::BufferWrapper::Initialize( |
- GpuMemoryBufferFactoryOzoneNativeBuffer* buffer_factory, |
+ ui::GpuMemoryBufferFactoryOzoneNativeBuffer* buffer_factory, |
gfx::AcceleratedWidget widget, |
const gfx::Size& size) { |
glGenFramebuffersEXT(1, &gl_fb_); |
@@ -48,7 +48,7 @@ bool SurfacelessGlRenderer::BufferWrapper::Initialize( |
buffer_factory->DestroyGpuMemoryBuffer(id, widget); |
if (!image_) { |
- LOG(ERROR) << "Failed to create GL image"; |
+ LOG(FATAL) << "Failed to create GL image"; |
return false; |
} |
@@ -59,7 +59,7 @@ bool SurfacelessGlRenderer::BufferWrapper::Initialize( |
glFramebufferTexture2DEXT(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, |
gl_tex_, 0); |
if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { |
- LOG(ERROR) << "Failed to create framebuffer " |
+ LOG(FATAL) << "Failed to create framebuffer " |
<< glCheckFramebufferStatusEXT(GL_FRAMEBUFFER); |
return false; |
} |
@@ -82,11 +82,10 @@ void SurfacelessGlRenderer::BufferWrapper::SchedulePlane() { |
SurfacelessGlRenderer::SurfacelessGlRenderer( |
gfx::AcceleratedWidget widget, |
const gfx::Size& size, |
- GpuMemoryBufferFactoryOzoneNativeBuffer* buffer_factory) |
+ ui::GpuMemoryBufferFactoryOzoneNativeBuffer* buffer_factory) |
: GlRenderer(widget, size), |
buffer_factory_(buffer_factory), |
back_buffer_(0), |
- is_swapping_buffers_(false), |
weak_ptr_factory_(this) { |
} |
@@ -107,30 +106,32 @@ bool SurfacelessGlRenderer::Initialize() { |
return true; |
} |
-void SurfacelessGlRenderer::RenderFrame() { |
- if (is_swapping_buffers_) |
- return; |
- |
- float fraction = NextFraction(); |
- |
- context_->MakeCurrent(surface_.get()); |
+bool SurfacelessGlRenderer::MakeCurrent() { |
+ if (!context_->MakeCurrent(surface_.get())) |
+ return false; |
buffers_[back_buffer_].BindFramebuffer(); |
+ return true; |
+} |
- glViewport(0, 0, size_.width(), size_.height()); |
- glClearColor(1 - fraction, fraction, 0.0, 1.0); |
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |
- |
+void SurfacelessGlRenderer::SwapBuffers() { |
buffers_[back_buffer_].SchedulePlane(); |
- is_swapping_buffers_ = true; |
- if (!surface_->SwapBuffersAsync( |
- base::Bind(&SurfacelessGlRenderer::OnSwapBuffersAck, |
- weak_ptr_factory_.GetWeakPtr()))) |
+ if (!surface_->SwapBuffers()) |
LOG(FATAL) << "Failed to swap buffers"; |
+ back_buffer_ ^= 1; |
+ // Bind new framebuffer. |
+ buffers_[back_buffer_].BindFramebuffer(); |
} |
-void SurfacelessGlRenderer::OnSwapBuffersAck() { |
- is_swapping_buffers_ = false; |
- back_buffer_ ^= 1; |
+bool SurfacelessGlRenderer::IsFlipped() { |
+ return true; |
+} |
+ |
+void SurfacelessGlRenderer::BindFramebuffer(uint32_t fbo) { |
+ glBindFramebufferEXT(GL_FRAMEBUFFER, fbo); |
+} |
+ |
+void SurfacelessGlRenderer::UnbindFramebuffer() { |
+ buffers_[back_buffer_].BindFramebuffer(); |
} |
-} // namespace ui |
+} // namespace content |