implement draw_polygon

This commit is contained in:
georges 2000-11-10 02:59:45 +00:00
parent 389679a8e7
commit cce8ca381d

View File

@ -400,7 +400,7 @@ init_dx( LPDIRECTDRAW7 context,
if(((D3DDevDesc.dpcTriCaps.dwSrcBlendCaps & REQUIRED_BLENDCAPS)!=REQUIRED_BLENDCAPS) ||
((D3DDevDesc.dpcTriCaps.dwDestBlendCaps & REQUIRED_BLENDCAPS)!=REQUIRED_BLENDCAPS)) {
dxgsg_cat.error() << "device is missing texture blending capabilities, blending may not work correctly\n";
dxgsg_cat.error() << "device is missing alpha blending capabilities, blending may not work correctly\n";
}
if(!(D3DDevDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_TRANSPARENCY)) {
@ -418,6 +418,11 @@ init_dx( LPDIRECTDRAW7 context,
dxgsg_cat.error() << "device is missing tri-linear mipmap filtering capability, texture mipmaps may not supported!!!\n";
}
#define REQUIRED_TEXBLENDCAPS (D3DTEXOPCAPS_MODULATE | D3DTEXOPCAPS_SELECTARG1 | D3DTEXOPCAPS_SELECTARG2)
if((D3DDevDesc.dwTextureOpCaps & REQUIRED_TEXBLENDCAPS)!=REQUIRED_TEXBLENDCAPS) {
dxgsg_cat.error() << "device is missing some required texture blending capabilities, texture blending may not work properly!!!\n";
}
SetRect(&clip_rect, 0,0,0,0); // no clip rect set
_d3dDevice->SetRenderState(D3DRENDERSTATE_AMBIENTMATERIALSOURCE, D3DMCS_COLOR1);
@ -980,6 +985,12 @@ draw_line(const GeomLine* geom) {
dxgsg_cat.debug() << "draw_line()" << endl;
#endif
#ifdef _DEBUG
if(geom->get_width()!=1.0f) {
dxgsg_cat.error() << "DX does not support drawing lines with a non-1.0 pixel width!!\n";
}
#endif
#ifdef WBD_GL_MODE
call_glLineWidth(geom->get_width());
@ -1078,6 +1089,12 @@ draw_linestrip(const GeomLinestrip* geom) {
dxgsg_cat.debug() << "draw_linestrip()" << endl;
#endif
#ifdef _DEBUG
if(geom->get_width()!=1.0f) {
dxgsg_cat.error() << "DX does not support drawing lines with a non-1.0 pixel width!!\n";
}
#endif
#ifdef WBD_GL_MODE
call_glLineWidth(geom->get_width());
@ -1200,6 +1217,19 @@ draw_polygon(const GeomPolygon *geom) {
dxgsg_cat.debug() << "draw_polygon()" << endl;
#endif
/* wireframe polygon will be drawn as multu-tri trifan until I get this casting issue straightened out
DWORD rstate;
_d3dDevice->GetRenderState(D3DRENDERSTATE_FILLMODE, &rstate);
if(rstate!=D3DFILL_WIREFRAME) {
draw_multitri(geom, D3DPT_TRIANGLEFAN);
} else {
Geom *gp=dynamic_cast<Geom *>(geom); doesnt work
draw_linestrip(gp);
}
*/
// draw_multitri(geom, D3DPT_TRIANGLEFAN);
#ifdef WBD_GL_MODE
int nprims = geom->get_num_prims();
const int *plen = geom->get_lengths();
@ -1904,6 +1934,10 @@ void DXGraphicsStateGuardian::
draw_sphere(const GeomSphere *geom) {
activate();
#ifdef _DEBUG
dxgsg_cat.debug() << "draw_sphere() unimplemented in DX!!\n";
#endif
#ifdef GSG_VERBOSE
dxgsg_cat.debug() << "draw_sphere()" << endl;
#endif