Browse Source

Fixed sprites not updating with the new renderer

Ivan Safrin 10 năm trước cách đây
mục cha
commit
cc40d263a5

+ 1 - 1
include/polycode/core/PolySceneMesh.h

@@ -210,7 +210,7 @@ namespace Polycode {
             bool sendBoneMatricesToMaterial;
 			
 		protected:
-		
+        
 			bool useVertexBuffer;
 			Mesh *mesh;
 			Material *material;

BIN
lib/osx/libPolycore.a


+ 11 - 1
src/core/PolySceneMesh.cpp

@@ -95,9 +95,19 @@ SceneMesh::SceneMesh(int meshType) : material(NULL), skeleton(NULL), localShader
 }
 
 void SceneMesh::setMesh(Mesh *mesh) {
+    if(this->mesh == mesh) {
+        return;
+    }
+    
 	this->mesh = mesh;
 	setLocalBoundingBox(mesh->calculateBBox());
-	useVertexBuffer = false;	
+	useVertexBuffer = false;
+    
+    if(localShaderOptions) {
+        localShaderOptions->getAttributeBindingByName("texCoord")->vertexData = &mesh->vertexTexCoordArray;
+        localShaderOptions->getAttributeBindingByName("position")->vertexData = &mesh->vertexPositionArray;
+        localShaderOptions->getAttributeBindingByName("normal")->vertexData = &mesh->vertexNormalArray;
+    }
 }
 
 SceneMesh::~SceneMesh() {

+ 2 - 2
src/core/PolySceneSprite.cpp

@@ -251,10 +251,10 @@ void SceneSprite::Render(GPUDrawBuffer *buffer) {
     
     Mesh *stateMesh = currentSpriteState->getMeshForFrameIndex(currentFrame);
     if(stateMesh) {
-        this->mesh = stateMesh;
+        setMesh(stateMesh);
         useVertexBuffer = false;
     } else {
-        this->mesh = defaultMesh;
+        setMesh(defaultMesh);
         useVertexBuffer = false;
     }