结合纹理以提高性能?

时间:2018-09-25 22:00:48

标签: opengl

假设我具有以下纹理

texture1

texture2

texture 3

如何将这些纹理中的每一个组合成一个纹理,其中三个纹理像final这样并排放置(顺序并不重要)。您可以将每个纹理重复绑定到一个纹理单元,并对每个纹理进行一次绘制调用。在这种情况下,总共可以进行三个绘图调用。这样,将三个纹理组合为一个可以更有效,因为您只需要一个绘图调用。那么您将如何实现呢?

1 个答案:

答案 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...*/);
}