hlsl_tfx.fx
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:10k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. sampler Texture : register(s0);
  2. sampler1D Palette : register(s1);
  3. float4 Params0 : register(c0);
  4. #define bTCC (Params0[0] >= 0)
  5. #define fRT (Params0[1])
  6. #define TA0 (Params0[2])
  7. #define TA1 (Params0[3])
  8. float2 W_H : register(c1);
  9. float2 RW_RH : register(c2);
  10. float2 RW_ZERO : register(c3);
  11. float2 ZERO_RH : register(c4);
  12. //
  13. // texture sampling
  14. //
  15. float4 SampleTexture_32(in float2 Tex : TEXCOORD0) : COLOR
  16. {
  17. float4 c = tex2D(Texture, Tex);
  18. c.a *= fRT;
  19. return c;
  20. }
  21. float4 SampleTexture_24(in float2 Tex : TEXCOORD0) : COLOR
  22. {
  23. float4 c = tex2D(Texture, Tex);
  24. c.a = TA0;
  25. // c.a *= fRT; // premultiplied
  26. return c;
  27. }
  28. float4 SampleTexture_24AEM(in float2 Tex : TEXCOORD0) : COLOR
  29. {
  30. float4 c = tex2D(Texture, Tex);
  31. c.a = any(c.rgb) ? TA0 : 0;
  32. // c.a *= fRT; // premultiplied
  33. return c;
  34. }
  35. float4 SampleTexture_16(in float2 Tex : TEXCOORD0) : COLOR
  36. {
  37. float4 c = tex2D(Texture, Tex);
  38. c.a = c.a != 0 ? TA1 : TA0;
  39. // c.a *= fRT; // premultiplied
  40. return c;
  41. }
  42. float4 SampleTexture_16AEM(in float2 Tex : TEXCOORD0) : COLOR
  43. {
  44. float4 c = tex2D(Texture, Tex);
  45. c.a = c.a != 0 ? TA1 : any(c.rgb) ? TA0 : 0;
  46. // c.a *= fRT; // premultiplied
  47. return c;
  48. }
  49. static const float s_palerr = 0.001/256;
  50. float4 SampleTexture_8P_pt(in float2 Tex : TEXCOORD0) : COLOR
  51. {
  52. float4 c = tex1D(Palette, tex2D(Texture, Tex).x - s_palerr);
  53. // c.a *= fRT; // premultiplied
  54. return c;
  55. }
  56. float4 SampleTexture_8P_ln(in float2 Tex : TEXCOORD0) : COLOR
  57. {
  58. Tex -= 0.5*RW_RH; // ?
  59. float4 c00 = tex1D(Palette, tex2D(Texture, Tex).x - s_palerr);
  60. float4 c01 = tex1D(Palette, tex2D(Texture, Tex + RW_ZERO).x - s_palerr);
  61. float4 c10 = tex1D(Palette, tex2D(Texture, Tex + ZERO_RH).x - s_palerr);
  62. float4 c11 = tex1D(Palette, tex2D(Texture, Tex + RW_RH).x - s_palerr);
  63. float2 dd = frac(Tex * W_H); 
  64. float4 c = lerp(lerp(c00, c01, dd.x), lerp(c10, c11, dd.x), dd.y);
  65. c.a *= fRT;
  66. return c;
  67. }
  68. float4 SampleTexture_8HP_pt(in float2 Tex : TEXCOORD0) : COLOR
  69. {
  70. float4 c = tex1D(Palette, tex2D(Texture, Tex).a - s_palerr);
  71. c.a *= fRT;
  72. return c;
  73. }
  74. float4 SampleTexture_8HP_ln(in float2 Tex : TEXCOORD0) : COLOR
  75. {
  76. Tex -= 0.5*RW_RH; // ?
  77. float4 c00 = tex1D(Palette, tex2D(Texture, Tex).a - s_palerr);
  78. float4 c01 = tex1D(Palette, tex2D(Texture, Tex + RW_ZERO).a - s_palerr);
  79. float4 c10 = tex1D(Palette, tex2D(Texture, Tex + ZERO_RH).a - s_palerr);
  80. float4 c11 = tex1D(Palette, tex2D(Texture, Tex + RW_RH).a - s_palerr);
  81. float2 dd = frac(Tex * W_H); 
  82. float4 c = lerp(lerp(c00, c01, dd.x), lerp(c10, c11, dd.x), dd.y);
  83. c.a *= fRT;
  84. return c;
  85. }
  86. //
  87. // fog
  88. //
  89. float4 ApplyFog(in float4 Diff : COLOR, in float4 Fog : COLOR) : COLOR
  90. {
  91. Diff = saturate(Diff);
  92. Diff.rgb = lerp(Fog.rgb, Diff.rgb, Fog.a);
  93. return Diff;
  94. }
  95. //
  96. // tfx
  97. //
  98. float4 tfx0(float4 Diff, float4 TexColor) : COLOR
  99. {
  100. Diff *= 2;
  101. Diff.rgb *= TexColor.rgb;
  102. if(bTCC) Diff.a *= TexColor.a;
  103. return Diff;
  104. }
  105. float4 tfx1(float4 Diff, float4 TexColor) : COLOR
  106. {
  107. Diff = TexColor;
  108. return Diff;
  109. }
  110. float4 tfx2(float4 Diff, float4 TexColor) : COLOR
  111. {
  112. Diff.rgb *= TexColor.rgb * 2;
  113. Diff.rgb += Diff.a;
  114. if(bTCC) Diff.a = Diff.a * 2 + TexColor.a;
  115. return Diff;
  116. }
  117. float4 tfx3(float4 Diff, float4 TexColor) : COLOR
  118. {
  119. Diff.rgb *= TexColor.rgb * 2;
  120. Diff.rgb += Diff.a;
  121. if(bTCC) Diff.a = TexColor.a;
  122. return Diff;
  123. }
  124. //
  125. // main tfx 32
  126. //
  127. float4 main_tfx0_32(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  128. {
  129. return ApplyFog(tfx0(Diff, SampleTexture_32(Tex)), Fog);
  130. }
  131. float4 main_tfx1_32(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  132. {
  133. return ApplyFog(tfx1(Diff, SampleTexture_32(Tex)), Fog);
  134. }
  135. float4 main_tfx2_32(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  136. {
  137. return ApplyFog(tfx2(Diff, SampleTexture_32(Tex)), Fog);
  138. }
  139. float4 main_tfx3_32(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  140. {
  141. return ApplyFog(tfx3(Diff, SampleTexture_32(Tex)), Fog);
  142. }
  143. //
  144. // main tfx 24
  145. //
  146. float4 main_tfx0_24(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  147. {
  148. return ApplyFog(tfx0(Diff, SampleTexture_24(Tex)), Fog);
  149. }
  150. float4 main_tfx1_24(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  151. {
  152. return ApplyFog(tfx1(Diff, SampleTexture_24(Tex)), Fog);
  153. }
  154. float4 main_tfx2_24(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  155. {
  156. return ApplyFog(tfx2(Diff, SampleTexture_24(Tex)), Fog);
  157. }
  158. float4 main_tfx3_24(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  159. {
  160. return ApplyFog(tfx3(Diff, SampleTexture_24(Tex)), Fog);
  161. }
  162. //
  163. // main tfx 24 AEM
  164. //
  165. float4 main_tfx0_24AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  166. {
  167. return ApplyFog(tfx0(Diff, SampleTexture_24AEM(Tex)), Fog);
  168. }
  169. float4 main_tfx1_24AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  170. {
  171. return ApplyFog(tfx1(Diff, SampleTexture_24AEM(Tex)), Fog);
  172. }
  173. float4 main_tfx2_24AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  174. {
  175. return ApplyFog(tfx2(Diff, SampleTexture_24AEM(Tex)), Fog);
  176. }
  177. float4 main_tfx3_24AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  178. {
  179. return ApplyFog(tfx3(Diff, SampleTexture_24AEM(Tex)), Fog);
  180. }
  181. //
  182. // main tfx 16
  183. //
  184. float4 main_tfx0_16(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  185. {
  186. return ApplyFog(tfx0(Diff, SampleTexture_16(Tex)), Fog);
  187. }
  188. float4 main_tfx1_16(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  189. {
  190. return ApplyFog(tfx1(Diff, SampleTexture_16(Tex)), Fog);
  191. }
  192. float4 main_tfx2_16(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  193. {
  194. return ApplyFog(tfx2(Diff, SampleTexture_16(Tex)), Fog);
  195. }
  196. float4 main_tfx3_16(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  197. {
  198. return ApplyFog(tfx3(Diff, SampleTexture_16(Tex)), Fog);
  199. }
  200. //
  201. // main tfx 16 AEM
  202. //
  203. float4 main_tfx0_16AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  204. {
  205. return ApplyFog(tfx0(Diff, SampleTexture_16AEM(Tex)), Fog);
  206. }
  207. float4 main_tfx1_16AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  208. {
  209. return ApplyFog(tfx1(Diff, SampleTexture_16AEM(Tex)), Fog);
  210. }
  211. float4 main_tfx2_16AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  212. {
  213. return ApplyFog(tfx2(Diff, SampleTexture_16AEM(Tex)), Fog);
  214. }
  215. float4 main_tfx3_16AEM(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  216. {
  217. return ApplyFog(tfx3(Diff, SampleTexture_16AEM(Tex)), Fog);
  218. }
  219. //
  220. // main tfx 8P pt
  221. //
  222. float4 main_tfx0_8P_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  223. {
  224. return ApplyFog(tfx0(Diff, SampleTexture_8P_pt(Tex)), Fog);
  225. }
  226. float4 main_tfx1_8P_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  227. {
  228. return ApplyFog(tfx1(Diff, SampleTexture_8P_pt(Tex)), Fog);
  229. }
  230. float4 main_tfx2_8P_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  231. {
  232. return ApplyFog(tfx2(Diff, SampleTexture_8P_pt(Tex)), Fog);
  233. }
  234. float4 main_tfx3_8P_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  235. {
  236. return ApplyFog(tfx3(Diff, SampleTexture_8P_pt(Tex)), Fog);
  237. }
  238. //
  239. // main tfx 8P ln
  240. //
  241. float4 main_tfx0_8P_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  242. {
  243. return ApplyFog(tfx0(Diff, SampleTexture_8P_ln(Tex)), Fog);
  244. }
  245. float4 main_tfx1_8P_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  246. {
  247. return ApplyFog(tfx1(Diff, SampleTexture_8P_ln(Tex)), Fog);
  248. }
  249. float4 main_tfx2_8P_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  250. {
  251. return ApplyFog(tfx2(Diff, SampleTexture_8P_ln(Tex)), Fog);
  252. }
  253. float4 main_tfx3_8P_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  254. {
  255. return ApplyFog(tfx3(Diff, SampleTexture_8P_ln(Tex)), Fog);
  256. }
  257. //
  258. // main tfx 8HP pt
  259. //
  260. float4 main_tfx0_8HP_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  261. {
  262. return ApplyFog(tfx0(Diff, SampleTexture_8HP_pt(Tex)), Fog);
  263. }
  264. float4 main_tfx1_8HP_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  265. {
  266. return ApplyFog(tfx1(Diff, SampleTexture_8HP_pt(Tex)), Fog);
  267. }
  268. float4 main_tfx2_8HP_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  269. {
  270. return ApplyFog(tfx2(Diff, SampleTexture_8HP_pt(Tex)), Fog);
  271. }
  272. float4 main_tfx3_8HP_pt(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  273. {
  274. return ApplyFog(tfx3(Diff, SampleTexture_8HP_pt(Tex)), Fog);
  275. }
  276. //
  277. // main tfx 8HP ln
  278. //
  279. float4 main_tfx0_8HP_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  280. {
  281. return ApplyFog(tfx0(Diff, SampleTexture_8HP_ln(Tex)), Fog);
  282. }
  283. float4 main_tfx1_8HP_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  284. {
  285. return ApplyFog(tfx1(Diff, SampleTexture_8HP_ln(Tex)), Fog);
  286. }
  287. float4 main_tfx2_8HP_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  288. {
  289. return ApplyFog(tfx2(Diff, SampleTexture_8HP_ln(Tex)), Fog);
  290. }
  291. float4 main_tfx3_8HP_ln(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  292. {
  293. return ApplyFog(tfx3(Diff, SampleTexture_8HP_ln(Tex)), Fog);
  294. }
  295. //
  296. // main notfx
  297. //
  298. float4 main_notfx(float4 Diff : COLOR0, float4 Fog : COLOR1, float2 Tex : TEXCOORD0) : COLOR
  299. {
  300. return ApplyFog(Diff, Fog);
  301. }
  302. //
  303. // main 8P -> 32
  304. //
  305. float4 main_8PTo32(float4 Diff : COLOR0, float2 Tex : TEXCOORD0) : COLOR
  306. {
  307. return tex1D(Palette, tex2D(Texture, Tex).x - s_palerr);
  308. }