Par exemple renderer::FrameWriter
et renderer::FrameArchiver
.
je vais travailler sur celui-ci
Pourquoi auriez-vous besoin de faire ça ? Quelle serait l'intention de ces deux classes? Je suis juste curieux.
André : excellent !
Dorian : C'est juste une refactorisation. Le code d'écriture d'image ajoute beaucoup d'encombrement à l'implémentation de l'entité renderer::Frame
.
OK merci! :)
est-ce que quelqu'un a commencé à travailler dessus ? puis-je tenter le coup ?
Eh bien, il semble qu'André y soit déjà. André, tu travailles toujours dessus ?
Oui, désolé j'ai été occupé pendant le week-end mais je vais le faire !
Pourriez-vous fournir une classe shell pour cela? J'ai du mal à comprendre certaines parties du code et je ne trouve pas de documentation à ce sujet. Qu'est-ce que cela fait :
namespace
{
const UniqueID g_class_uid = new_guid();
}
UniqueID Frame::get_class_uid()
{
return g_class_uid;
}
Si j'obtiens cela correctement, je déplacerais cette fonction:
bool Frame::archive(
const char* directory,
char** output_path) const
{
assert(directory);
// Construct the name of the image file.
const string filename =
"autosave." + get_time_stamp_string() + ".exr";
// Construct the path to the image file.
const string file_path = (filesystem::path(directory) / filename).string();
// Return the path to the image file.
if (output_path)
*output_path = duplicate_string(file_path.c_str());
Image transformed_image(*impl->m_image);
transform_to_output_color_space(transformed_image);
return
write_image(
file_path.c_str(),
transformed_image,
ImageAttributes::create_default_attributes());
}
dans une classe FrameWriter
. Je ne sais pas comment commencer à écrire la classe, devrait-elle ressembler à ceci :
//
// This source file is part of appleseed.
// Visit http://appleseedhq.net/ for additional information and resources.
//includes
//using namespaces
namespace renderer
{
FrameArchiver::archive(...)
{
//code from Frame::archive
}
} // namespace renderer
Merci, j'ai juste besoin d'un coup de pouce pour commencer à programmer.
Oui, c'est en gros ça. Vous devrez créer deux nouvelles paires de fichiers ( framewriter.{h,cpp}
et framearchiver.{h,cpp}
), ou peut-être juste une paire ( framewriter.{h,cpp}
) si vous pensez que cela est suffisant, ajoutez-les à le fichier CMakeLists.txt et déplacez le code vers ces nouveaux fichiers.
Maintenant:
namespace
{
const UniqueID g_class_uid = new_guid();
}
Cela crée un nouvel ID unique local pour ce fichier. Cet ID sera utilisé pour identifier de manière unique la classe d'entité "Frame". L'ID de classe correspondant à la classe "Frame" est accessible via la méthode statique suivante :
UniqueID Frame::get_class_uid()
{
return g_class_uid;
}
Votre classe FrameWriter
n'est pas une classe d'entité, juste une classe simple, vous n'avez donc pas besoin de tout cela.
Ce numéro est à nouveau disponible.