Ver código fonte

Fixed an issue where AsyncOps werent properly forwarded to some core thread methods

Marko Pintera 11 anos atrás
pai
commit
041e8822fb

+ 1 - 3
CamelotCore/Include/CmTextureRTTI.h

@@ -114,10 +114,8 @@ namespace CamelotFramework
 
 
 				GpuResourcePtr sharedTexPtr = std::static_pointer_cast<GpuResource>(texture->getThisPtr());
 				GpuResourcePtr sharedTexPtr = std::static_pointer_cast<GpuResource>(texture->getThisPtr());
 
 
-				AsyncOp op;
-
 				pixelData->at(i)->lock();
 				pixelData->at(i)->lock();
-				gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, RenderSystem::instancePtr(), sharedTexPtr, subresourceIdx, pixelData->at(i), true, op));
+				gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, RenderSystem::instancePtr(), sharedTexPtr, subresourceIdx, pixelData->at(i), false, _1));
 			}
 			}
 
 
 			cm_delete<PoolAlloc>(pixelData);
 			cm_delete<PoolAlloc>(pixelData);

+ 2 - 1
CamelotCore/Source/CmCommandQueue.cpp

@@ -106,7 +106,8 @@ namespace CamelotFramework
 
 
 			if(command.returnsValue)
 			if(command.returnsValue)
 			{
 			{
-				command.callbackWithReturnValue(*command.asyncOp);
+				AsyncOp& op = *command.asyncOp;
+				command.callbackWithReturnValue(op);
 
 
 				if(!command.asyncOp->hasCompleted())
 				if(!command.asyncOp->hasCompleted())
 				{
 				{

+ 2 - 0
CamelotCore/Source/CmTextureManager.cpp

@@ -58,6 +58,8 @@ namespace CamelotFramework
 		data->setColorAt(Color::Red, 1, 1);
 		data->setColorAt(Color::Red, 1, 1);
 
 
 		AsyncOp op;
 		AsyncOp op;
+
+		data->lock();
 		RenderSystem::instance().writeSubresource(mDummyTexture.getInternalPtr(), mDummyTexture->mapToSubresourceIdx(0, 0), data, false, op);
 		RenderSystem::instance().writeSubresource(mDummyTexture.getInternalPtr(), mDummyTexture->mapToSubresourceIdx(0, 0), data, false, op);
 	}
 	}
 
 

+ 2 - 3
CamelotFontImporter/Source/CmFontImporter.cpp

@@ -272,7 +272,6 @@ namespace CamelotFramework
 				newTex.synchronize(); // TODO - Required due to a bug in allocateSubresourceBuffer
 				newTex.synchronize(); // TODO - Required due to a bug in allocateSubresourceBuffer
 
 
 				UINT32 subresourceIdx = newTex->mapToSubresourceIdx(0, 0);
 				UINT32 subresourceIdx = newTex->mapToSubresourceIdx(0, 0);
-				AsyncOp op;
 
 
 				// It's possible the formats no longer match
 				// It's possible the formats no longer match
 				if(newTex->getFormat() != pixelData->getFormat())
 				if(newTex->getFormat() != pixelData->getFormat())
@@ -282,13 +281,13 @@ namespace CamelotFramework
 
 
 					temp->lock();
 					temp->lock();
 					gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, 
 					gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, 
-						RenderSystem::instancePtr(), newTex.getInternalPtr(), subresourceIdx, temp, true, op));
+						RenderSystem::instancePtr(), newTex.getInternalPtr(), subresourceIdx, temp, false, _1));
 				}
 				}
 				else
 				else
 				{
 				{
 					pixelData->lock();
 					pixelData->lock();
 					gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, 
 					gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, 
-						RenderSystem::instancePtr(), newTex.getInternalPtr(), subresourceIdx, pixelData, true, op));
+						RenderSystem::instancePtr(), newTex.getInternalPtr(), subresourceIdx, pixelData, false, _1));
 				}
 				}
 
 
 				fontData.texturePages.push_back(newTex);
 				fontData.texturePages.push_back(newTex);

+ 1 - 3
CamelotFreeImgImporter/Source/CmFreeImgImporter.cpp

@@ -138,10 +138,8 @@ namespace CamelotFramework
 
 
 			imgData->getPixels(mip, *src);
 			imgData->getPixels(mip, *src);
 
 
-			AsyncOp op;
-
 			src->lock();
 			src->lock();
-			gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, RenderSystem::instancePtr(), newTexture, subresourceIdx, src, true, op));
+			gCoreThread().queueReturnCommand(boost::bind(&RenderSystem::writeSubresource, RenderSystem::instancePtr(), newTexture, subresourceIdx, src, false, _1));
 		}
 		}
 
 
 		fileData->close();
 		fileData->close();