Link to home
Start Free TrialLog in
Avatar of kamarey
kamarey

asked on

DirectX8

I have GeForce 2 MX 200,  thereis hardware T&L block
Here is the function that creates device:
          hr = pID3D->CreateDevice(D3DADAPTER_DEFAULT,
                              D3DDEVTYPE_HAL,
                              hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                              &d3dpp,
                              &pID3DDevice);

Explain me please what difference between D3DDEVTYPE_HAL , D3DDEVTYPE_REF and D3DDEVTYPE_SW, and what difference between D3DCREATE_SOFTWARE_VERTEXPROCESSING, D3DCREATE_HARDWARE_VERTEXPROCESSING and D3DCREATE_MIXED_VERTEXPROCESSING. And what does this function:
     SetRenderState(D3DRS_SOFTWAREVERTEXPROCESSING, TRUE or FALSE);

And the last question why with my display adapter D3DCREATE_SOFTWARE_VERTEXPROCESSING works much faster then D3DCREATE_HARDWARE_VERTEXPROCESSING?
Avatar of cybermike3d
cybermike3d

Welcome to the wonderfull world of DX8 where nothing is quite what it seems.

HAL = Hardware Abstraction Layer is the layer of code to which commands are issued. The commands are independent of the type of hardware used. The HAL is then linked to the driver software provided by the manufacturer. Then you have a thing called the REFERENCE RASTERISER which will in software emulate the functionality of the HARDWARE. It is a HARDWARE EMULATOR If your 3d Graphics are not behaving, switch to the REFERENCE RASTERISER. If you get a proper 3d image, then you must start looking at the drivers and paramater settings for the particular card.  On the lower end cards, not all of the functionality of the REFerence rasterizer is supported, so u would use MIXED ... typicaly the SOFTWARE would performe certain aspects of the 3D render, then custom FX, like specularity lighting etc would be done by the REFerence rasteriser in the MIXED mode.

HARDWARE ABSTARCION LAYER is an intermediary layer that translates the DX8 command into a format that will be understood by the 3D card.
SOFTWARE renders using the drivers supplied by the manuf.
REFERENCE RASTERIZER is the full dx8 functinalty provided in software without accessing the 3D card at all.


Thats it in a simplified nushell.

I hope this answers your question ?
Avatar of kamarey

ASKER

1. Can you explain me what differens between definition of VERTEXPROCESSING in CreateDevice and SetRenderState functions?
2. Why SOFTWARE_VERTEXPROCESSING works much faster than HARDWARE_VERTEXPROCESSING with my graphic card ( there is some function that my graphic card doesn't have it as hardware? I don't do something like environment bump mapping which my card doesn't support. My program just draws a 3d object with big amount of faces ).
3. Is here a problem that I have with lightning with HARDWARE_VERTEXPROCESSING?

P.S. If DirectX is a wonderfull world, why I cann't find information that I need in the internet(there are only tutorials for beginers)?
ASKER CERTIFIED SOLUTION
Avatar of cybermike3d
cybermike3d

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of kamarey

ASKER

If I understood right, HARDWARE vertexprocessing must work faster, when I place an object(vertex or index buffer) in video memory. I did so using the D3DXMESH_MANAGED flag in D3DXCreateMesh and there is no difference.

Can you provide some links to sites with DirectX8 tutorias.
And I don't know what you want to read in DirectX8 SDK(I have it full, ~140MB) tutorials. And you will agree that it is imposible to learn DirectX by reading its tutorial, isn't it?

P.S. How did you find this question? In the 3D Game topic or by link in C++ tpoic?