コード例 #1
0
// Retrieve specified vertex shader
//-----------------------------------------------------------------------------
CPUTResult CPUTAssetLibraryDX11::GetVertexShader(
    const cString         &name,
    ID3D11Device          *pD3dDevice,
    const cString          &shaderMain,
    const cString          &shaderProfile,
    CPUTVertexShaderDX11 **ppVertexShader,
    bool                   nameIsFullPathAndFilename
)
{
    CPUTResult result = CPUT_SUCCESS;
    cString finalName;
    if( name.at(0) == '$' )
    {
        finalName = name;
    } else
    {
        // Resolve name to absolute path
        CPUTOSServices *pServices = CPUTOSServices::GetOSServices();
        pServices->ResolveAbsolutePathAndFilename( nameIsFullPathAndFilename? name : (mShaderDirectoryName + name), &finalName);
    }

    // see if the shader is already in the library
    void *pShader = FindVertexShader(finalName + shaderMain + shaderProfile, true);
    if(NULL!=pShader)
    {
        *ppVertexShader = (CPUTVertexShaderDX11*) pShader;
        (*ppVertexShader)->AddRef();
        return result;
    }
    *ppVertexShader = CPUTVertexShaderDX11::CreateVertexShader( finalName, pD3dDevice, shaderMain, shaderProfile );

    return result;
}
//==============================================================================
VertexShader * CGraphicsMgr::FindVertexShaderRaii (const std::wstring & name) {

    VertexShader * result = FindVertexShader(name);
    
    if (!result) {
        m_vertexShaders.push_back(VertexShader());
        result = &m_vertexShaders.back();
    }
    
    return result;

}
コード例 #3
0
CPUTResult CPUTAssetLibraryOGL::GetVertexShader(
    const std::vector<cString> &fileNames,
    const cString       &shaderMain,
    const cString       &shaderProfile,
    CPUTShaderOGL       **ppVertexShader,
    bool                nameIsFullPathAndFilename,
    CPUT_SHADER_MACRO   *pShaderMacros
)
{
    CPUTResult result = CPUT_SUCCESS;
    std::vector<cString> finalNames;
    cString libName;
    for(UINT i=0; i<fileNames.size(); i++)   
    {   
        cString name = fileNames[i];
        cString finalName;
        if( fileNames[i].at(0) == '%' )
        {
            // Consider moving slashes to some sub variable dependent from OS,
            // or even MACRO would be better in such situation.
            finalName = mSystemDirectoryName + _L("Shader/") + name.substr(1);  // TODO: Instead of having the Shader/ directory hardcoded here it could be set like the normal material directory. But then there would need to be a bunch new variables like SetSystemMaterialDirectory
        } else if( fileNames[i].at(0) == '$' )
        {
            finalName = fileNames[i];
        } else
        {
            CPUTFileSystem::ResolveAbsolutePathAndFilename( nameIsFullPathAndFilename? name : (mShaderDirectoryName + name), &finalName );
        }
        libName += finalName;
        finalNames.push_back(finalName);
    }
    // see if the shader is already in the library
    void *pShader = FindVertexShader(libName + shaderMain + shaderProfile, true);
    if(NULL!=pShader)
    {
        *ppVertexShader = (CPUTShaderOGL*)pShader;
        (*ppVertexShader)->AddRef();
        return result;
    }
    *ppVertexShader = CPUTShaderOGL::CreateShaderFromFiles( finalNames, GL_VERTEX_SHADER, CPUT_OGL::GLSL_VERSION, CPUT_OGL::DEFAULT_MACROS, pShaderMacros);

    return result;
}