bool CgGLShader::initialize(const ResourcePtr& resource, const ShaderDesc& desc) { CGprofile profile; mDesc = desc; switch (desc.type) { case ukn::ST_FragmentShader: profile = cgGLGetLatestProfile(CG_GL_FRAGMENT); break; case ukn::ST_VertexShader: profile = cgGLGetLatestProfile(CG_GL_VERTEX); break; case ukn::ST_GeometryShader: profile = cgGLGetLatestProfile(CG_GL_GEOMETRY); break; } StreamPtr stream = resource->readIntoMemory(); if(!stream) return false; MemoryStream* memStream = ((MemoryStream*)stream.get()); std::string content(memStream->data(), memStream->data() + memStream->size()); mProgram = cgCreateProgram(mContext, CG_SOURCE, content.c_str(), profile, desc.entry.c_str(), cgGLGetOptimalOptions(profile)); if(_check_error(mContext)) { cgGLLoadProgram(mProgram); mProfile = profile; return _check_error(mContext); } return false;; }
bool CgShaderProgramGL::compileCg( const io::stringc &SourceCodeString, const io::stringc &EntryPoint, const c8** CompilerOptions) { if (!createProgram(SourceCodeString, EntryPoint, CompilerOptions ? CompilerOptions : cgGLGetOptimalOptions(cgProfile_))) return false; cgGLSetOptimalOptions(cgProfile_); cgGLLoadProgram(cgProgram_); return !CgShaderContext::checkForError("shader program loading"); }