Commit bb07561f authored by Daniel Nicoara's avatar Daniel Nicoara Committed by Commit Bot

ozone-demo: Fix NOTREACHED while destroying buffers and misc warnings

Need to have the GL context current before deleting the buffers. Since
the context was destoryed before the buffers due to declaration ordering
in the class definition, the context was lost before the buffers were
destroyed.

Also rename the overlay array to signify that it is an array.

Fixed presubmit warning to use base::size over arraysize.

BUG=NONE
TEST=Ran ozone_demo and verified no GL errors are seen on console.

Change-Id: I8e8da2918fe7c1f2cb5cf16bcebddfd453b315b3
Reviewed-on: https://chromium-review.googlesource.com/1039988Reviewed-by: default avatarMichael Spang <spang@chromium.org>
Commit-Queue: Daniel Nicoara <dnicoara@chromium.org>
Cr-Commit-Position: refs/heads/master@{#555452}
parent 30e08415
...@@ -128,6 +128,11 @@ SurfacelessGlRenderer::~SurfacelessGlRenderer() { ...@@ -128,6 +128,11 @@ SurfacelessGlRenderer::~SurfacelessGlRenderer() {
// Need to make current when deleting the framebuffer resources allocated in // Need to make current when deleting the framebuffer resources allocated in
// the buffers. // the buffers.
context_->MakeCurrent(surface_.get()); context_->MakeCurrent(surface_.get());
for (size_t i = 0; i < base::size(buffers_); ++i)
buffers_[i].reset();
for (size_t i = 0; i < base::size(overlay_buffers_); ++i)
overlay_buffers_[i].reset();
} }
bool SurfacelessGlRenderer::Initialize() { bool SurfacelessGlRenderer::Initialize() {
...@@ -151,7 +156,7 @@ bool SurfacelessGlRenderer::Initialize() { ...@@ -151,7 +156,7 @@ bool SurfacelessGlRenderer::Initialize() {
else else
primary_plane_rect_ = gfx::Rect(size_); primary_plane_rect_ = gfx::Rect(size_);
for (size_t i = 0; i < arraysize(buffers_); ++i) { for (size_t i = 0; i < base::size(buffers_); ++i) {
buffers_[i].reset(new BufferWrapper()); buffers_[i].reset(new BufferWrapper());
if (!buffers_[i]->Initialize(widget_, primary_plane_rect_.size())) if (!buffers_[i]->Initialize(widget_, primary_plane_rect_.size()))
return false; return false;
...@@ -159,9 +164,10 @@ bool SurfacelessGlRenderer::Initialize() { ...@@ -159,9 +164,10 @@ bool SurfacelessGlRenderer::Initialize() {
if (command_line->HasSwitch("enable-overlay")) { if (command_line->HasSwitch("enable-overlay")) {
gfx::Size overlay_size = gfx::Size(size_.width() / 8, size_.height() / 8); gfx::Size overlay_size = gfx::Size(size_.width() / 8, size_.height() / 8);
for (size_t i = 0; i < arraysize(overlay_buffer_); ++i) { for (size_t i = 0; i < base::size(overlay_buffers_); ++i) {
overlay_buffer_[i].reset(new BufferWrapper()); overlay_buffers_[i].reset(new BufferWrapper());
overlay_buffer_[i]->Initialize(gfx::kNullAcceleratedWidget, overlay_size); overlay_buffers_[i]->Initialize(gfx::kNullAcceleratedWidget,
overlay_size);
glViewport(0, 0, overlay_size.width(), overlay_size.height()); glViewport(0, 0, overlay_size.width(), overlay_size.height());
glClearColor(i, 1.0, 0.0, 1.0); glClearColor(i, 1.0, 0.0, 1.0);
...@@ -190,8 +196,8 @@ void SurfacelessGlRenderer::RenderFrame() { ...@@ -190,8 +196,8 @@ void SurfacelessGlRenderer::RenderFrame() {
// We know at least the primary plane can be scanned out. // We know at least the primary plane can be scanned out.
overlay_list.back().overlay_handled = true; overlay_list.back().overlay_handled = true;
} }
if (overlay_buffer_[0]) { if (overlay_buffers_[0]) {
overlay_rect = gfx::Rect(overlay_buffer_[0]->size()); overlay_rect = gfx::Rect(overlay_buffers_[0]->size());
float steps_num = 5.0f; float steps_num = 5.0f;
float stepped_fraction = float stepped_fraction =
...@@ -227,9 +233,9 @@ void SurfacelessGlRenderer::RenderFrame() { ...@@ -227,9 +233,9 @@ void SurfacelessGlRenderer::RenderFrame() {
primary_plane_rect_, gfx::RectF(0, 0, 1, 1), false); primary_plane_rect_, gfx::RectF(0, 0, 1, 1), false);
} }
if (overlay_buffer_[0] && overlay_list.back().overlay_handled) { if (overlay_buffers_[0] && overlay_list.back().overlay_handled) {
surface_->ScheduleOverlayPlane(1, gfx::OVERLAY_TRANSFORM_NONE, surface_->ScheduleOverlayPlane(1, gfx::OVERLAY_TRANSFORM_NONE,
overlay_buffer_[back_buffer_]->image(), overlay_buffers_[back_buffer_]->image(),
overlay_rect, gfx::RectF(0, 0, 1, 1), false); overlay_rect, gfx::RectF(0, 0, 1, 1), false);
} }
...@@ -243,7 +249,7 @@ void SurfacelessGlRenderer::RenderFrame() { ...@@ -243,7 +249,7 @@ void SurfacelessGlRenderer::RenderFrame() {
void SurfacelessGlRenderer::PostRenderFrameTask(gfx::SwapResult result) { void SurfacelessGlRenderer::PostRenderFrameTask(gfx::SwapResult result) {
switch (result) { switch (result) {
case gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS: case gfx::SwapResult::SWAP_NAK_RECREATE_BUFFERS:
for (size_t i = 0; i < arraysize(buffers_); ++i) { for (size_t i = 0; i < base::size(buffers_); ++i) {
buffers_[i].reset(new BufferWrapper()); buffers_[i].reset(new BufferWrapper());
if (!buffers_[i]->Initialize(widget_, primary_plane_rect_.size())) if (!buffers_[i]->Initialize(widget_, primary_plane_rect_.size()))
LOG(FATAL) << "Failed to recreate buffer"; LOG(FATAL) << "Failed to recreate buffer";
......
...@@ -56,7 +56,7 @@ class SurfacelessGlRenderer : public RendererBase { ...@@ -56,7 +56,7 @@ class SurfacelessGlRenderer : public RendererBase {
std::unique_ptr<BufferWrapper> buffers_[2]; std::unique_ptr<BufferWrapper> buffers_[2];
std::unique_ptr<BufferWrapper> overlay_buffer_[2]; std::unique_ptr<BufferWrapper> overlay_buffers_[2];
bool disable_primary_plane_ = false; bool disable_primary_plane_ = false;
gfx::Rect primary_plane_rect_; gfx::Rect primary_plane_rect_;
......
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