Преглед изворни кода

Grid now renders properly for base axis aligned ortho views

BearishSun пре 10 година
родитељ
комит
a401ae8851

+ 11 - 2
BansheeCore/Include/BsGpuParam.h

@@ -7,6 +7,7 @@
 #include "BsMatrix3.h"
 #include "BsMatrix4.h"
 #include "BsMatrixNxM.h"
+#include "BsVectorNI.h"
 #include "BsColor.h"
 
 namespace BansheeEngine
@@ -260,20 +261,28 @@ namespace BansheeEngine
 	 */
 
 	typedef TGpuDataParam<float, false> GpuParamFloat;
-	typedef TGpuDataParam<Color, false> GpuParamColor;
 	typedef TGpuDataParam<Vector2, false> GpuParamVec2;
 	typedef TGpuDataParam<Vector3, false> GpuParamVec3;
 	typedef TGpuDataParam<Vector4, false> GpuParamVec4;
+	typedef TGpuDataParam<int, false> GpuParamInt;
+	typedef TGpuDataParam<Vector2I, false> GpuParamVec2I;
+	typedef TGpuDataParam<Vector3I, false> GpuParamVec3I;
+	typedef TGpuDataParam<Vector4I, false> GpuParamVec4I;
 	typedef TGpuDataParam<Matrix3, false> GpuParamMat3;
 	typedef TGpuDataParam<Matrix4, false> GpuParamMat4;
+	typedef TGpuDataParam<Color, false> GpuParamColor;
 
 	typedef TGpuDataParam<float, true> GpuParamFloatCore;
-	typedef TGpuDataParam<Color, true> GpuParamColorCore;
 	typedef TGpuDataParam<Vector2, true> GpuParamVec2Core;
 	typedef TGpuDataParam<Vector3, true> GpuParamVec3Core;
 	typedef TGpuDataParam<Vector4, true> GpuParamVec4Core;
+	typedef TGpuDataParam<int, true> GpuParamIntCore;
+	typedef TGpuDataParam<Vector2I, true> GpuParamVec2ICore;
+	typedef TGpuDataParam<Vector3I, true> GpuParamVec3ICore;
+	typedef TGpuDataParam<Vector4I, true> GpuParamVec4ICore;
 	typedef TGpuDataParam<Matrix3, true> GpuParamMat3Core;
 	typedef TGpuDataParam<Matrix4, true> GpuParamMat4Core;
+	typedef TGpuDataParam<Color, true> GpuParamColorCore;
 
 	typedef TGpuParamStruct<false> GpuParamStruct;
 	typedef TGpuParamStruct<true> GpuParamStructCore;

+ 10 - 2
BansheeCore/Include/BsMaterialParam.h

@@ -262,20 +262,28 @@ namespace BansheeEngine
 	 */
 
 	typedef TMaterialDataParam<float, false> MaterialParamFloat;
-	typedef TMaterialDataParam<Color, false> MaterialParamColor;
 	typedef TMaterialDataParam<Vector2, false> MaterialParamVec2;
 	typedef TMaterialDataParam<Vector3, false> MaterialParamVec3;
 	typedef TMaterialDataParam<Vector4, false> MaterialParamVec4;
+	typedef TMaterialDataParam<int, false> MaterialParamInt;
+	typedef TMaterialDataParam<Vector2I, false> MaterialParamVec2I;
+	typedef TMaterialDataParam<Vector3I, false> MaterialParamVec3I;
+	typedef TMaterialDataParam<Vector4I, false> MaterialParamVec4I;
 	typedef TMaterialDataParam<Matrix3, false> MaterialParamMat3;
 	typedef TMaterialDataParam<Matrix4, false> MaterialParamMat4;
+	typedef TMaterialDataParam<Color, false> MaterialParamColor;
 
 	typedef TMaterialDataParam<float, true> MaterialParamFloatCore;
-	typedef TMaterialDataParam<Color, true> MaterialParamColorCore;
 	typedef TMaterialDataParam<Vector2, true> MaterialParamVec2Core;
 	typedef TMaterialDataParam<Vector3, true> MaterialParamVec3Core;
 	typedef TMaterialDataParam<Vector4, true> MaterialParamVec4Core;
+	typedef TMaterialDataParam<int, true> MaterialParamIntCore;
+	typedef TMaterialDataParam<Vector2I, true> MaterialParamVec2ICore;
+	typedef TMaterialDataParam<Vector3I, true> MaterialParamVec3ICore;
+	typedef TMaterialDataParam<Vector4I, true> MaterialParamVec4ICore;
 	typedef TMaterialDataParam<Matrix3, true> MaterialParamMat3Core;
 	typedef TMaterialDataParam<Matrix4, true> MaterialParamMat4Core;
+	typedef TMaterialDataParam<Color, true> MaterialParamColorCore;
 
 	typedef TMaterialParamStruct<false> MaterialParamStruct;
 	typedef TMaterialParamStruct<true> MaterialParamStructCore;

+ 9 - 5
BansheeEditor/Include/BsSceneGrid.h

@@ -1,7 +1,7 @@
 #pragma once
 
 #include "BsEditorPrerequisites.h"
