У меня есть 3 различных эффекта xna, один из которых называется initialise, один называется iterate, а другой называется finalize.
Initialise не требует ввода текстуры и выполняет рендеринг для 3 целей.Итерация принимает эти 3 в качестве входных данных текстуры и отрисовывает 3 цели, итерация выполняется несколько раз.Finalize принимает 1 текстурный ввод и выполняет рендеринг для одной цели.
У меня есть несколько вспомогательных классов, но должно быть очевидно, что происходит из моего цикла рендеринга ниже:
int i = 0;
FractalInitRenderer.DefineOutputs(IterationsAndControl[i], Variables1And2[i], Variables3And4[i]);
FractalInitRenderer.Draw();
for (; i < 50; i++)
{
FractalIterateRenderer.ClearInputTextures();
FractalIterateRenderer.AddInput("IterationsAndControl", IterationsAndControl[i % 2]);
FractalIterateRenderer.AddInput("Variables1And2", Variables1And2[i % 2]);
FractalIterateRenderer.AddInput("Variables3And4", Variables3And4[i % 2]);
FractalIterateRenderer.DefineOutputs(IterationsAndControl[(i + 1) % 2], Variables1And2[(i + 1) % 2], Variables3And4[(i + 1) % 2]);
FractalIterateRenderer.Draw();
}
FractalFinaliseRenderer.ClearInputTextures();
FractalFinaliseRenderer.AddInput("IterationsAndControl", IterationsAndControl[i % 2]);
FractalFinaliseRenderer.Draw();
Myобъявления текстуры используют следующий макрос и определяются следующим образом, вместе с моей структурой вывода:
#define DECLARE_TEXTURE(Name, index) \
Texture2D<float4> Name : register(t##index); \
sampler Name##Sampler : register(s##index);
struct FRACTAL_OUTPUT
{
float4 IterationsAndControl : COLOR0;
float4 Variables1And2 : COLOR1;
float4 Variables3And4 : COLOR2;
};
Что мне интересно, могу ли я поместить цели визуализации ввода и вывода в разные текстурырегистры , затем, возможно, запустить 2 итерационных пиксельных шейдера поочередно, один из них читает из первых 3 регистров, записывает в последние 3, а другой читает из последних 3 и записывает в первые 3?
Я предполагаю, что есть много затрат, связанных с установкой целей рендеринга и входных текстур много раз, что мне больше не нужно было бы делать. Будет ли этого избежать, и будет ли оно того стоить?
Обратите внимание, я могу оптимизировать код внутри шейдеров отдельно, и при необходимости я задам отдельный вопрос.