HRESULT CShaderManager::CreateShader(const SHADER_TYPE& eShader, const LPCTSTR pFileName) { CShader* pShader = FindShader(eShader); if(pShader) { return S_OK; } switch(eShader) { case SHADER_DEFAULT: pShader = new CDefaultShader; break; default: break; } if(FAILED(pShader->Init(pFileName))) { return E_FAIL; } m_mapShader.insert(map<SHADER_TYPE, CShader*>::value_type(eShader, pShader)); return S_OK; }
GLvoid CGLES3Context::CreateShaderObject(GLenum type, GLuint shaderId) { CShaderObj *pShader = FindShader(shaderId); if (pShader) { pShader->m_type = type; return; } pShader = new CShaderObj(shaderId, type); if (pShader) { if (type == GL_VERTEX_SHADER) { pShader->m_type = GL_VERTEX_SHADER; } else { pShader->m_type = GL_FRAGMENT_SHADER; } shaderMap.insert(std::make_pair(shaderId, pShader)); } else { Abort("Cannot allocate shader object\n"); } }
GLvoid CGLES3Context::DeleteShaderObject(GLuint shaderId) { CShaderObj *pShader = FindShader(shaderId); if (pShader) { shaderMap.erase(shaderId); delete (pShader); } }
GLvoid CGLES3Context::ApiAttachShader(GLuint program, GLuint shader) { CProgramObj *pProgram = FindProgram(program); CShaderObj *pShader = FindShader(shader); GLenum shaderType = pShader?pShader->m_type:GL_FRAGMENT_SHADER; if (shaderType == GL_FRAGMENT_SHADER) { pProgram->m_pFragment = pShader; } else { pProgram->m_pVertex = pShader; } CTX_ANALYZER_FUNC2(AttachShader, GLOutput, GL_OUT_BUF_SIZE, program, shader); }
void ResetFonts() { fontCount = 0; CFont *f; // hardcoded font fot "conchars" - uses different shader flags, plus different texture location f = gl_concharsFont = &fontArray[fontCount++]; f->Name = "conchars"; f->shader = FindShader("pics/conchars", SHADER_ALPHA); f->firstChar = 0; f->charWidth = 8; f->charHeight = 8; f->outWidth = 8; f->outHeight = 8; f->spacing = 0; // load other fonts gl_debugFont = FindFont("debug"); gl_consoleFont = FindFont("console"); }
GLvoid CGLES3Context::ApiDetachShader(GLuint program, GLuint shader) { CProgramObj *pProg = FindProgram(program); CShaderObj *pShader = FindShader(shader); if (!pProg || !pShader) return; if (pProg->m_pVertex == pShader) { pProg->m_pVertex = NULL; } else if (pProg->m_pFragment == pShader) { pProg->m_pFragment = NULL; } CTX_ANALYZER_FUNC2(DetachShader, GLOutput, GL_OUT_BUF_SIZE, program, shader); }
static void cBitmap(int argc, char **argv) { loadingFont->shader = FindShader(va("fonts/%s", argv[1]), SHADER_MAKEALPHA); }
GLvoid CGLES3Context::ApiCompileShader(GLuint shader) { CShaderObj *p = FindShader(shader); CompileShader(p); CTX_ANALYZER_FUNC1(CompileShader, GLOutput, GL_OUT_BUF_SIZE, shader); }