blob: 391fbb3f072bb187557ccc3a65698c9f144c9633 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_VR_TESTAPP_GL_RENDERER_H_
#define CHROME_BROWSER_VR_TESTAPP_GL_RENDERER_H_
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/vr/base_graphics_delegate.h"
#include "ui/gfx/swap_result.h"
namespace gl {
class GLSurface;
} // namespace gl
namespace vr {
class VrTestContext;
// This class manages an OpenGL context and initiates per-frame rendering.
class GlRenderer : public BaseGraphicsDelegate {
public:
GlRenderer();
~GlRenderer() override;
// GraphicsDelegate implementation.
bool Initialize(const scoped_refptr<gl::GLSurface>& surface) override;
FovRectangles GetRecommendedFovs() override;
float GetZNear() override;
RenderInfo GetRenderInfo(FrameType frame_type,
const gfx::Transform& head_pose) override;
RenderInfo GetOptimizedRenderInfoForFovs(const FovRectangles& fovs) override;
void InitializeBuffers() override;
void PrepareBufferForWebXr() override;
void PrepareBufferForWebXrOverlayElements() override;
void PrepareBufferForContentQuadLayer(
const gfx::Transform& quad_transform) override;
void PrepareBufferForBrowserUi() override;
void OnFinishedDrawingBuffer() override;
void GetWebXrDrawParams(int* texture_id, Transform* uv_transform) override;
bool IsContentQuadReady() override;
void ResumeContentRendering() override;
void BufferBoundsChanged(const gfx::Size& content_buffer_size,
const gfx::Size& overlay_buffer_size) override;
void GetContentQuadDrawParams(Transform* uv_transform,
float* border_x,
float* border_y) override;
int GetContentBufferWidth() override;
void SetFrameDumpFilepathBase(std::string& filepath_base) override;
void RenderFrame();
void PostRenderFrameTask();
void set_vr_context(VrTestContext* vr_context) { vr_context_ = vr_context; }
private:
VrTestContext* vr_context_;
base::WeakPtrFactory<GlRenderer> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(GlRenderer);
};
} // namespace vr
#endif // CHROME_BROWSER_VR_TESTAPP_GL_RENDERER_H_