Hi,
I'm a noob trying to use managed DirectX (VC# 2003, DX9.0 Apr 2005 SDK). I
used to use OpenGL with QT and VC++6.0, but I was a relative newcomer to
that as well.
When I used OpenGL, my understanding was that if you used display lists,
your vertices would normally be held in memory on the video card. Now, with
managed DirectX, I am looking at code that looks like this:
public void OnCreateVertexBuffer(object sender, EventArgs e)
{
VertexBuffer vb = (VertexBuffer)sender;
CustomVertex.PositionColored[] verts =
(CustomVertex.PositionColored[])vb.Lock(0,0);
verts[0].X=-1.0f; verts[0].Y=-1.0f; verts[0].Z=0.0f; verts[0].Color =
System.Drawing.Color.DarkGoldenrod.ToArgb();
verts[1].X=1.0f; verts[1].Y=-1.0f ;verts[1].Z=0.0f; verts[1].Color =
System.Drawing.Color.MediumOrchid.ToArgb();
verts[2].X=0.0f; verts[2].Y=1.0f; verts[2].Z = 0.0f; verts[2].Color =
System.Drawing.Color.Cornsilk.ToArgb();
vb.Unlock();
}
private void Render()
{
if (device == null)
return;
if (pause)
return;
//Clear the backbuffer to a blue color
device.Clear(ClearFlags.Target, System.Drawing.Color.Blue, 1.0f, 0);
//Begin the scene
device.BeginScene();
// Setup the world, view, and projection matrices
SetupMatrices();
device.SetStreamSource(0, vertexBuffer, 0);
device.VertexFormat = CustomVertex.PositionColored.Format;
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
//End the scene
device.EndScene();
device.Present();
}
Now, this code takes it's vertices from the Stream Source (the vertexBuffer)
which is in main CPU memory. I'm guessing these vertices have to cross the
bus to the video card, and then they are displayed. That sounds slower than
OpenGL display lists! Is there something in managed DirectX like an OpenGL
display list where the vertices are held in video card memory?
Thanks in advance,
Aaron Lovi
su*****@pokervillain.com