OCC22108 Cutting plane unpredictable behaviour in V3d_View
[occt.git] / src / OpenGl / OpenGl_ResourceCleaner.hxx
CommitLineData
161c4476
K
1// File: OpenGl_ResourceCleaner.hxx
2// Created: 18.03.11 9:30:00
3// Author: Anton POLETAEV
4
5#ifndef _OPENGL_RESOURCECLEANER_H
6#define _OPENGL_RESOURCECLEANER_H
7
8#include <OpenGl_tgl_all.hxx>
9#include <NCollection_Queue.hxx>
10#include <NCollection_List.hxx>
11#include <NCollection_Map.hxx>
12#include <NCollection_DataMap.hxx>
13#include <OpenGl_Resource.hxx>
14
15class OpenGl_Resource;
16class Handle_OpenGl_Resource;
17
18typedef NCollection_Queue<Handle_OpenGl_Resource> QueueOfResources;
19typedef NCollection_DataMap<GLCONTEXT, QueueOfResources> DataMapOfContextsResources;
20typedef NCollection_Map<GLCONTEXT> MapOfContexts;
21
22//! OpenGl_ResourceCleaner should be used to clean OpenGl memory resources;
23//! The reason is that the resources might be shared between the contexts and
24//! should be cleaned up only while suitable context is active;
25class OpenGl_ResourceCleaner
26{
27
28public:
29
30 //! Constructor
31 OpenGl_ResourceCleaner();
32
33 //! Destructor
34 virtual ~OpenGl_ResourceCleaner() { }
35
36 //! Append OpenGl context to the OpenGl_ResourceCleaner
37 //! control list.
38 void AppendContext(GLCONTEXT theContext, Standard_Boolean isShared);
39
40 //! Tell the OpenGl_ResourceCleaner to clean up the OpenGl memory resource
41 //! which has been created by the specified OpenGl context;
42 //! The context should be in the OpenGl_ResourceCleaner control list.
43 Standard_Boolean AddResource(GLCONTEXT theContext, Handle_OpenGl_Resource theResource);
44
45 //! Cancel clean procedure for all the resources added to the OpenGl_ResourceCleaner.
46 void Clear();
47
48 //! Cancel clean procedure for all the resources of the specific OpenGl context
49 //! which were added to the OpenGl_ResourceCleaner.
50 Standard_Boolean Clear(GLCONTEXT theContext);
51
52 //! Cancel clean procedure for all of the shared resources.
53 void ClearShared();
54
55 //! Clear the unused resources for active OpenGl context;
56 //! You should add the cleaner resources by AddResources method;
57 //! It is suggested to call this method right before the OpenGl
58 //! new frame drawing procedure starts.
59 void Cleanup();
60
61 //! Remove the OpenGl context from the OpenGl_ResourceCleaner control list.
62 void RemoveContext(GLCONTEXT theContext);
63
64 //! Get any of shared contexts from the OpenGl_ResourceCleaner list
65 //! to share resources with a new one
66 GLCONTEXT GetSharedContext() const;
67
68 //! Get the global instance of OpenGl_ResourceCleaner
69 static OpenGl_ResourceCleaner* GetInstance();
70
71private:
72
73 DataMapOfContextsResources myInstanceQueue; // map for queues of non-shared context's resources
74 QueueOfResources mySharedQueue; // queue of shared context's resources
75 MapOfContexts mySharedContexts; // the control list of shared contexts
76
77};
78
79#endif