From a5c868c9f58c26210da7f818fd4449acb7a9a7e4 Mon Sep 17 00:00:00 2001
From: scrawl <scrawl@baseoftrash.de>
Date: Mon, 8 Apr 2013 14:54:19 +0200
Subject: [PATCH] Create a separate vertex buffer for each UV set

---
 components/nifogre/ogrenifloader.cpp | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/components/nifogre/ogrenifloader.cpp b/components/nifogre/ogrenifloader.cpp
index 8f9d69f6e2..a94f469010 100644
--- a/components/nifogre/ogrenifloader.cpp
+++ b/components/nifogre/ogrenifloader.cpp
@@ -992,17 +992,19 @@ class NIFMeshLoader : Ogre::ManualResourceLoader
         size_t numUVs = data->uvlist.size();
         if(numUVs)
         {
-            size_t elemSize = Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT2);
-            vbuf = hwBufMgr->createVertexBuffer(elemSize, srcVerts.size()*numUVs,
-                                                Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY, true);
             for(size_t i = 0;i < numUVs;i++)
             {
+                size_t elemSize = Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT2);
+                vbuf = hwBufMgr->createVertexBuffer(elemSize, srcVerts.size(),
+                                                    Ogre::HardwareBuffer::HBU_STATIC);
+
                 const std::vector<Ogre::Vector2> &uvlist = data->uvlist[i];
-                vbuf->writeData(i*srcVerts.size()*elemSize, elemSize*srcVerts.size(), &uvlist[0], true);
-                decl->addElement(nextBuf, i*srcVerts.size()*elemSize, Ogre::VET_FLOAT2,
+
+                vbuf->writeData(0, elemSize*srcVerts.size(), &uvlist[0], true);
+                decl->addElement(nextBuf, 0, Ogre::VET_FLOAT2,
                                  Ogre::VES_TEXTURE_COORDINATES, i);
+                bind->setBinding(nextBuf++, vbuf);
             }
-            bind->setBinding(nextBuf++, vbuf);
         }
 
         // Triangle faces