1 // 2 // Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // Fence.h: Defines the gl::Fence class, which supports the GL_NV_fence extension. 8 9 #ifndef LIBGLESV2_FENCE_H_ 10 #define LIBGLESV2_FENCE_H_ 11 12 #include "common/angleutils.h" 13 #include "common/RefCountObject.h" 14 15 namespace rx 16 { 17 class Renderer; 18 class FenceImpl; 19 } 20 21 namespace gl 22 { 23 24 class FenceNV 25 { 26 public: 27 explicit FenceNV(rx::Renderer *renderer); 28 virtual ~FenceNV(); 29 30 GLboolean isFence() const; 31 void setFence(GLenum condition); 32 GLboolean testFence(); 33 void finishFence(); 34 GLint getFencei(GLenum pname); 35 getStatus()36 GLboolean getStatus() const { return mStatus; } getCondition()37 GLuint getCondition() const { return mCondition; } 38 39 private: 40 DISALLOW_COPY_AND_ASSIGN(FenceNV); 41 42 rx::FenceImpl *mFence; 43 44 GLboolean mStatus; 45 GLenum mCondition; 46 }; 47 48 class FenceSync : public RefCountObject 49 { 50 public: 51 explicit FenceSync(rx::Renderer *renderer, GLuint id); 52 virtual ~FenceSync(); 53 54 void set(GLenum condition); 55 GLenum clientWait(GLbitfield flags, GLuint64 timeout); 56 void serverWait(); 57 GLenum getStatus() const; 58 getCondition()59 GLuint getCondition() const { return mCondition; } 60 61 private: 62 DISALLOW_COPY_AND_ASSIGN(FenceSync); 63 64 rx::FenceImpl *mFence; 65 LONGLONG mCounterFrequency; 66 67 GLenum mCondition; 68 }; 69 70 } 71 72 #endif // LIBGLESV2_FENCE_H_ 73