1 // Copyright 2017 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/test/gl_test_environment.h"
6 
7 #include "ui/gl/gl_context.h"
8 #include "ui/gl/gl_surface.h"
9 #include "ui/gl/gl_version_info.h"
10 #include "ui/gl/init/gl_factory.h"
11 #include "ui/gl/test/gl_test_helper.h"
12 
13 namespace vr {
14 
GlTestEnvironment(const gfx::Size frame_buffer_size)15 GlTestEnvironment::GlTestEnvironment(const gfx::Size frame_buffer_size) {
16   // Setup offscreen GL context.
17   surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size());
18   context_ = gl::init::CreateGLContext(nullptr, surface_.get(),
19                                        gl::GLContextAttribs());
20   context_->MakeCurrent(surface_.get());
21 
22   if (gl::GLContext::GetCurrent()->GetVersionInfo()->IsAtLeastGL(3, 3)) {
23     // To avoid glGetVertexAttribiv(0, ...) failing.
24     glGenVertexArraysOES(1, &vao_);
25     glBindVertexArrayOES(vao_);
26   }
27 
28   frame_buffer_ = gl::GLTestHelper::SetupFramebuffer(
29       frame_buffer_size.width(), frame_buffer_size.height());
30   glBindFramebufferEXT(GL_FRAMEBUFFER, frame_buffer_);
31 }
32 
~GlTestEnvironment()33 GlTestEnvironment::~GlTestEnvironment() {
34   glDeleteFramebuffersEXT(1, &frame_buffer_);
35   if (vao_) {
36     glDeleteVertexArraysOES(1, &vao_);
37   }
38   context_->ReleaseCurrent(surface_.get());
39   context_ = nullptr;
40   surface_ = nullptr;
41 }
42 
GetFrameBufferForTesting()43 GLuint GlTestEnvironment::GetFrameBufferForTesting() {
44   return frame_buffer_;
45 }
46 
CreateTexture(GLenum target)47 GLuint GlTestEnvironment::CreateTexture(GLenum target) {
48   return gl::GLTestHelper::CreateTexture(target);
49 }
50 
51 }  // namespace vr
52