2009-10-31 14 views
0

J'écris des crochets de Windows pour DirectX 6.1. Je veux intercepter des appels pour EMBM (Environnement Mappé Bump Mapping) et passer les données à la propriété Bump Shader, de sorte que l'application qui dépend de EMBM fonctionnera correctement. Le seul problème est que DX 6.1 n'autorise pas les shaders. Je ne peux pas simplement remplacer Direct3DDevice3 par la classe du SDK plus récent, parce que ses méthodes utilisent différents ensembles d'arguments et que l'application qui utilise ma DLL hookée va planter. Je ne sais pas comment contourner. Je ne suis pas très bon à DirectX (peut-être y at-il un moyen plus efficace d'implémenter bump dans DX 6.1 qui fonctionnera sur du matériel moderne?) Peut-être qu'il est possible d'interroger une interface dans D3Device qui me permettra d'utiliser des shaders?Hooks pour Direct3D 6.1 pour remplacer EMBM avec shaders

Tout ce qui pourrait me diriger dans la bonne direction serait très apprécié.

Répondre

1

Chaque périphérique Direct 3D dérive directement de IUnknown, donc vous ne pouvez pas QI d'un périphérique v6 à un périphérique v9. La seule façon de faire ce que vous voulez (au-dessus du niveau du pilote) est d'implémenter l'ensemble du périphérique v6 et de traduire tous les appels vers leurs équivalents v9. Bien sûr, vous avez alors un problème si le jeu implémente embm via v7 ou v8 ...