Hash :
e703c606
Author :
Date :
2018-02-20T10:21:48
Add gl::RenderbufferState shared state helper. This shared state will be read-only visible in the RenderbufferImpl class. It mirrors existing structs for Textures, Buffers, and other classes. It allows the implementation class to have a read-only view as to the current GL state of an object. This will be useful to the Vulkan back-end, which would like to know the current Renderbuffer state before having to redefine the storage. If the current parameters match, it might not have to redefine the storage at all. The solution involves passing around the gl::RenderbufferState through various factory methods. Also name the Renderbuffer implementation pointer consistently and make it use std::unique_ptr. Bug: angleproject:2347 Change-Id: Ied6e0358e24e74a7fedbe4aea692edee909b5838 Reviewed-on: https://chromium-review.googlesource.com/922457 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
//
// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// RenderbufferD3d.h: Defines the RenderbufferD3D class which implements RenderbufferImpl.
#ifndef LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_
#define LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_
#include "angle_gl.h"
#include "common/angleutils.h"
#include "libANGLE/renderer/RenderbufferImpl.h"
namespace rx
{
class EGLImageD3D;
class RendererD3D;
class RenderTargetD3D;
class SwapChainD3D;
class RenderbufferD3D : public RenderbufferImpl
{
public:
RenderbufferD3D(const gl::RenderbufferState &state, RendererD3D *renderer);
~RenderbufferD3D() override;
gl::Error onDestroy(const gl::Context *context) override;
gl::Error setStorage(const gl::Context *context,
GLenum internalformat,
size_t width,
size_t height) override;
gl::Error setStorageMultisample(const gl::Context *context,
size_t samples,
GLenum internalformat,
size_t width,
size_t height) override;
gl::Error setStorageEGLImageTarget(const gl::Context *context, egl::Image *image) override;
gl::Error getRenderTarget(const gl::Context *context, RenderTargetD3D **outRenderTarget);
gl::Error getAttachmentRenderTarget(const gl::Context *context,
GLenum binding,
const gl::ImageIndex &imageIndex,
FramebufferAttachmentRenderTarget **rtOut) override;
gl::Error initializeContents(const gl::Context *context,
const gl::ImageIndex &imageIndex) override;
private:
void deleteRenderTarget(const gl::Context *context);
RendererD3D *mRenderer;
RenderTargetD3D *mRenderTarget;
EGLImageD3D *mImage;
};
}
#endif // LIBANGLE_RENDERER_D3D_RENDERBUFFERD3D_H_