-#include "BsVector3.h"
+#include "BsVector2I.h"
 #include "BsColor.h"
 #include "BsMaterial.h"
 
@@ -94,11 +94,13 @@ namespace BansheeEngine
 		/**
 		 * Updates the grid mesh to render.
 		 * 			
-		 * @param[in]	mesh		Grid mesh to render.
-		 * @param[in]	spacing		Spacing between the grid lines.
-		 * @param[in]	fadeGrid	Determines should the grid fade out at larger distances.
+		 * @param[in]	mesh			Grid mesh to render.
+		 * @param[in]	spacing			Spacing between the grid lines.
+		 * @param[in]	fadeGrid		Determines should the grid fade out at larger distances.
+		 * @param[in]	gridPlaneNormal	Normal to the plane to render the grid on. Must be one of the basis vectors
+		 *								(i.e. can't be arbitrary).						
 		 */
-		void updateData(const SPtr<MeshCore>& mesh, float spacing, bool fadeGrid);
+		void updateData(const SPtr<MeshCore>& mesh, float spacing, bool fadeGrid, const Vector3& gridPlaneNormal);
 
 		/**	Callback triggered by the renderer, actually draws the grid mesh. */
 		void render();
@@ -108,6 +110,7 @@ namespace BansheeEngine
 		SPtr<MaterialCore> mGridMaterial;
 		float mSpacing = 1.0f;
 		bool mFadeGrid = true;
+		Vector3 mGridPlaneNormal;
 
 		MaterialParamMat4Core mViewProjParam;
 		MaterialParamVec4Core mWorldCameraPosParam;
@@ -116,6 +119,7 @@ namespace BansheeEngine
 		MaterialParamFloatCore mGridBorderWidthParam;
 		MaterialParamFloatCore mGridFadeOutStartParam;
 		MaterialParamFloatCore mGridFadeOutEndParam;
+		MaterialParamVec3Core mGridPlaneNormalParam;
 
 		static const Color GRID_LINE_COLOR;
 		static const float LINE_WIDTH;

+ 20 - 5
BansheeEditor/Source/BsSceneGrid.cpp

@@ -96,9 +96,24 @@ namespace BansheeEngine
 
 		if (mCoreDirty)
 		{
+			Vector3 gridPlaneNormal = Vector3(0.0f, 1.0f, 0.0f);
+
+			switch (mMode)
+			{
+			case GridMode::OrthoX:
+			case GridMode::OrthoNegX:
+				gridPlaneNormal = Vector3(1.0f, 0.0f, 0.0f);
+				break;
+			case GridMode::OrthoZ:
+			case GridMode::OrthoNegZ:
+				gridPlaneNormal = Vector3(0.0f, 0.0f, 1.0f);
+				break;
+			}
+
 			SceneGridCore* core = mCore.load(std::memory_order_relaxed);
 			gCoreAccessor().queueCommand(
-				std::bind(&SceneGridCore::updateData, core, mGridMesh->getCore(), mSpacing, mMode == GridMode::Perspective));
+				std::bind(&SceneGridCore::updateData, core, mGridMesh->getCore(), mSpacing, 
+				mMode == GridMode::Perspective, gridPlaneNormal));
 
 			mCoreDirty = false;
 		}
@@ -156,9 +171,6 @@ namespace BansheeEngine
 			break;
 		}
 
-		axes[0] = Vector3::UNIT_X;
-		axes[1] = Vector3::UNIT_Z;
-
 		std::array<float, 2> extents;
 		extents[0] = mSize * 0.5f;
 		extents[1] = mSize * 0.5f;
@@ -189,16 +201,18 @@ namespace BansheeEngine
 		mGridBorderWidthParam = mGridMaterial->getParamFloat("gridBorderWidth");
 		mGridFadeOutStartParam = mGridMaterial->getParamFloat("gridFadeOutStart");
 		mGridFadeOutEndParam = mGridMaterial->getParamFloat("gridFadeOutEnd");
+		mGridMaterial->getParam("gridPlaneNormal", mGridPlaneNormalParam);
 
 		CoreRendererPtr activeRenderer = RendererManager::instance().getActive();
 		activeRenderer->_registerRenderCallback(camera.get(), 5, std::bind(&SceneGridCore::render, this));			
 	}
 
-	void SceneGridCore::updateData(const SPtr<MeshCore>& mesh, float spacing, bool fadeGrid)
+	void SceneGridCore::updateData(const SPtr<MeshCore>& mesh, float spacing, bool fadeGrid, const Vector3& gridPlaneNormal)
 	{
 		mGridMesh = mesh;
 		mSpacing = spacing;
 		mFadeGrid = fadeGrid;
+		mGridPlaneNormal = gridPlaneNormal;
 	}
 
 	void SceneGridCore::render()
@@ -215,6 +229,7 @@ namespace BansheeEngine
 		mGridColorParam.set(GRID_LINE_COLOR);
 		mGridSpacingParam.set(mSpacing);
 		mGridBorderWidthParam.set(LINE_BORDER_WIDTH);
+		mGridPlaneNormalParam.set(mGridPlaneNormal);
 
 		if (mFadeGrid)
 		{