Ver código fonte

Fixed the creation of default sampler states. Creating them in the constructor was a bad idea.

Marko Pintera 13 anos atrás
pai
commit
525aff7258

+ 49 - 49
CamelotClient/CamelotClient.cpp

@@ -32,9 +32,9 @@ int CALLBACK WinMain(
 	_In_  int nCmdShow
 	)
 {
-	gApplication().startUp("CamelotGLRenderSystem", "CamelotForwardRenderer");
+	//gApplication().startUp("CamelotGLRenderSystem", "CamelotForwardRenderer");
 	//gApplication().startUp("CamelotD3D9RenderSystem", "CamelotForwardRenderer");
-	//gApplication().startUp("CamelotD3D11RenderSystem", "CamelotForwardRenderer");
+	gApplication().startUp("CamelotD3D11RenderSystem", "CamelotForwardRenderer");
 
 	RenderSystem* renderSystem = RenderSystem::instancePtr();
 	RenderWindowPtr renderWindow = gApplication().getPrimaryRenderWindow();
@@ -80,28 +80,28 @@ int CALLBACK WinMain(
 	//vertProg =  HighLevelGpuProgram::create(vertShaderCode, "vs_main", "hlsl", GPT_VERTEX_PROGRAM, GPP_VS_2_0);
 
 	/////////////////// HLSL 11 SHADERS //////////////////////////
-	//String fragShaderCode = "SamplerState samp : register(s0);			\
-	//						Texture2D tex : register(t0); \
-	//						float4 ps_main(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target		\
-	//						{														\
-	//						float4 color = tex.Sample(samp, uv);				\
-	//						return color;										\
-	//						}";
-
-	//fragProg =  HighLevelGpuProgram::create(fragShaderCode, "ps_main", "hlsl", GPT_FRAGMENT_PROGRAM, GPP_PS_4_0);
-
-	//String vertShaderCode = "float4x4 matViewProjection;	\
-	//						void vs_main(										\
-	//						in float4 inPos : POSITION,							\
-	//						in float2 uv : TEXCOORD0,								\
-	//						out float4 oPosition : SV_Position,					\
-	//						out float2 oUv : TEXCOORD0)							\
-	//						{														\
-	//						oPosition = mul(matViewProjection, inPos);			\
-	//						oUv = uv;											\
-	//						}";
-
-	//vertProg =  HighLevelGpuProgram::create(vertShaderCode, "vs_main", "hlsl", GPT_VERTEX_PROGRAM, GPP_VS_4_0);
+	String fragShaderCode = "SamplerState samp : register(s0);			\
+							Texture2D tex : register(t0); \
+							float4 ps_main(in float4 inPos : SV_Position, float2 uv : TEXCOORD0) : SV_Target		\
+							{														\
+							float4 color = tex.Sample(samp, uv);				\
+							return color;										\
+							}";
+
+	fragProg =  HighLevelGpuProgram::create(fragShaderCode, "ps_main", "hlsl", GPT_FRAGMENT_PROGRAM, GPP_PS_4_0);
+
+	String vertShaderCode = "float4x4 matViewProjection;	\
+							void vs_main(										\
+							in float4 inPos : POSITION,							\
+							in float2 uv : TEXCOORD0,								\
+							out float4 oPosition : SV_Position,					\
+							out float2 oUv : TEXCOORD0)							\
+							{														\
+							oPosition = mul(matViewProjection, inPos);			\
+							oUv = uv;											\
+							}";
+
+	vertProg =  HighLevelGpuProgram::create(vertShaderCode, "vs_main", "hlsl", GPT_VERTEX_PROGRAM, GPP_VS_4_0);
 
 	/////////////////// CG SHADERS //////////////////////////
 	//String fragShaderCode = "sampler2D tex;					\
@@ -127,31 +127,31 @@ int CALLBACK WinMain(
 	//vertProg =  HighLevelGpuProgram::create(vertShaderCode, "vs_main", "cg", GPT_VERTEX_PROGRAM, GPP_VS_2_0);
 
 	///////////////// GLSL SHADERS ////////////////////////////
-	String fragShaderCode = " #version 400 \n \
-							  uniform sampler2D tex; \
-							  in vec2 texcoord0; \
-							  out vec4 fragColor; \
-							  void main() \
-							  {\
-								  vec4 texColor = texture2D(tex, texcoord0.st);\
-								  fragColor = texColor; \
-							  }";
-
-	fragProg = HighLevelGpuProgram::create(fragShaderCode, "main", "glsl", GPT_FRAGMENT_PROGRAM, GPP_PS_2_0);
-
-	// TODO - Make sure to document the strict input parameter naming. (Exact supported names are in GLSLParamParser)
-	String vertShaderCode = "#version 400 \n \
-							 uniform mainFragBlock { mat4 matViewProjection; }; \
-							 in vec4 cm_position; \
-							 in vec2 cm_texcoord0; \
-							 out vec2 texcoord0; \
-							 void main() \
-							 { \
-								texcoord0 = cm_texcoord0; \
-								gl_Position = cm_position * matViewProjection; \
-							 }";
-
-	vertProg = HighLevelGpuProgram::create(vertShaderCode, "main", "glsl", GPT_VERTEX_PROGRAM, GPP_VS_2_0);
+	//String fragShaderCode = " #version 400 \n \
+	//						  uniform sampler2D tex; \
+	//						  in vec2 texcoord0; \
+	//						  out vec4 fragColor; \
+	//						  void main() \
+	//						  {\
+	//							  vec4 texColor = texture2D(tex, texcoord0.st);\
+	//							  fragColor = texColor; \
+	//						  }";
+
+	//fragProg = HighLevelGpuProgram::create(fragShaderCode, "main", "glsl", GPT_FRAGMENT_PROGRAM, GPP_PS_2_0);
+
+	//// TODO - Make sure to document the strict input parameter naming. (Exact supported names are in GLSLParamParser)
+	//String vertShaderCode = "#version 400 \n \
+	//						 uniform mainFragBlock { mat4 matViewProjection; }; \
+	//						 in vec4 cm_position; \
+	//						 in vec2 cm_texcoord0; \
+	//						 out vec2 texcoord0; \
+	//						 void main() \
+	//						 { \
+	//							texcoord0 = cm_texcoord0; \
+	//							gl_Position = cm_position * matViewProjection; \
+	//						 }";
+
+	//vertProg = HighLevelGpuProgram::create(vertShaderCode, "main", "glsl", GPT_VERTEX_PROGRAM, GPP_VS_2_0);
 
 	HighLevelGpuProgramHandle vertProgRef(vertProg);
 

+ 1 - 0
CamelotRenderer/Include/CmBlendState.h

@@ -71,6 +71,7 @@ namespace CamelotEngine
 		friend class RenderStateManager;
 
 		virtual void initialize(const BLEND_STATE_DESC& desc);
+
 		BLEND_STATE_DESC mData;
 
 		/************************************************************************/

+ 8 - 10
CamelotRenderer/Include/CmRenderStateManager.h

@@ -8,8 +8,6 @@ namespace CamelotEngine
 	class CM_EXPORT RenderStateManager : public Module<RenderStateManager>
 	{
 	public:
-		RenderStateManager();
-
 		/**
 		 * @brief	Creates and initializes a new SamplerState.
 		 */
@@ -58,14 +56,14 @@ namespace CamelotEngine
 		 */
 		virtual BlendStatePtr createEmptyBlendState() const;
 
-		const SamplerStatePtr& getDefaultSamplerState() const { return mDefaultSamplerState; }
-		const BlendStatePtr& getDefaultBlendState() const { return mDefaultBlendState; }
-		const RasterizerStatePtr& getDefaultRasterizerState() const { return mDefaultRasterizerState; }
-		const DepthStencilStatePtr& getDefaultDepthStencilState() const { return mDefaultDepthStencilState; }
+		const SamplerStatePtr& getDefaultSamplerState() const;
+		const BlendStatePtr& getDefaultBlendState() const;
+		const RasterizerStatePtr& getDefaultRasterizerState() const;
+		const DepthStencilStatePtr& getDefaultDepthStencilState() const;
 	private:
-		SamplerStatePtr mDefaultSamplerState;
-		BlendStatePtr mDefaultBlendState;
-		RasterizerStatePtr mDefaultRasterizerState;
-		DepthStencilStatePtr mDefaultDepthStencilState;
+		mutable SamplerStatePtr mDefaultSamplerState;
+		mutable BlendStatePtr mDefaultBlendState;
+		mutable RasterizerStatePtr mDefaultRasterizerState;
+		mutable DepthStencilStatePtr mDefaultDepthStencilState;
 	};
 }

+ 1 - 1
CamelotRenderer/Source/CmBlendState.cpp

@@ -9,7 +9,7 @@ namespace CamelotEngine
 	{
 		mData = desc;
 
-		CoreGpuObject::initialize();
+		Resource::initialize();
 	}
 
 	const BlendStatePtr& BlendState::getDefault()

+ 1 - 1
CamelotRenderer/Source/CmDepthStencilState.cpp

@@ -10,7 +10,7 @@ namespace CamelotEngine
 	{
 		mData = desc;
 
-		CoreGpuObject::initialize();
+		Resource::initialize();
 	}
 
 	const DepthStencilStatePtr& DepthStencilState::getDefault()

+ 1 - 1
CamelotRenderer/Source/CmRasterizerState.cpp

@@ -9,7 +9,7 @@ namespace CamelotEngine
 	{
 		mData = desc;
 
-		CoreGpuObject::initialize();
+		Resource::initialize();
 	}
 
 	const RasterizerStatePtr& RasterizerState::getDefault()

+ 32 - 8
CamelotRenderer/Source/CmRenderStateManager.cpp

@@ -6,14 +6,6 @@
 
 namespace CamelotEngine
 {
-	RenderStateManager::RenderStateManager()
-	{
-		mDefaultSamplerState = createSamplerState(SAMPLER_STATE_DESC());
-		mDefaultBlendState = createBlendState(BLEND_STATE_DESC());
-		mDefaultRasterizerState = createRasterizerState(RASTERIZER_STATE_DESC());
-		mDefaultDepthStencilState = createDepthStencilState(DEPTH_STENCIL_STATE_DESC());
-	}
-
 	SamplerStatePtr RenderStateManager::createSamplerState(const SAMPLER_STATE_DESC& desc) const
 	{
 		SamplerStatePtr samplerState = SamplerStatePtr(new SamplerState());
@@ -81,4 +73,36 @@ namespace CamelotEngine
 
 		return blendState;
 	}
+
+	const SamplerStatePtr& RenderStateManager::getDefaultSamplerState() const 
+	{ 
+		if(mDefaultSamplerState == nullptr)
+			mDefaultSamplerState = createSamplerState(SAMPLER_STATE_DESC());
+
+		return mDefaultSamplerState; 
+	}
+
+	const BlendStatePtr& RenderStateManager::getDefaultBlendState() const 
+	{ 
+		if(mDefaultBlendState == nullptr)
+			mDefaultBlendState = createBlendState(BLEND_STATE_DESC());
+
+		return mDefaultBlendState; 
+	}
+
+	const RasterizerStatePtr& RenderStateManager::getDefaultRasterizerState() const 
+	{ 
+		if(mDefaultRasterizerState == nullptr)
+			mDefaultRasterizerState = createRasterizerState(RASTERIZER_STATE_DESC());
+
+		return mDefaultRasterizerState; 
+	}
+
+	const DepthStencilStatePtr& RenderStateManager::getDefaultDepthStencilState() const 
+	{ 
+		if(mDefaultDepthStencilState == nullptr)
+			mDefaultDepthStencilState = createDepthStencilState(DEPTH_STENCIL_STATE_DESC());
+
+		return mDefaultDepthStencilState; 
+	}
 }

+ 1 - 1
CamelotRenderer/Source/CmSamplerState.cpp

@@ -10,7 +10,7 @@ namespace CamelotEngine
 	{
 		mData = desc;
 
-		CoreGpuObject::initialize();
+		Resource::initialize();
 	}
 
 	const SamplerStatePtr& SamplerState::getDefault()