/********************************************************************/ /* Copyright (c) 2017 System fugen G.K. and Yuzi Mizuno */ /* All rights reserved. */ /********************************************************************/ #include "MGCLStdAfx.h" #include "mg/Ofstream.h" #include "mg/Ifstream.h" #include "mg/DNameControl.h" #include "mgGL/OpenGLView.h" #include "mgGL/VBO.h" #if defined(_DEBUG) #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif MGDNameControl::MGDNameControl():m_nextName(OpenGLStartDisplayName()){;} ///Get the singleton instance of the MGDNameControl. MGDNameControl& getDNameControlInstance(){ static MGDNameControl m_displayName; return m_displayName; } ///Get mgVBO* from the map. ///Null will be returned when dlname is not registered. mgVBO* MGDNameControl::VBO_from_dlistName(unsigned dlname){ Dlist2VBOMap& d2g=m_dlist2VBOMap; Dlist2VBOMap::iterator i, iend=d2g.end(); i=d2g.find(dlname); if(i!=iend){ mgVBO* vbo=i->second; return vbo; } return 0; } MGAttribedGel* MGDNameControl::Gelpointer_from_dlistName(unsigned dlname){ Dlist2VBOMap& d2g=m_dlist2VBOMap; Dlist2VBOMap::iterator i, iend=d2g.end(); i=d2g.find(dlname); if(i!=iend){ mgVBO* vbo=i->second; return vbo->gel(); } return 0; } ///Insert vbo to dlist map. void MGDNameControl::insertVBO2DlistMap(unsigned dlistName,mgVBO* vbo){ m_dlist2VBOMap.insert(Dlist2VBOMapPair(dlistName,vbo)); } ///Insert gel to dlist map. Function's return value is the mgVBO generated. mgVBO* MGDNameControl::insertDlistMap(const MGAttribedGel* gel){ MGAttribedGel* gel2=const_cast(gel); mgVBO* vbo=getNewName(gel); return vbo; } mgVBO* MGDNameControl::deleteDlistMap(unsigned dlname){ Dlist2VBOMap& d2g=m_dlist2VBOMap; Dlist2VBOMap::iterator i, iend=d2g.end(); mgVBO* vbo=0; i=d2g.find(dlname); if(i!=iend){ vbo=i->second; MGAttribedGel* gel=vbo->gel(); if(gel){ gel->m_dlistName.release(); } d2g.erase(i); } return vbo; } mgVBO* MGDNameControl::deleteDlistMap(const MGAttribedGel* gel){ const mgVBO* vbo=gel->m_dlistName.get(); if(!vbo) return 0; unsigned nm=vbo->getDName(); return deleteDlistMap(nm); } ///Get the next available name inputing vbo ///The name will be returned. unsigned MGDNameControl::getNewNamebyVBO(mgVBO* vbo){ unsigned name=m_nextName; m_nextName++; insertVBO2DlistMap(name,vbo); return name; } ///Get the next available name. mgVBO* MGDNameControl::getNewName(const MGAttribedGel* gel){ mgVBO* vbo; if(gel==0){ vbo=new mgVBO(); }else{ vbo=new mgVBO(*gel); } unsigned name=getNewNamebyVBO(vbo); vbo->setDlName(name); return vbo; }