Esempio n. 1
0
        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++;
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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++;
        }