/* * Copyright 2009, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: * Alexander von Gluck IV, kallisti5@unixzen.com */ #ifndef GALLIUMCONTEXT_H #define GALLIUMCONTEXT_H #include #include #include "pipe/p_compiler.h" #include "pipe/p_screen.h" #include "postprocess/filters.h" #include "hgl_context.h" #include "sw/hgl/hgl_sw_winsys.h" class BBitmap; class GalliumContext { public: GalliumContext(ulong options); ~GalliumContext(); void Lock(); void Unlock(); context_id CreateContext(HGLWinsysContext *wsContext); void DestroyContext(context_id contextID); context_id GetCurrentContext() { return fCurrentContext; }; status_t SetCurrentContext(bool set, context_id contextID); status_t SwapBuffers(context_id contextID); void Draw(context_id contextID, BRect updateRect); bool Validate(uint32 width, uint32 height); void Invalidate(uint32 width, uint32 height); private: status_t CreateDisplay(); void DestroyDisplay(); void Flush(); ulong fOptions; static int32 fDisplayRefCount; static hgl_display* fDisplay; // Context Management struct hgl_context* fContext[CONTEXT_MAX]; context_id fCurrentContext; mtx_t fMutex; }; #endif /* GALLIUMCONTEXT_H */