blob: d6ec2cb5df31fb1b267cbf5258ab13ca735e7dd4 [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/ganesh/GrGpuBuffer.h"
class GrGLGpu;
class GrGLCaps;
class GrGLBuffer : public GrGpuBuffer {
public:
static sk_sp<GrGLBuffer> Make(GrGLGpu*,
size_t size,
GrGpuBufferType intendedType,
GrAccessPattern);
~GrGLBuffer() override {
// either release or abandon should have been called by the owner of this object.
SkASSERT(0 == fBufferID);
}
GrGLuint bufferID() const { return fBufferID; }
void setHasAttachedToTexture() { fHasAttachedToTexture = true; }
bool hasAttachedToTexture() const { return fHasAttachedToTexture; }
protected:
GrGLBuffer(GrGLGpu*,
size_t size,
GrGpuBufferType intendedType,
GrAccessPattern,
std::string_view label);
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(MapType) override;
void onUnmap(MapType) override;
bool onClearToZero() override;
bool onUpdateData(const void* src, size_t offset, size_t size, bool preserve) override;
void onSetLabel() override;
GrGpuBufferType fIntendedType;
GrGLuint fBufferID;
GrGLenum fUsage;
bool fHasAttachedToTexture;
using INHERITED = GrGpuBuffer;
};
#endif