blob: 291edb3de12c4959201fa50a90a08837a0959743 [file] [log] [blame]
//
// Copyright (c) 2002-2013 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.
//
// Fence.h: Defines the gl::Fence class, which supports the GL_NV_fence extension.
#ifndef LIBGLESV2_FENCE_H_
#define LIBGLESV2_FENCE_H_
#include "common/angleutils.h"
#include "common/RefCountObject.h"
namespace rx
{
class Renderer;
class FenceImpl;
}
namespace gl
{
class FenceNV
{
public:
explicit FenceNV(rx::Renderer *renderer);
virtual ~FenceNV();
GLboolean isFence() const;
void setFence(GLenum condition);
GLboolean testFence();
void finishFence();
GLint getFencei(GLenum pname);
GLboolean getStatus() const { return mStatus; }
GLuint getCondition() const { return mCondition; }
private:
DISALLOW_COPY_AND_ASSIGN(FenceNV);
rx::FenceImpl *mFence;
GLboolean mStatus;
GLenum mCondition;
};
class FenceSync : public RefCountObject
{
public:
explicit FenceSync(rx::Renderer *renderer, GLuint id);
virtual ~FenceSync();
void set(GLenum condition);
GLenum clientWait(GLbitfield flags, GLuint64 timeout);
void serverWait();
GLenum getStatus() const;
GLuint getCondition() const { return mCondition; }
private:
DISALLOW_COPY_AND_ASSIGN(FenceSync);
rx::FenceImpl *mFence;
LONGLONG mCounterFrequency;
GLenum mCondition;
};
}
#endif // LIBGLESV2_FENCE_H_