Отправка текстур из ОЗУ в GPU каждый кадр не идеален и не нужен на самом деле.
Вы можете загружать все текстуры в GPU на Start()
. А затем используйте Update()
только для изредка update MaterialPropertyBlock
(или другого типа облегченного указателя, который понимает GPU), чтобы указать, какую (ранее загруженную) текстуру отрисовывать с этого момента.
Texture2D.Apply () отправляет данные текстуры из RAM (CPU) в GPU. Следовательно, будут загружены все кадры:
frames = GetTextures(info);
foreach( var frame in frames )
frame.Apply( updateMipmaps:true , makeNoLongerReadable:true );
Чтобы узнать, какие текстуры черные:
for( int i=0 ; i<frames.Length ; i++ )
{
var frame = frames[i];
if( IsItAllBlack(frame) )
Debug.Log($"frame #{i} is all black");
}
bool IsItAllBlack ( Texture2D tex )
{
var pixels = tex.GetPixels();
foreach( var col in pixels )
if( (col.r+col.g+col.b)>0 )
return false;
return true;
}
Кстати: не забудьте освободить память, используемую этими текстурами, если они больше не нужны:
foreach( var frame in frames )
Destroy(frame);
Это не происходит автоматически, когда текстура загружается вручную из кода.