diff --git a/uppsrc/GLDraw/GLDraw.cpp b/uppsrc/GLDraw/GLDraw.cpp index e90da8a77..31824e1e1 100644 --- a/uppsrc/GLDraw/GLDraw.cpp +++ b/uppsrc/GLDraw/GLDraw.cpp @@ -30,7 +30,7 @@ void ImageGLData::Init(const Image& img) // SysImageRealized(img); // ? } -static LRUCache sTextureCache; +static LRUCache > sTextureCache; static bool sReset; ImageGLData::~ImageGLData() @@ -54,11 +54,12 @@ void GLDraw::ResetCache() sReset = false; } -struct ImageGLDataMaker : LRUCache::Maker { +struct ImageGLDataMaker : LRUCache >::Maker { Image img; + uint64 context; - virtual int64 Key() const { return img.GetSerialId(); } - virtual int Make(ImageGLData& object) const { object.Init(img); return img.GetLength(); } + virtual Tuple2 Key() const { return MakeTuple(img.GetSerialId(), context); } + virtual int Make(ImageGLData& object) const { object.Init(img); return img.GetLength(); } }; @@ -71,6 +72,7 @@ void GLDraw::PutImage(Point p, const Image& img, const Rect& src) LLOG("SysImage cache pixels " << sTextureCache.GetSize() << ", count " << sTextureCache.GetCount()); ImageGLDataMaker m; m.img = img; + m.context = context; ImageGLData& sd = sTextureCache.Get(m); glEnable(GL_TEXTURE_2D); @@ -143,8 +145,10 @@ void GLDraw::PutRect(const Rect& r, Color color) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } -void GLDraw::InitGL(Size sz) +void GLDraw::InitGL(Size sz, uint64 context_) { + context = context_; + SDraw::Init(sz); glEnable(GL_BLEND); diff --git a/uppsrc/GLDraw/GLDraw.h b/uppsrc/GLDraw/GLDraw.h index a203f645d..99c14482d 100644 --- a/uppsrc/GLDraw/GLDraw.h +++ b/uppsrc/GLDraw/GLDraw.h @@ -6,16 +6,21 @@ namespace Upp { -struct GLDraw : SDraw { +class GLDraw : SDraw { void SetColor(Color c); + uint64 context; + +public: virtual void PutImage(Point p, const Image& m, const Rect& src); virtual void PutRect(const Rect& r, Color color); - void InitGL(Size sz); + void InitGL(Size sz, uint64 context = 0); static void ClearCache(); static void ResetCache(); + + GLDraw() { context = 0; } }; };