假设我具有以下纹理
如何将这些纹理中的每一个组合成一个纹理,其中三个纹理像final这样并排放置(顺序并不重要)。您可以将每个纹理重复绑定到一个纹理单元,并对每个纹理进行一次绘制调用。在这种情况下,总共可以进行三个绘图调用。这样,将三个纹理组合为一个可以更有效,因为您只需要一个绘图调用。那么您将如何实现呢?
答案 0 :(得分:0)
这是一个粗略的方法,可让您开始在CPU上组合纹理。
Texture * aggregateTextures(Texture * textures, unsigned int count)
{
assert(! textures && count > 0);
unsigned int newW=0, newH=0;
for(unsigned int i =0; i < count ; i++)
{
newW+=textures[i].width;
newH+=textures[i].height;
}
char * data = new char[newW*newH];
unsigned int offset = 0;
for(unsigned int i =0; i < count ; i++)
{
unsigned int len = < textures[i].width*textures[i].height;
for(unsigned int j =0; j < len; j++)
{
data[offset+j] = textures[i].data[j];
}
offset+=len;
}
return Texture::load(data, newW, newH, /*format, params etc...*/);
}