//------------------------------------------------------------- // GLSLProgram::loadShader() load shader //------------------------------------------------------------- void ARBProgram::loadShader(int mode) { if ((mode & S2D)>0) { if ((mode & SMIP)>0) loadFragmentShader(mipFShader2D); else loadFragmentShader(volumeFShader2D); } else if((mode & S3D)>0){ if ((mode & SMIP)>0) loadFragmentShader(mipFShader3D); else loadFragmentShader(volumeFShader3D); } else loadFragmentShader(htFShader1D); }
bool GLSLShader::loadShaders(const std::string& vs, const std::string& ps, const std::string& gs, GLint inputGeometryPrimitive,GLint outputGeometryPrimitive, int nb_max_vertices) { m_nameVS = vs; m_nameFS = ps; m_nameGS = gs; std::string vss = findFile(vs); if(!loadVertexShader(vss)) return false; std::string pss = findFile(ps); if(!loadFragmentShader(pss)) return false; std::string gss = findFile(gs); bool geomShaderLoaded = loadGeometryShader(gss); if (!geomShaderLoaded) { CGoGNerr << "Error while loading geometry shader" << CGoGNendl; } if(!create(inputGeometryPrimitive,outputGeometryPrimitive,nb_max_vertices)) { CGoGNout << "Unable to create the shaders !" << CGoGNendl; return false; } CGoGNout << "Shaders loaded (" << vs << "," << ps << "," << gs <<")" << CGoGNendl; return true; }
void Shader::loadFromFile(const std::string& vertexShaderPath, const std::string& fragmentShaderPath) { std::string vertex = loadFile(vertexShaderPath); std::string fragment = loadFile(fragmentShaderPath); loadVertexShader(vertex); loadFragmentShader(fragment); }
void CGraphicsResourceManager::handleShaderEvent(ResourceId id, EListenerEvent event, IResourceManager* resourceManager) { ResourceId vertex; ResourceId tessControl; ResourceId tessEval; ResourceId geometry; ResourceId fragment; switch (event) { case EListenerEvent::Create: // TODO Replace assert with log statement and global error handler assert(m_shaderPrograms.count(id) == 0 && "Shader id already exists"); // Load shader source ids if (!resourceManager->getShader(id, vertex, tessControl, tessEval, geometry, fragment)) { // TODO Replace assert with log statement and global error handler assert(false && "Failed to access shader resource"); } // Load shader objects from source if (!loadVertexShader(vertex, resourceManager) || !loadTessControlShader(tessControl, resourceManager) || !loadTessEvalShader(tessEval, resourceManager) || !loadGeometryShader(geometry, resourceManager) || !loadFragmentShader(fragment, resourceManager)) { // TODO Log error return; } // Add create shader program m_shaderPrograms[id] = std::move(std::unique_ptr<CShaderProgram>(new CShaderProgram( getVertexShaderObject(vertex), getTessControlShaderObject(tessControl), getTessEvalShaderObject(tessEval), getGeometryShaderObject(geometry), getFragmentShaderObject(fragment)))); break; case EListenerEvent::Change: // TODO Implement case EListenerEvent::Delete: // TODO Keep shader? break; default: // TODO Log error on unknown event? break; } }
bool GLSLShader::loadShaders(const std::string& vs, const std::string& ps) { m_nameVS = vs; m_nameFS = ps; std::string vss = findFile(vs); if(!loadVertexShader(vss)) return false; std::string pss = findFile(ps); if(!loadFragmentShader(pss)) return false; if(!create()) { CGoGNout << "Unable to create the shaders !" << CGoGNendl; return false; } CGoGNout << "Shaders loaded (" << vs << "," << ps << ")" << CGoGNendl; return true; }
bool Shader::loadShaderPairByName(const char* name) { const unsigned int length = strlen("resources/shaders/") + strlen(name) + 3; char* vsName = new char[length]; char* fsName = new char[length]; sprintf(vsName, "resources/shaders/%s%s", name, ".vs"); sprintf(fsName, "resources/shaders/%s%s", name, ".fs"); printf("Status for shader \"%s\": ", name); if(loadVertexShader(vsName) && loadFragmentShader(fsName)) { delete[] vsName; delete[] fsName; return true; } else { delete[] vsName; delete[] fsName; return false; } }
/** * @brief Loads a fragment shader * * @param fragmentShader * Fragment program */ void Shader::loadFragmentShaderFromFile(const std::string &fragmentShader) { loadFragmentShader(loadFile(fragmentShader)); }
void Shader::loadFromMemory(const std::string& vertex, const std::string& fragment) { loadVertexShader(vertex); loadFragmentShader(fragment); }
Shader::Shader(const char * const vertexFilename, const char * const fragmentFilename) { loadVertexShader(vertexFilename); loadFragmentShader(fragmentFilename); }