public void DepthPrepass(RenderState rstate, VMeshData data, ushort startVertex, Matrix4 world, MaterialAnimCollection mc) { if (Material == null) { return; } if (Material.Render.IsTransparent) { return; } if (lastmc != mc) { if (mc != null) { mc.Anims.TryGetValue(Material.Name, out ma); lastmc = mc; } else { ma = null; } } Material.Render.MaterialAnim = ma; Material.Render.World = world; Material.Render.ApplyDepthPrepass(rstate); data.VertexBuffer.Draw(PrimitiveTypes.TriangleList, startVertex + StartVertex, TriangleStart, primitiveCount); }
public void DrawBuffer(CommandBuffer buffer, VMeshData data, int vertexOffset, ushort startVertex, int startIndex, Matrix4 world, ref Lighting light, MaterialAnimCollection mc, Material overrideMat = null) { if (MaterialCrc == 0) { return; } var mat = Material; if (mat == null) { mat = defaultMaterial; } if (overrideMat != null) { mat = overrideMat; } if (lastmc != mc) { if (mc != null) { mc.Anims.TryGetValue(mat.Name, out ma); lastmc = mc; } else { ma = null; } } float z = 0; if (mat.Render.IsTransparent) { z = RenderHelpers.GetZ(world, mat.Render.Camera.Position, CalculateAvg(data, startVertex)); } buffer.AddCommand( mat.Render, ma, world, light, data.VertexBuffer, PrimitiveTypes.TriangleList, startVertex + vertexOffset + StartVertex, startIndex + TriangleStart, primitiveCount, SortLayers.OBJECT, z ); }
public void Draw(RenderState rstate, VertexBuffer buff, ushort startVertex, Matrix4 world, Lighting light, MaterialAnimCollection mc) { if (lastmc != mc) { if (mc != null) { mc.Anims.TryGetValue(Material.Name, out ma); lastmc = mc; } else { ma = null; } } Material.Render.MaterialAnim = ma; Material.Render.World = world; Material.Render.Use(rstate, buff.VertexType, light); buff.Draw(PrimitiveTypes.TriangleList, startVertex + StartVertex, TriangleStart, primitiveCount); }
public void DepthPrepass(RenderState rstate, VMeshData data, int startVertex, int startIndex, Matrix4 world, MaterialAnimCollection mc) { if (MaterialCrc == 0) { return; } var m = Material; if (m == null) { m = materialLibrary.FindMaterial(0); } if (m == null) { return; } if (m.Render.IsTransparent) { return; } if (m.Render.DoubleSided) { return; //TODO: Fix depth prepass for double-sided } if (lastmc != mc) { if (mc != null) { mc.Anims.TryGetValue(m.Name, out ma); lastmc = mc; } else { ma = null; } } m.Render.MaterialAnim = ma; m.Render.World = world; m.Render.ApplyDepthPrepass(rstate); data.VertexBuffer.Draw(PrimitiveTypes.TriangleList, startVertex + StartVertex, startIndex + TriangleStart, primitiveCount); }
public MaterialAnim GetMaterialAnim(MaterialAnimCollection mc) { if (mc == null) { return(null); } if (cached == null || !cached.Loaded) { return(null); } if (cached == cachedAnimMat && cachedAnim != null) { return(cachedAnim); } if (mc.Anims.TryGetValue(cached.Name, out cachedAnim)) { cachedAnimMat = cached; return(cachedAnim); } return(null); }
public void DrawBuffer(CommandBuffer buffer, VMeshData data, ushort startVertex, Matrix4 world, Lighting light, MaterialAnimCollection mc) { if (Material == null) { return; } if (lastmc != mc) { if (mc != null) { mc.Anims.TryGetValue(Material.Name, out ma); lastmc = mc; } else { ma = null; } } float z = 0; if (Material.Render.IsTransparent) { z = RenderHelpers.GetZ(world, Material.Render.Camera.Position, CalculateAvg(data, startVertex)); } buffer.AddCommand( Material.Render, ma, world, light, data.VertexBuffer, PrimitiveTypes.TriangleList, startVertex + StartVertex, TriangleStart, primitiveCount, SortLayers.OBJECT, z ); }
public void DepthPrepass(RenderState rstate, ushort startMesh, int endMesh, ushort startVertex, Matrix4 world, MaterialAnimCollection mc) { if (ready) { for (ushort i = startMesh; i < endMesh; i++) { Meshes[i].DepthPrepass(rstate, this, startVertex, world, mc); } } }
public void DrawBuffer(CommandBuffer buff, ushort startMesh, int endMesh, ushort startVertex, Matrix4 world, ref Lighting light, Vector3 center, MaterialAnimCollection mc, Material overrideMat = null) { if (ready) { for (ushort i = startMesh; i < endMesh; i++) { Meshes[i].DrawBuffer(buff, this, startVertex, world, ref light, mc, overrideMat); } } }
public void Draw(RenderState rstate, ushort startMesh, int endMesh, ushort startVertex, Matrix4 world, Lighting light, MaterialAnimCollection mc) { if (ready) { for (ushort i = startMesh; i < endMesh; i++) { Meshes [i].Draw(rstate, VertexBuffer, startVertex, world, light, mc); } } }
public void DrawBuffer(int level, ResourceManager res, CommandBuffer buffer, Matrix4x4 world, ref Lighting lights, MaterialAnimCollection mc, Material overrideMat = null) { if (Levels == null || Levels.Length <= level) { return; } var l = Levels[level]; if (l == null) { return; } WorldMatrixHandle wm = buffer.WorldBuffer.SubmitMatrix(ref world); for (int i = 0; i < l.Length; i++) { var dc = l[i]; MaterialAnim ma = null; Material mat = overrideMat; if (mat == null) { mat = dc.GetMaterial(res); if (mat != null) { ma = dc.GetMaterialAnim(mc); } else { mat = res.DefaultMaterial; } } float z = 0; if (mat.Render.IsTransparent) { z = RenderHelpers.GetZ(world, mat.Render.Camera.Position, Center); } WorldMatrixHandle worldHandle = wm; if (dc.HasScale) { Matrix4x4 tr = dc.Scale * world; worldHandle = buffer.WorldBuffer.SubmitMatrix(ref tr); } buffer.AddCommand(mat.Render, ma, worldHandle, lights, dc.Buffer, PrimitiveTypes.TriangleList, dc.BaseVertex, dc.StartIndex, dc.PrimitiveCount, SortLayers.OBJECT, z ); } }
public unsafe void DrawImmediate(int level, ResourceManager res, RenderState renderState, Matrix4x4 world, ref Lighting lights, MaterialAnimCollection mc, Material overrideMat = null) { if (Levels == null || Levels.Length < level) { return; } var l = Levels[level]; if (l == null) { return; } Mat4Source src; Mat4Source world2; src.World = world; Matrix4x4.Invert(world, out src.Normal); src.Normal = Matrix4x4.Transpose(src.Normal); for (int i = 0; i < l.Length; i++) { var dc = l[i]; MaterialAnim ma = null; Material mat = overrideMat; if (mat == null) { mat = dc.GetMaterial(res); if (mat != null) { ma = dc.GetMaterialAnim(mc); } else { mat = res.DefaultMaterial; } } WorldMatrixHandle handle; handle.Source = (Matrix4x4 *)&src; handle.ID = ulong.MaxValue; if (dc.HasScale) { world2.World = dc.Scale * world; Matrix4x4.Invert(world2.World, out world2.Normal); world2.Normal = Matrix4x4.Transpose(world2.Normal); handle.Source = (Matrix4x4 *)&world2; handle.ID = ulong.MaxValue; } Matrix4x4 tr = world; if (dc.HasScale) { tr = dc.Scale * world; } mat.Render.World = handle; mat.Render.MaterialAnim = ma; mat.Render.Use(renderState, dc.Buffer.VertexType, ref lights); dc.Buffer.Draw(PrimitiveTypes.TriangleList, dc.BaseVertex, dc.StartIndex, dc.PrimitiveCount); } }
public void DrawImmediate(int level, ResourceManager res, RenderState renderState, Matrix4x4 world, ref Lighting lights, MaterialAnimCollection mc, Material overrideMat = null) { if (Levels == null || Levels.Length < level) { return; } var l = Levels[level]; if (l == null) { return; } for (int i = 0; i < l.Length; i++) { var dc = l[i]; MaterialAnim ma = null; Material mat = overrideMat; if (mat == null) { mat = dc.GetMaterial(res); if (mat != null) { ma = dc.GetMaterialAnim(mc); } else { mat = res.DefaultMaterial; } } Matrix4x4 tr = world; if (dc.HasScale) { tr = dc.Scale * world; } mat.Render.World = tr; mat.Render.Use(renderState, dc.Buffer.VertexType, ref lights); dc.Buffer.Draw(PrimitiveTypes.TriangleList, dc.BaseVertex, dc.StartIndex, dc.PrimitiveCount); } }