Texture Array, создание текстуры - PullRequest
1 голос
/ 28 июля 2011

Я работаю над частью чужого кода и, следовательно, был ограничен количеством изменений, которые я могу сделать. Во всяком случае, в настоящее время я пытаюсь создать массив текстур и застрял с проблемой: Что мне нужно для поддержки, так это 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, похоже, не меняются.)

EDIT: Решение в итоге было:

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 Ответ

1 голос
/ 28 июля 2011

Если я правильно понимаю вашу проблему, вам нужно использовать std::copy. Что-то вроде std::copy(*vecPixelData[i], *vecPixelData[i] + imageSize, puData + offstet) (оставляя вам вычисления imageSize и offset) внутри вашего последнего цикла for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...