纹理数组,创建纹理

时间:2011-07-28 08:16:48

标签: c++ visual-studio opengl memory-management

我正在研究别人的代码的一部分,因此仅限于我可以做的修改量。无论如何,我目前正在尝试创建一个纹理数组并且遇到了问题: 我需要支持的是n个纹理被单独加载并存储为向量中的GLubytes。然后我需要获取存储在该向量中的所有数据并将其存储在单个GLubyte对象中。目前我的代码看起来像这样:

vector<GLubyte*> vecPixelData;
GLubyte*         puData;

for(int i = 0; i < NumberOfTextures; i++)
{
    GLubyte* pixData;
    LoadTexture(&pixData);
    vecPixelData.push_back(pixData);
}

int puDataSize = nWidth * nHeight * 4 * NumberOfTextures;
puData = new GLubyte[puDataSize];

for(int i = 0; i < NumberOfTextures; i++)
    *puData += *vecPixelData[i];

现在我确定我遗漏了一些关于如何将内存从vecPixelData复制到puData的基本要点,如果没有,任何人都可以给我一个'指针'来开始某个地方关于如何检查puData是否实际存储了所需的数据。 (我尝试过使用内存窗口,但puData中的数据似乎没有被改变。)

编辑: 解决方案最终是:

int puDataSize = nWidth * nHeight * 4; 
    puData = new GLubyte[puDataSize * NumberOfTextures]; 

for(int i = 0; i < NumberOfTextures.size(); i++)
    memcpy(puData + (puDataSize * i), vecPixelData[i], puDataSize);

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您需要使用std::copy。在std::copy(*vecPixelData[i], *vecPixelData[i] + imageSize, puData + offstet)循环中imageSize(将offsetfor的计算留在您的行中)。