bool ShaderObject::TextWriter::operator()( ShaderObject const & p_shaderObject, TextFile & p_file ) { bool result = p_file.writeText( m_tabs + p_shaderObject.getStrType() + cuT( "\n" ) ) > 0 && p_file.writeText( m_tabs + cuT( "{\n" ) ) > 0; Path pathFile = p_file.getFilePath() / cuT( "Shaders" ); if ( !File::directoryExists( pathFile ) ) { File::directoryCreate( pathFile ); } bool hasFile = false; if ( result ) { Path file = p_shaderObject.getFile(); if ( !file.empty() ) { File::copyFile( file, pathFile ); String fileName = Path{ cuT( "Shaders" ) } / file.getFileName() + cuT( "." ) + file.getExtension(); string::replace( fileName, cuT( "\\" ), cuT( "/" ) ); result = p_file.writeText( m_tabs + cuT( "\tfile \"" ) + fileName + cuT( "\"\n" ) ) > 0; castor::TextWriter< ShaderObject >::checkError( result, "ShaderObject file" ); } } if ( hasFile ) { for ( auto it : p_shaderObject.getUniforms() ) { result = Uniform::TextWriter( m_tabs + cuT( "\t" ) )( it->getBaseUniform(), p_file ); } } if ( result ) { result = p_file.writeText( m_tabs + cuT( "}\n" ) ) > 0; } return result; }