blob: 6e13abc65ba1dfe0845aabec8337eb7b3883b2cd [file] [log] [blame]
Aldo Culquicondor9152d532018-09-25 14:55:141// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/vr/cmd_buffer_surface_provider.h"
6
Hans Wennborg1790e6b2020-04-24 19:10:337#include "base/check_op.h"
Aldo Culquicondor9152d532018-09-25 14:55:148#include "gpu/command_buffer/client/gles2_implementation.h"
9#include "gpu/command_buffer/client/gles2_lib.h"
10#include "gpu/skia_bindings/gl_bindings_skia_cmd_buffer.h"
11#include "third_party/skia/include/core/SkCanvas.h"
12#include "third_party/skia/include/core/SkSurface.h"
13#include "third_party/skia/include/gpu/GrBackendSurface.h"
Robert Phillipsdbb0b7d2020-07-29 16:07:4414#include "third_party/skia/include/gpu/GrDirectContext.h"
Aldo Culquicondor9152d532018-09-25 14:55:1415#include "third_party/skia/include/gpu/gl/GrGLInterface.h"
16#include "ui/gfx/geometry/size.h"
17
18namespace vr {
19
20CmdBufferSurfaceProvider::CmdBufferSurfaceProvider() {
21 auto* gles2_implementation =
22 static_cast<gpu::gles2::GLES2Implementation*>(gles2::GetGLContext());
23 DCHECK(gles2_implementation);
24 sk_sp<const GrGLInterface> gr_interface =
25 skia_bindings::CreateGLES2InterfaceBindings(gles2_implementation,
26 gles2_implementation);
Robert Phillipsdbb0b7d2020-07-29 16:07:4427 gr_context_ = GrDirectContext::MakeGL(std::move(gr_interface));
Aldo Culquicondor9152d532018-09-25 14:55:1428 DCHECK(gr_context_);
29 glGetIntegerv(GL_FRAMEBUFFER_BINDING, &main_fbo_);
30}
31
32CmdBufferSurfaceProvider::~CmdBufferSurfaceProvider() = default;
33
34sk_sp<SkSurface> CmdBufferSurfaceProvider::MakeSurface(const gfx::Size& size) {
35 return SkSurface::MakeRenderTarget(
36 gr_context_.get(), SkBudgeted::kNo,
37 SkImageInfo::MakeN32Premul(size.width(), size.height()), 0,
38 kTopLeft_GrSurfaceOrigin, nullptr);
39}
40
41GLuint CmdBufferSurfaceProvider::FlushSurface(SkSurface* surface,
42 GLuint reuse_texture_id) {
43 surface->getCanvas()->flush();
44 GrBackendTexture backend_texture =
45 surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess);
46 DCHECK(backend_texture.isValid());
47 GrGLTextureInfo info;
48 bool result = backend_texture.getGLTextureInfo(&info);
49 DCHECK(result);
50 GLuint texture_id = info.fID;
51 DCHECK_NE(texture_id, 0u);
Adlai Hollerabb78ea2020-09-16 11:27:57