Por exemplo renderer::FrameWriter
e renderer::FrameArchiver
.
Vou trabalhar neste
Por que você precisa fazer isso? Qual seria a intenção dessas duas aulas? Eu só estou curioso.
André: excelente!
Dorian: É apenas uma refatoração. O código de escrita da imagem adiciona muita confusão à implementação da entidade renderer::Frame
.
Ok, obrigado! :)
alguém começou a trabalhar nisso? posso tentar?
Bem, parece que André já está nisso. André, ainda está trabalhando nisso?
Sim, desculpe, estive ocupado durante o fim de semana, mas irei fazê-lo!
Você poderia fornecer uma classe shell para isso? Estou tendo problemas para entender algumas partes do código e não consigo encontrar documentação sobre ele. O que isso faz:
namespace
{
const UniqueID g_class_uid = new_guid();
}
UniqueID Frame::get_class_uid()
{
return g_class_uid;
}
Se eu entendesse corretamente, moveria esta função:
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());
}
em uma classe FrameWriter
. Só não tenho certeza de como começar a escrever a aula, se ela for parecida com isto:
//
// 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
Obrigado, eu só preciso de um pontapé inicial para começar a programar.
Sim, é basicamente isso. Você precisará criar dois novos pares de arquivos ( framewriter.{h,cpp}
e framearchiver.{h,cpp}
), ou talvez apenas um par ( framewriter.{h,cpp}
) se achar que isso é suficiente, adicione-os a o arquivo CMakeLists.txt e mova o código para esses novos arquivos.
Agora:
namespace
{
const UniqueID g_class_uid = new_guid();
}
Isso cria um novo ID local exclusivo para este arquivo. Este ID será usado para identificar exclusivamente a classe de entidade "Frame". O ID de classe correspondente à classe "Frame" pode ser acessado por meio do seguinte método estático:
UniqueID Frame::get_class_uid()
{
return g_class_uid;
}
Sua classe FrameWriter
não é uma classe de entidade, apenas uma classe simples, então você não precisa de nada disso.
Este problema está disponível novamente.