Index: ddraw/glDirect3DDevice.cpp |
— | — | @@ -142,7 +142,9 @@ |
143 | 143 | 0,
|
144 | 144 | 0,
|
145 | 145 | D3DTTFF_DISABLE,
|
146 | | - NULL
|
| 146 | + NULL,
|
| 147 | + 0,
|
| 148 | + 0
|
147 | 149 | };
|
148 | 150 | const TEXTURESTAGE texstagedefault1 =
|
149 | 151 | {
|
— | — | @@ -166,7 +168,9 @@ |
167 | 169 | 0,
|
168 | 170 | 0,
|
169 | 171 | D3DTTFF_DISABLE,
|
170 | | - NULL
|
| 172 | + NULL,
|
| 173 | + 0,
|
| 174 | + 0
|
171 | 175 | };
|
172 | 176 |
|
173 | 177 | int setdrawmode(D3DPRIMITIVETYPE d3dptPrimitiveType)
|
— | — | @@ -869,6 +873,129 @@ |
870 | 874 | HRESULT WINAPI glDirect3DDevice7::SetTextureStageState(DWORD dwStage, D3DTEXTURESTAGESTATETYPE dwState, DWORD dwValue)
|
871 | 875 | {
|
872 | 876 | if(!this) return DDERR_INVALIDPARAMS;
|
| 877 | + if(dwStage > 7) return DDERR_INVALIDPARAMS;
|
| 878 | + switch(dwState)
|
| 879 | + {
|
| 880 | + case D3DTSS_COLOROP:
|
| 881 | + if(!dwValue || (dwValue > 24)) return DDERR_INVALIDPARAMS;
|
| 882 | + texstages[dwStage].colorop = (D3DTEXTUREOP)dwValue;
|
| 883 | + texstages[dwStage].dirty = true;
|
| 884 | + return D3D_OK;
|
| 885 | + case D3DTSS_COLORARG1:
|
| 886 | + if((dwValue & D3DTA_SELECTMASK) > 4) return DDERR_INVALIDPARAMS;
|
| 887 | + if(dwValue > 0x34) return DDERR_INVALIDPARAMS;
|
| 888 | + texstages[dwStage].colorarg1 = dwValue;
|
| 889 | + texstages[dwStage].dirty = true;
|
| 890 | + return D3D_OK;
|
| 891 | + case D3DTSS_COLORARG2:
|
| 892 | + if((dwValue & D3DTA_SELECTMASK) > 4) return DDERR_INVALIDPARAMS;
|
| 893 | + if(dwValue > 0x34) return DDERR_INVALIDPARAMS;
|
| 894 | + texstages[dwStage].colorarg2 = dwValue;
|
| 895 | + texstages[dwStage].dirty = true;
|
| 896 | + return D3D_OK;
|
| 897 | + case D3DTSS_ALPHAOP:
|
| 898 | + if(!dwValue || (dwValue > 24)) return DDERR_INVALIDPARAMS;
|
| 899 | + texstages[dwStage].alphaop = (D3DTEXTUREOP )dwValue;
|
| 900 | + texstages[dwStage].dirty = true;
|
| 901 | + return D3D_OK;
|
| 902 | + case D3DTSS_ALPHAARG1:
|
| 903 | + if((dwValue & D3DTA_SELECTMASK) > 4) return DDERR_INVALIDPARAMS;
|
| 904 | + if(dwValue > 0x34) return DDERR_INVALIDPARAMS;
|
| 905 | + texstages[dwStage].alphaarg1 = dwValue;
|
| 906 | + texstages[dwStage].dirty = true;
|
| 907 | + return D3D_OK;
|
| 908 | + case D3DTSS_ALPHAARG2:
|
| 909 | + if((dwValue & D3DTA_SELECTMASK) > 4) return DDERR_INVALIDPARAMS;
|
| 910 | + if(dwValue > 0x34) return DDERR_INVALIDPARAMS;
|
| 911 | + texstages[dwStage].alphaarg2 = dwValue;
|
| 912 | + texstages[dwStage].dirty = true;
|
| 913 | + return D3D_OK;
|
| 914 | + case D3DTSS_BUMPENVMAT00:
|
| 915 | + memcpy(&texstages[dwStage].bumpenv00,&dwValue,sizeof(D3DVALUE));
|
| 916 | + texstages[dwStage].dirty = true;
|
| 917 | + return D3D_OK;
|
| 918 | + case D3DTSS_BUMPENVMAT01:
|
| 919 | + memcpy(&texstages[dwStage].bumpenv01,&dwValue,sizeof(D3DVALUE));
|
| 920 | + texstages[dwStage].dirty = true;
|
| 921 | + return D3D_OK;
|
| 922 | + case D3DTSS_BUMPENVMAT10:
|
| 923 | + memcpy(&texstages[dwStage].bumpenv10,&dwValue,sizeof(D3DVALUE));
|
| 924 | + texstages[dwStage].dirty = true;
|
| 925 | + return D3D_OK;
|
| 926 | + case D3DTSS_BUMPENVMAT11:
|
| 927 | + memcpy(&texstages[dwStage].bumpenv11,&dwValue,sizeof(D3DVALUE));
|
| 928 | + texstages[dwStage].dirty = true;
|
| 929 | + return D3D_OK;
|
| 930 | + case D3DTSS_TEXCOORDINDEX:
|
| 931 | + if((dwValue & 0xFFFF) > 7) return DDERR_INVALIDPARAMS;
|
| 932 | + if((dwValue >> 16) > 3) return DDERR_INVALIDPARAMS;
|
| 933 | + texstages[dwStage].texcoordindex = dwValue;
|
| 934 | + texstages[dwStage].dirty = true;
|
| 935 | + return D3D_OK;
|
| 936 | + case D3DTSS_ADDRESS:
|
| 937 | + if(!dwValue || (dwValue > 4)) return DDERR_INVALIDPARAMS;
|
| 938 | + texstages[dwStage].addressu = (D3DTEXTUREADDRESS)dwValue;
|
| 939 | + texstages[dwStage].addressv = (D3DTEXTUREADDRESS)dwValue;
|
| 940 | + texstages[dwStage].dirty = true;
|
| 941 | + return D3D_OK;
|
| 942 | + case D3DTSS_ADDRESSU:
|
| 943 | + if(!dwValue || (dwValue > 4)) return DDERR_INVALIDPARAMS;
|
| 944 | + texstages[dwStage].addressu = (D3DTEXTUREADDRESS)dwValue;
|
| 945 | + texstages[dwStage].dirty = true;
|
| 946 | + return D3D_OK;
|
| 947 | + case D3DTSS_ADDRESSV:
|
| 948 | + if(!dwValue || (dwValue > 4)) return DDERR_INVALIDPARAMS;
|
| 949 | + texstages[dwStage].addressv = (D3DTEXTUREADDRESS)dwValue;
|
| 950 | + texstages[dwStage].dirty = true;
|
| 951 | + return D3D_OK;
|
| 952 | + case D3DTSS_BORDERCOLOR:
|
| 953 | + texstages[dwStage].bordercolor = dwValue;
|
| 954 | + texstages[dwStage].dirty = true;
|
| 955 | + return D3D_OK;
|
| 956 | + case D3DTSS_MAGFILTER:
|
| 957 | + if(!dwValue || (dwValue > 5)) return DDERR_INVALIDPARAMS;
|
| 958 | + texstages[dwStage].magfilter = (D3DTEXTUREMAGFILTER)dwValue;
|
| 959 | + texstages[dwStage].dirty = true;
|
| 960 | + return D3D_OK;
|
| 961 | + case D3DTSS_MINFILTER:
|
| 962 | + if(!dwValue || (dwValue > 3)) return DDERR_INVALIDPARAMS;
|
| 963 | + texstages[dwStage].minfilter = (D3DTEXTUREMINFILTER)dwValue;
|
| 964 | + texstages[dwStage].dirty = true;
|
| 965 | + return D3D_OK;
|
| 966 | + case D3DTSS_MIPFILTER:
|
| 967 | + if(!dwValue || (dwValue > 3)) return DDERR_INVALIDPARAMS;
|
| 968 | + texstages[dwStage].mipfilter = (D3DTEXTUREMIPFILTER)dwValue;
|
| 969 | + texstages[dwStage].dirty = true;
|
| 970 | + return D3D_OK;
|
| 971 | + case D3DTSS_MIPMAPLODBIAS:
|
| 972 | + memcpy(&texstages[dwStage].lodbias,&dwValue,sizeof(D3DVALUE));
|
| 973 | + texstages[dwStage].dirty = true;
|
| 974 | + return D3D_OK;
|
| 975 | + case D3DTSS_MAXMIPLEVEL:
|
| 976 | + texstages[dwStage].miplevel = dwValue;
|
| 977 | + texstages[dwStage].dirty = true;
|
| 978 | + return D3D_OK;
|
| 979 | + case D3DTSS_MAXANISOTROPY:
|
| 980 | + texstages[dwStage].anisotropy = dwValue;
|
| 981 | + texstages[dwStage].dirty = true;
|
| 982 | + return D3D_OK;
|
| 983 | + case D3DTSS_BUMPENVLSCALE:
|
| 984 | + memcpy(&texstages[dwStage].bumpenvlscale,&dwValue,sizeof(D3DVALUE));
|
| 985 | + texstages[dwStage].dirty = true;
|
| 986 | + return D3D_OK;
|
| 987 | + case D3DTSS_BUMPENVLOFFSET:
|
| 988 | + memcpy(&texstages[dwStage].bumpenvloffset,&dwValue,sizeof(D3DVALUE));
|
| 989 | + texstages[dwStage].dirty = true;
|
| 990 | + return D3D_OK;
|
| 991 | + case D3DTSS_TEXTURETRANSFORMFLAGS:
|
| 992 | + if((dwValue & 0xFF) > 4) return DDERR_INVALIDPARAMS;
|
| 993 | + if((dwValue >> 8) > 1) return DDERR_INVALIDPARAMS;
|
| 994 | + texstages[dwStage].textransform = dwValue;
|
| 995 | + texstages[dwStage].dirty = true;
|
| 996 | + return D3D_OK;
|
| 997 | + default:
|
| 998 | + return DDERR_INVALIDPARAMS;
|
| 999 | + }
|
873 | 1000 | FIXME("glDirect3DDevice7::SetTextureStageState: stub");
|
874 | 1001 | ERR(DDERR_GENERIC);
|
875 | 1002 | }
|
Index: ddraw/glDirect3DDevice.h |
— | — | @@ -45,6 +45,8 @@ |
46 | 46 | D3DVALUE bumpenvloffset;
|
47 | 47 | D3DTEXTURETRANSFORMFLAGS textransform;
|
48 | 48 | glDirectDrawSurface7 *texture;
|
| 49 | + bool dirty;
|
| 50 | + __int64 shaderid;
|
49 | 51 | };
|
50 | 52 |
|
51 | 53 | class glDirect3DLight;
|