public override void PrepareInstanced(RendererContext rc, VertexBufferLayoutKind[] vblks, VertexBuffer vb) { if (MyModel != null) { foreach (Mesh msh in MyModel.Meshes) { msh.m_VertexBufferArray.BindVertexBufferArray(); vb.BindBuffer(); foreach (VertexBufferLayoutKind vblk in vblks) { rc.EnableVertexAttribute((int)vblk.AttributeID); rc.VertexAttributePointer(vblk); rc.VertexAttributeDivisor((int)vblk.AttributeID, 1); } vb.UnbindBuffer(); msh.m_VertexBufferArray.UnbindVertexBufferArray(); } } else this.ErrorCount++; }
public override void Draw(RendererContext rc) { lock (ListLock) { //Preparing if (InstanceDataVertexBuffer != null && SceneObjects.Count > 0) { VertexBufferLayoutKind[] vblk = new VertexBufferLayoutKind[6]; //Set information for (int i = 0; i < 4; i++) { VertexBufferLayoutKind v = new VertexBufferLayoutKind(); v.AttributeID = (uint)LayoutLocationOffset + (uint)i; v.AttributeSize = 4; v.AttributeType = RendererVertexAttribType.Float; v.Normalized = false; v.Offset = sizeof(float) * 4 * i; v.Stride = SceneObjectArrayInstanceData.SIZE; vblk[i] = v; } vblk[4] = new VertexBufferLayoutKind() {AttributeID = (uint)LayoutLocationOffset + 4, AttributeSize = 4, AttributeType = RendererVertexAttribType.Float, Normalized = false, Offset = sizeof(float) * 4 * 4, Stride = SceneObjectArrayInstanceData.SIZE }; vblk[5] = new VertexBufferLayoutKind() {AttributeID = (uint)LayoutLocationOffset + 5, AttributeSize = 4, AttributeType = RendererVertexAttribType.Float, Normalized = false, Offset = sizeof(float) * 4 * 4 + sizeof(float) * 4, Stride = SceneObjectArrayInstanceData.SIZE }; //Send it to Renderer SceneObjects[0].PrepareInstanced(rc, vblk, InstanceDataVertexBuffer); SceneObjects[0].DrawInstanced(rc, SceneObjects.Count); SceneObjects[0].UnPrepareInstanced(rc, vblk); } } }
public override void PrepareInstanced(RendererContext rc, VertexBufferLayoutKind[] vblks, VertexBuffer vb) { rc._2DVertexBufferArray.BindVertexBufferArray(); vb.BindBuffer(); for (int i = 0; i < vblks.Length; i++) { rc.EnableVertexAttribute((int)vblks[i].AttributeID); rc.VertexAttributePointer(vblks[i]); rc.VertexAttributeDivisor((int)vblks[i].AttributeID, 1); } vb.UnbindBuffer(); rc._2DVertexBufferArray.UnbindVertexBufferArray(); }
public override void UnPrepareInstanced(RendererContext rc, VertexBufferLayoutKind[] vblks) { rc._2DVertexBufferArray.BindVertexBufferArray(); for (int i = 0; i < vblks.Length; i++) rc.DisableVertexAttribute((int)vblks[i].AttributeID); rc._2DVertexBufferArray.UnbindVertexBufferArray(); }
public override void UnPrepareInstanced(RendererContext rc, VertexBufferLayoutKind[] vblks) { if (MyModel != null) { foreach (Mesh msh in MyModel.Meshes) { msh.m_VertexBufferArray.BindVertexBufferArray(); foreach (VertexBufferLayoutKind vblk in vblks) rc.DisableVertexAttribute((int)vblk.AttributeID); msh.m_VertexBufferArray.UnbindVertexBufferArray(); } } else this.ErrorCount++; }