RE: Exception raised when drawing many circles



Hello Olivier,
|>As you can see in the sample code that I have posted, I make absolutely no
|>call to IDirect3DDevice::DrawIndexedPrimitives(). The only drawing call that
|>I make is to Line.DrawTransform(), and it is INSIDE this function that the

I know you did not call IDirect3DDevice::DrawIndexedPrimitives() in code. actually, IDirect3DDevice::DrawIndexedPrimitives() is used inside the
ID3DXLine::DrawTransform (in mdx, it is Line.DrawTransform()).

|>problem occurs. The vertex buffer is not mine but the one used internally by
|>the class Line (there is no vertex buffer in my sample code).

I am not sure if the code is written by you, but in the code you post to me, I can find following lines:
//-----------------------------------------------------------------------------------------------------
private void SetupBuffersRH()
{
int count = 144;
double radius = 1.0;
double angle;

this.polyline = new Vector3[count + 1];
this.polylineTra = new Vector3[count + 1];

for (int i = 0; i <= count; i++)
{
angle = i * 2.0 * Math.PI / count;
this.polyline[i] = new Vector3(
(float)(radius * Math.Cos(angle)),
(float)(radius * Math.Sin(angle)),
0.0f);
}
}

// and in your render code, you used following code to make the vertex buffer
for (int i = 0; i < circleCount; i++)
{
float trax = (float)(10.0 * rnd.NextDouble() - 5.0);
float tray = (float)(10.0 * rnd.NextDouble() - 5.0);

for (int j = 0; j < this.polyline.Length; j++)
{
this.polylineTra[j] = this.polyline[j];
this.polylineTra[j].X += trax;
this.polylineTra[j].Y += tray;
}

this.liner.DrawTransform(this.polylineTra, pv, Color.White);
}

//-----------------------------------------------------------------------------------------------------

>From the code above, you created a buffer with 145 vertices and then draw lines with these vertices. When dx consumes the last 4 vertices, it raises the problem.

|>My opinion is that there is a bug in Line.DrawTransform() (or
|>ID3DXLine::DrawTransform) when the length of the array of vertices is too
|>important (in my sample code, the crash occurs when the circles have 144
|>vertices, it does not occur when they have only 72 vertices).

I think you may need to check you code closely, according to line "this.polylineTra = new Vector3[count + 1];", you actually created 145 vertices (0 - 144).
this is not a bug in Line.DrawTransform(), you get this behavior because your display card does not support D3DLINECAPS_ANTIALIAS. and in this scenario,
Line.DrawTransform() make a internal decision that uses D3DPT_TRIANGLELIST instead of D3DPT_LINESTRIP to draw the line.
As you have found, if we explicitly use D3DPT_LINESTRIP to consume the vertices buffer (eg. call Device.DrawUserPrimitives(PrimitiveType.LineStrip)), it will work fine.

Hope this clarify the problem. if there is anything unclear, please don't hesitate to let me know.

Best regards,
Rhett Gong [MSFT]
Microsoft Online Partner Support
Get Secure! - www.microsoft.com/security
http://support.microsoft.com/default.aspx?scid=/servicedesks/msdn/nospam.asp&SD=msdn

This posting is provided "AS IS" with no warranties and confers no rights.

.



Relevant Pages

  • Re: IMetaDataEmit DefineUserString
    ... Sorry for letting you wait. ... I have contacted "Jan Kotas" for this article. ... there is a little bug in the sample code snippet. ...
    (microsoft.public.dotnet.framework.clr)
  • Re: simpleDateFormat and April month
    ... i had a bug to report. ... Here is sample code to test: ... > public Date StrToDatethrows Exception { ...
    (comp.lang.java.programmer)
  • Re: Check group member ship or a user
    ... > Just out of curiosity, what version of .NET are you using? ... > of 1.0 had a bug where IsInRole was case sensitive. ... > quick Google search should turn up some sample code that shows you how to ... > Joe K. ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Check group member ship or a user
    ... > Just out of curiosity, what version of .NET are you using? ... > of 1.0 had a bug where IsInRole was case sensitive. ... > quick Google search should turn up some sample code that shows you how to ... > Joe K. ...
    (microsoft.public.dotnet.security)
  • Re: Why is my overlapped WriteFile getting blocked? (repost)
    ... There is a sample code inside our sdk located in "\Microsoft ... You can add debug ... Microsoft Online Partner Support ... This posting is provided "AS IS" with no warranties, ...
    (microsoft.public.win32.programmer.networks)

Loading