blob: 0b066c358bbdc8ad7d0ed5d664ebd39da1091ef1 [file] [log] [blame]
/*
* Copyright 2020 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrGLFinishCallbacks_DEFINED
#define GrGLFinishCallbacks_DEFINED
#include "include/gpu/GrTypes.h"
#include "include/gpu/gl/GrGLTypes.h"
#include <list>
class GrGLGpu;
/**
* Maintains a list of callbacks to be called when work on the GPU is complete.
*/
class GrGLFinishCallbacks {
public:
GrGLFinishCallbacks(GrGLGpu* gpu);
~GrGLFinishCallbacks();
/**
* Call all the callbacks in the list. This will block until all work is done.
*
* @param doDelete delete the contained fence object.
*/
void callAll(bool doDelete);
/**
* Add a new callback to the list.
*
* @param finishedProc The function to call when GPU work is complete.
* @param finishedContext The context object to pass back to the callback.
*/
void add(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext);
/**
* Check if any GPU work is complete, and call the associated callbacks.
* This call is non-blocking.
*/
void check();
/**
* Returns true if the callback list is empty.
*/
bool empty() const { return fCallbacks.empty(); }
private:
struct FinishCallback {
GrGpuFinishedProc fCallback;
GrGpuFinishedContext fContext;
GrGLsync fFence;
};
GrGLGpu* fGpu;
std::list<FinishCallback> fCallbacks;
};
#endif // GrGLFinishCallbacks