View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# DirectX polygons

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

3 replies to this topic

### #1Focusrite  Members

Posted 21 March 2012 - 10:21 AM

Hey Gamedev!

I need to render 2d polygons and thus came up with this solution:

if(FAILED(gd3dDevice->CreateVertexBuffer(sizeof(RectVertex) *32, D3DUSAGE_DYNAMIC, 0, D3DPOOL_DEFAULT, &mVB_Rect, NULL)))
MessageBox(0, "Error creating RectVertex buffer", 0, 0); //Slightly misleading name, it's a vertexdefiniton containing just position and color

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

void Graphics::drawPolygon(cPolygon* shape, D3DCOLOR color, bool filled)
{
if(shape->requireTriangulation())
shape->triangulate(); //Triangulates the polygon if not already done - stores in "shape->triangles"

// Set vertex declaration and stream source
gd3dDevice->SetVertexDeclaration(RectVertex::Decl);
gd3dDevice->SetStreamSource(0, mVB_Rect, 0, sizeof(RectVertex));

// Lock and set the vertices position and texture coordinates
RectVertex *vertices = 0;
mVB_texture->Lock(0, 0, (void**)&vertices, 0);

for(int i = 0; i<shape->getTriangles().size()/3; i++)
{
vertices[i*3+0].color = color;
vertices[i*3+0].pos.x = shape->getTriangles()[i*3+0].x + shape->getPos().x; //Due to triangles beeing in local coordinates
vertices[i*3+0].pos.y = shape->getTriangles()[i*3+0].y + shape->getPos().y;
vertices[i*3+0].pos.z = 0.0f;

vertices[i*3+1].color = color;
vertices[i*3+1].pos.x = shape->getTriangles()[i*3+1].x + shape->getPos().x;
vertices[i*3+1].pos.y = shape->getTriangles()[i*3+1].y + shape->getPos().y;
vertices[i*3+1].pos.z = 0.0f;

vertices[i*3+2].color = color;
vertices[i*3+2].pos.x = shape->getTriangles()[i*3+2].x + shape->getPos().x;
vertices[i*3+2].pos.y = shape->getTriangles()[i*3+2].y + shape->getPos().y;
vertices[i*3+2].pos.z = 0.0f;
}
// Unlock the vertex buffer
mVB_texture->Unlock();

if(filled)
gd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
else
gd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);

// Draw image
gd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, shape->getTriangles().size()/3);
}



But it doesn't render at all! If i debug, it's ran, and the shape has the values it is supposed to have.
I do not believe the triangulation is the issue, it was not originally written by me, and on debug it gives *very* plausable results.

The (only slightly modded) triangulation technique here: http://www.flipcode....ngulation.shtml

Anyone have any clue on why it does not work?

- Focusrite
[Not related to the company]

### #2Evil Steve  Members

Posted 21 March 2012 - 10:38 AM

Do you have anything else rendering?
You could also try running your app through PIX and see if it shows anything relevant.

Steve Macpherson
Senior Systems Programmer

Rockstar North

### #3Focusrite  Members

Posted 21 March 2012 - 12:02 PM

Ah sorry should mention that, yeah other types of rendering works, graphics renders rectangles, textures, lines etc without any issues at all, it's just this one giving me a headache. And no, afraid it's not the shaders as they're as of yet to be added to the project.. hm.

I haven't heard of that PIX, what kind of tool is it? Google seemed not so helpful when searching for it.
[Not related to the company]

### #4Evil Steve  Members

Posted 22 March 2012 - 03:54 AM

So are you using the fixed function pipeline for rendering?

PIX is a tool that comes with the DirectX SDK that is extremely useful for debugging D3D applications. It's fairly intuitive to just poke around with, but you can also check out the help file that comes with it for more detailed stuff.

Try starting it up, go to File -> New Experiment, put the path to your compiled .exe into it and select "A single-frame capture of Direct3D whenevef F12 is pressed" and click Start Experiment. Then hit F12 when something should be rendering then close your app.
You can then expand the frame in the lower left pane, and look at all the draw calls made. From there, you can see the vertex positions before and after the vertex shader (or fixed-function equivalent) is run, which will hopefully tell you why the vertices aren't visible (E.g. back-facing, offscreen, 0 alpha, etc).

Steve Macpherson
Senior Systems Programmer

Rockstar North

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.