Beispiel #1
0
 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");
}