Alright, so I want to do hardware instancing, but my render loop draws nothing.
Here's my HLSL code for the instancing thing:
float4x4 world;
struct VS_INPUT {
float4 Pos : POSITION;
};
struct VS_OUTPUT {
float4 Pos : POSITION;
};
void vs(in VS_INPUT In, out VS_OUTPUT Out) {
Out.Pos=mul(In.Pos,world);
};
technique m {
pass P0 {
VertexShader = compile vs_2_0 vs();
}
}
And now, here's my render procedure:
Public Sub Render()
If DEVICE Is Nothing OrElse RENDER_PAUSE Then Exit Sub
DEVICE.Clear(ClearFlags.Target, BACKGROUND_COLOR, 0.0F, 0)
DEVICE.BeginScene()
SetupLights()
DEVICE.Material = SELECTED_COMPUTER_MATERIAL
Try
Dim RandomEngine As New Random
Dim CoordinateData(10 - 1) As Vector3
For Index As Integer = 0 To 10 - 1
CoordinateData(Index) = New Vector3(RandomEngine.NextDouble * VIEWPORT_SIZE.Width, RandomEngine.NextDouble * VIEWPORT_SIZE.Height, ZOOMING)
Next
Dim Buffer As New VertexBuffer(DEVICE, System.Runtime.InteropServices.Marshal.SizeOf(Vector3.Zero) * 10, Usage.WriteOnly, VertexFormat.Position, Pool.Default)
Buffer.Lock(0, System.Runtime.InteropServices.Marshal.SizeOf(Vector3.Zero) * 10, LockFlags.None).WriteRange(CoordinateData)
Buffer.Unlock()
DEVICE.SetStreamSourceFrequency(0, 10, StreamSource.IndexedData)
DEVICE.SetStreamSource(0, VIRUS_MESH.VertexBuffer, 0, VIRUS_MESH.BytesPerVertex)
DEVICE.SetStreamSourceFrequency(1, 1, StreamSource.InstanceData)
DEVICE.SetStreamSource(1, Buffer, 0, System.Runtime.InteropServices.Marshal.SizeOf(Vector3.Zero))
Dim Declaration As New VertexDeclaration(DEVICE, VertexDeclaration)
DEVICE.VertexDeclaration = Declaration
DEVICE.Indices = VIRUS_MESH.IndexBuffer
OBJECT_EFFECT.SetValue(New EffectHandle("world"), DEVICE.GetTransform(TransformState.World))
Dim Passes As Integer = OBJECT_EFFECT.Begin(FX.None)
For Pass As Integer = 0 To Passes - 1
OBJECT_EFFECT.BeginPass(Pass)
DEVICE.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, VIRUS_MESH.VertexCount, 0, VIRUS_MESH.FaceCount)
OBJECT_EFFECT.EndPass()
Next
OBJECT_EFFECT.End()
DEVICE.SetStreamSourceFrequency(0, 1, 0)
DEVICE.SetStreamSourceFrequency(1, 1, 0)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
DEVICE.EndScene()
DEVICE.Present()
End Sub
Any ideas to why this isn't working?