D3D7 -> WineD3D, 2nd attempt

Stefan Dösinger stefandoesinger at gmx.at
Sun Oct 30 07:15:56 CST 2005


Hello,

> It may be possible to use the feedback buffer and get OpenGL to do all the
> work
> http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glf
>unc02_3m42.asp.
>
> The majority of the math is fairly simple matrix transforms, OpenGL
> extensions usually have all the math required.
> http://oss.sgi.com/projects/ogl-sample/registry/
The feedback buffers are definitly interesting here.
I've noticed that the D3D7 IDirect3DVertexBuffer7::ProcessVertices and D3D9 
IDirect3DDevice9::ProcessVertices are very similar, but they have a few 
differences.
While the D3D9 funktion is related to hardware vertex shaders, the D3D7 
funktion does it's job explicitly in software(according to the DX7 sdk). The 
reason is that vertex shaders were simply not available in when DX7 came out.

The calculations that DX7's ProcessVertices can perform are clipping, 
lighting, some extent thing and transforming the vertices. Most things (or 
all) can be done with OpenGL extentions and Vertex shaders. However, I'd 
suggest a software implementation for DX7 as a fallback for cards which don't 
have shaders and cards which don't have the necessary extensions.

I have to read the data locations from the vertex buffers to do anything with 
them. Can I do the following:
SetStreamSource(Input VB);
primitiveConvertToStridedData(input_strided);
SetStreamSource(Output VB);
primitiveConvertToStridedData(output strided);

// Do calculations

/*SetStreamSource(NULL) if necessary */

Is this possible, or will it cause problems?

> 1.5fps seems very slow, even for DrawStridedSlow but DrawStridedSlow will
> be superseded as soon as the colour fixups are in place.
I guess this happens because I am poking completely senseless values into 
drawPrimitive, like sensless colors and texture coordinates. The numbers are 
not 0, as I thought first.

Stefan



More information about the wine-devel mailing list