unsigned int __stdcall Texture::Atlas::ThreadLoadTexture( void* data ) { Thread::Work *work = ( Thread::Work* ) data; ThreadDataLoadTexture *loader = ( ThreadDataLoadTexture* ) work->data; //__log.PrintInfo( Filelevel_DEBUG, "Texture::Atlas::ThreadLoadTexture => begin: data[%d] size[%d; %d]", loader->data->getLength(), loader->size.width, loader->size.height ); // ImageLoader image; if( !image.LoadFromBuffer( ( Byte* ) loader->data->getData(), loader->data->getLength() ) ) { __log.PrintInfo( Filelevel_ERROR, "Texture::Atlas::ThreadLoadTexture => image.LoadFromBuffer failed" ); work->status = Thread::THREAD_WORK_STATUS_ERROR; return 1; } Dword *dst = ( Dword* ) loader->atlas->textureData.getData(), *src = ( Dword* ) image.GetImageData(); for( Dword y = 0; y < image.GetImageSize().height; ++y ) { memcpy( dst + ( loader->item->rect.top + y ) * loader->atlas->size.width + loader->item->rect.left, src + y * image.GetImageSize().width, image.GetImageSize().width * 4 ); } loader->atlas->FlushToGPU(); //done delete loader->data; delete loader; work->status = Thread::THREAD_WORK_STATUS_DONE; //__log.PrintInfo( Filelevel_DEBUG, "Texture::Atlas::ThreadLoadTexture => done" ); return 0; }//ThreadLoadTexture