18 AtomicAdjust::Pointer GraphicsStateGuardianBase::_gsg_list;
19 UpdateSeq GraphicsStateGuardianBase::_generated_shader_seq;
20 TypeHandle GraphicsStateGuardianBase::_type_handle;
33 if (gsg_list ==
nullptr) {
38 return gsg_list->_default_gsg;
48 if (gsg_list ==
nullptr) {
55 if (find(gsg_list->_gsgs.begin(), gsg_list->_gsgs.end(), default_gsg) == gsg_list->_gsgs.end()) {
57 nassert_raise(
"GSG not found or already destructed");
61 gsg_list->_default_gsg = default_gsg;
70 if (gsg_list ==
nullptr) {
75 return gsg_list->_gsgs.size();
85 nassertr(gsg_list !=
nullptr,
nullptr);
88 nassertr(n < gsg_list->_gsgs.size(),
nullptr);
89 return gsg_list->_gsgs[n];
99 if (gsg_list ==
nullptr) {
100 gsg_list =
new GSGList;
101 gsg_list->_default_gsg =
nullptr;
103 GSGList *orig_gsg_list = (GSGList *)
106 if (orig_gsg_list !=
nullptr) {
109 gsg_list = orig_gsg_list;
115 if (find(gsg_list->_gsgs.begin(), gsg_list->_gsgs.end(), gsg) != gsg_list->_gsgs.end()) {
120 gsg_list->_gsgs.push_back(gsg);
122 if (gsg_list->_default_gsg ==
nullptr) {
123 gsg_list->_default_gsg = gsg;
133 if (gsg_list ==
nullptr) {
140 GSGList::GSGs::iterator gi;
141 gi = find(gsg_list->_gsgs.begin(), gsg_list->_gsgs.end(), gsg);
142 if (gi == gsg_list->_gsgs.end()) {
147 gsg_list->_gsgs.erase(gi);
149 if (gsg_list->_default_gsg == gsg) {
150 if (!gsg_list->_gsgs.empty()) {
151 gsg_list->_default_gsg = *gsg_list->_gsgs.begin();
153 gsg_list->_default_gsg =
nullptr;