blob: 75e4c30e1acdd3084be47467e8dd75d1c986cf5e [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrGLBuffer_DEFINED
#define GrGLBuffer_DEFINED
#include "include/gpu/gl/GrGLTypes.h"
#include "src/gpu/GrGpuBuffer.h"
class GrGLGpu;
class GrGLCaps;
class GrGLBuffer : public GrGpuBuffer {
public:
static sk_sp<GrGLBuffer> Make(GrGLGpu*, size_t size, GrGpuBufferType intendedType,
GrAccessPattern, const void* data = nullptr);
~GrGLBuffer() override {
// either release or abandon should have been called by the owner of this object.
SkASSERT(0 == fBufferID);
}
GrGLuint bufferID() const { return fBufferID; }
/**
* Returns the actual size of the underlying GL buffer object. In certain cases we may make this
* smaller than the size reported by GrGpuBuffer.
*/
size_t glSizeInBytes() const { return fGLSizeInBytes; }
void setHasAttachedToTexture() { fHasAttachedToTexture = true; }
bool hasAttachedToTexture() const { return fHasAttachedToTexture; }
protected:
GrGLBuffer(GrGLGpu*, size_t size, GrGpuBufferType intendedType, GrAccessPattern,
const void* data);
void onAbandon() override;
void onRelease() override;
void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
const SkString& dumpName) const override;
private:
GrGLGpu* glGpu() const;
const GrGLCaps& glCaps() const;
void onMap() override;
void onUnmap() override;
bool onUpdateData(const void* src, size_t srcSizeInBytes) override;
#ifdef SK_DEBUG
void validate() const;
#endif
GrGpuBufferType fIntendedType;
GrGLuint fBufferID;
GrGLenum fUsage;
size_t fGLSizeInBytes;
bool fHasAttachedToTexture;
using INHERITED = GrGpuBuffer;
};
#endif