Selaa lähdekoodia

Fixed memory corruption when creating bindable params

Marko Pintera 12 vuotta sitten
vanhempi
sitoutus
b15ab166ce
3 muutettua tiedostoa jossa 8 lisäystä ja 8 poistoa
  1. 2 2
      CamelotClient/CamelotClient.cpp
  2. 5 4
      CamelotCore/Source/CmGpuParams.cpp
  3. 1 2
      Opts.txt

+ 2 - 2
CamelotClient/CamelotClient.cpp

@@ -36,8 +36,8 @@
 #include "CmPlatform.h"
 
 //#define DX11
-#define DX9
-//#define GL
+//#define DX9
+#define GL
 
 using namespace CamelotFramework;
 using namespace BansheeEditor;

+ 5 - 4
CamelotCore/Source/CmGpuParams.cpp

@@ -278,11 +278,11 @@ namespace CamelotFramework
 		UINT32 textureBufferSize = params->mNumTextures * sizeof(HTexture);
 		UINT32 samplerStateBufferSize = params->mNumSamplerStates * sizeof(HSamplerState);
 
-		UINT32 bufferSize = sizeof(BindableGpuParamBlock) + paramBlockBufferSize + paramBlockBuffersBufferSize + textureBufferSize + samplerStateBufferSize;
+		UINT32 bufferSize = paramBlockBufferSize + paramBlockBuffersBufferSize + textureBufferSize + samplerStateBufferSize;
 		for(UINT32 i = 0; i < params->mNumParamBlocks; i++)
 		{
 			if(params->mParamBlocks[i] != nullptr)
-				bufferSize += params->mParamBlocks[i]->getSize();
+				bufferSize += sizeof(BindableGpuParamBlock) + params->mParamBlocks[i]->getSize();
 		}
 
 		// TODO - Alloc using stack
@@ -317,12 +317,13 @@ namespace CamelotFramework
 			{
 				UINT32 bufferSize = params->mParamBlocks[i]->getSize();
 				bindableParams.mParamBlocks[i] = (BindableGpuParamBlock*)dataIter;
-				dataIter += sizeof(BindableGpuParamBlock);
 
+				dataIter += sizeof(BindableGpuParamBlock);
 				bindableParams.mParamBlocks[i]->mData = dataIter;
-				dataIter += bufferSize;
 
+				dataIter += bufferSize;
 				memcpy(bindableParams.mParamBlocks[i]->mData, params->mParamBlocks[i]->getData(), bufferSize);
+
 				bindableParams.mParamBlocks[i]->mSize = bufferSize;
 				bindableParams.mParamBlocks[i]->mDirty = params->mParamBlocks[i]->isDirty();
 			}

+ 1 - 2
Opts.txt

@@ -23,8 +23,7 @@ When optimizing UpdateLayout make sure to mark elements that are fully culled as
 
  -------------
 
- Mesh
-  - Make sure to check DX9 and OpenGL performance when new buffers are implemented
+ Check OpenGL - There was a heap corruption the last time I tested it
 
 TransientMesh
  - Only used for writing, only dynamic, and only MAP_NO_OVERWRITE writing