#include "ShaderScene.h" #include "ShaderManager.h" #include "Shader_IndexHeader.h" #include "Shader_Headers.h" CShaderManager::CShaderManager() { m_lstShaders.clear(); m_iShadersNum = 0; } CShaderManager::~CShaderManager() { if((m_iShadersNum >0) && (m_lstShaders.size() > 0)) { int i; for( i = 0; i < m_lstShaders.size(); i++ ) { if(m_lstShaders[i] != NULL) { delete m_lstShaders[i]; m_lstShaders[i] = NULL; } } m_lstShaders.clear(); m_iShadersNum = 0; } } void CShaderManager::Apply(int iShaderIndex) { if((iShaderIndex >= 0) && (iShaderIndex < m_iShadersNum)) { if(m_lstShaders[iShaderIndex] != NULL) { m_lstShaders[iShaderIndex]->Apply(); } } } void CShaderManager::UnApply(int iShaderIndex) { if((iShaderIndex >= 0) && (iShaderIndex < m_iShadersNum)) { if(m_lstShaders[iShaderIndex] != NULL) { m_lstShaders[iShaderIndex]->UnApply(); } } } void CShaderManager::DeleteAllShader() { if((m_iShadersNum >0) && (m_lstShaders.size() > 0)) { int i; for( i = 0; i < m_lstShaders.size(); i++ ) { if(m_lstShaders[i] != NULL) { delete m_lstShaders[i]; m_lstShaders[i] = NULL; } } m_lstShaders.clear(); m_iShadersNum = 0; } } CShaderScene *CShaderManager::GetShaderPtr(char *strShader) { if((strShader != NULL) && (strlen(strShader) > 1)) { int i; for( i = 0; i < m_lstShaders.size() ; i++ ) { if(m_lstShaders[i] != NULL) { if(strcmp(strShader,m_lstShaders[i]->GetShaderName()) == 0) return m_lstShaders[i]; } } if(LoadShader(strShader)) return m_lstShaders[(m_lstShaders.size() - 1)]; else return NULL; } return NULL; } int CShaderManager::GetShader(char *strShader) { if((strShader != NULL) && (strlen(strShader) > 1)) { int i; for( i = 0; i < m_lstShaders.size() ; i++ ) { if(m_lstShaders[i] != NULL) { if(strcmp(strShader,m_lstShaders[i]->GetShaderName()) == 0) return i; } } if(LoadShader(strShader)) return (m_lstShaders.size() - 1); else return -1; } return -1; } bool CShaderManager::LoadShader(char *strShader) { int iShaderId = atoi(strShader); if(iShaderId >= SHADER_ID_NUM) return false; VOID *pNewNode = NULL; switch(iShaderId) { case SHADER_ID_BUMPDIFFSPEC: pNewNode = new CShader_BumpSpec; ((CShader_BumpSpec *)pNewNode)->Create(strShader); m_lstShaders.push_back((CShader_BumpSpec *)pNewNode); m_iShadersNum = m_lstShaders.size(); break; case SHADER_ID_REFLECTION: MessageBox(NULL,"°³¹ßÁßÀÎ ½¦ÀÌ´õ ÀÔ´Ï´Ù.","error",MB_OK); return false; break; case SHADER_ID_DEPTHOFFIELD: MessageBox(NULL,"°³¹ßÁßÀÎ ½¦ÀÌ´õ ÀÔ´Ï´Ù.","error",MB_OK); return false; break; case SHADER_ID_GLARE: pNewNode = new CShader_Glare; ((CShader_Glare *)pNewNode)->Create(strShader); m_lstShaders.push_back((CShader_Glare *)pNewNode); m_iShadersNum = m_lstShaders.size(); //MessageBox(NULL,"°³¹ßÁßÀÎ ½¦ÀÌ´õ ÀÔ´Ï´Ù.","error",MB_OK); //return false; break; case SHADER_ID_SELFSHADOW: MessageBox(NULL,"°³¹ßÁßÀÎ ½¦ÀÌ´õ ÀÔ´Ï´Ù.","error",MB_OK); return false; break; case SHADER_ID_RAIN: pNewNode = new CShader_Rain; ((CShader_Rain *)pNewNode)->Create(strShader); m_lstShaders.push_back((CShader_Rain *)pNewNode); m_iShadersNum = m_lstShaders.size(); break; default: MessageBox(NULL,"°³¹ßÁßÀÎ ½¦ÀÌ´õ ÀÔ´Ï´Ù.","error",MB_OK); return false; break; }; return true; } void CShaderManager::Init() { if((m_iShadersNum >0) && (m_lstShaders.size() > 0)) { int i; for( i = 0; i < m_lstShaders.size(); i++ ) { if(m_lstShaders[i] != NULL) { delete m_lstShaders[i]; m_lstShaders[i] = NULL; } } m_lstShaders.clear(); m_iShadersNum = 0; } m_lstShaders.clear(); m_iShadersNum = 0; }