Advertisement
Guest User

Blender_Model_EbB

a guest
Aug 23rd, 2014
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.82 KB | None | 0 0
  1. // BlenderDefault.cpp: implementation of the CBlender_Model_EbB class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4.  
  5. #include "stdafx.h"
  6. #pragma hdrstop
  7.  
  8. #include "blender_Model_EbB.h"
  9.  
  10. //////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. //////////////////////////////////////////////////////////////////////
  13.  
  14. CBlender_Model_EbB::CBlender_Model_EbB ()
  15. {
  16. description.CLS = B_MODEL_EbB;
  17. description.version = 0x1;
  18. strcpy_s (oT2_Name, "$null");
  19. strcpy_s (oT2_xform, "$null");
  20. oBlend.value = FALSE;
  21. }
  22.  
  23. CBlender_Model_EbB::~CBlender_Model_EbB ()
  24. {
  25.  
  26. }
  27.  
  28. void CBlender_Model_EbB::Save( IWriter& fs )
  29. {
  30. description.version = 0x1;
  31. IBlender::Save (fs);
  32. xrPWRITE_MARKER (fs,"Environment map");
  33. xrPWRITE_PROP (fs,"Name", xrPID_TEXTURE, oT2_Name);
  34. xrPWRITE_PROP (fs,"Transform", xrPID_MATRIX, oT2_xform);
  35. xrPWRITE_PROP (fs,"Alpha-Blend", xrPID_BOOL, oBlend);
  36. }
  37.  
  38. void CBlender_Model_EbB::Load( IReader& fs, u16 version )
  39. {
  40. IBlender::Load (fs,version);
  41. xrPREAD_MARKER (fs);
  42. xrPREAD_PROP (fs,xrPID_TEXTURE, oT2_Name);
  43. xrPREAD_PROP (fs,xrPID_MATRIX, oT2_xform);
  44. if (version>=0x1) {
  45. xrPREAD_PROP (fs,xrPID_BOOL, oBlend);
  46. }
  47. }
  48.  
  49. #if RENDER==R_R1
  50. void CBlender_Model_EbB::Compile(CBlender_Compile& C)
  51. {
  52. IBlender::Compile (C);
  53. if (C.bEditor) {
  54. C.PassBegin ();
  55. {
  56. if (oBlend.value) { C.PassSET_ZB (TRUE,FALSE); C.PassSET_Blend_BLEND (); }
  57. else { C.PassSET_ZB (TRUE,TRUE); C.PassSET_Blend_SET (); }
  58. C.PassSET_LightFog (TRUE,TRUE);
  59.  
  60. // Stage1 - Env texture
  61. C.StageBegin ();
  62. C.StageSET_Address (D3DTADDRESS_CLAMP);
  63. C.StageSET_Color (D3DTA_TEXTURE, D3DTOP_SELECTARG1, D3DTA_DIFFUSE);
  64. C.StageSET_Alpha (D3DTA_TEXTURE, D3DTOP_SELECTARG1, D3DTA_DIFFUSE);
  65. C.StageSET_TMC (oT2_Name, oT2_xform, "$null", 0);
  66. C.StageEnd ();
  67.  
  68. // Stage2 - Base texture
  69. C.StageBegin ();
  70. C.StageSET_Color (D3DTA_TEXTURE, D3DTOP_BLENDTEXTUREALPHA, D3DTA_CURRENT);
  71. C.StageSET_Alpha (D3DTA_TEXTURE, D3DTOP_SELECTARG1, D3DTA_CURRENT);
  72. C.StageSET_TMC (oT_Name, oT_xform, "$null", 0);
  73. C.StageEnd ();
  74.  
  75. // Stage3 - Lighting - should work on all 2tex hardware
  76. C.StageBegin ();
  77. C.StageSET_Color (D3DTA_DIFFUSE, D3DTOP_MODULATE, D3DTA_CURRENT);
  78. C.StageSET_Alpha (D3DTA_DIFFUSE, D3DTOP_SELECTARG2, D3DTA_CURRENT);
  79. C.Stage_Texture ("$null" );
  80. C.Stage_Matrix ("$null", 0);
  81. C.Stage_Constant ("$null" );
  82. C.StageEnd ();
  83. }
  84. C.PassEnd ();
  85. } else {
  86. LPCSTR vsname = 0;
  87. LPCSTR psname = 0;
  88. switch (C.iElement)
  89. {
  90. case SE_R1_NORMAL_HQ:
  91. vsname = psname = "model_env_hq";
  92. if (oBlend.value) C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  93. else C.r_Pass (vsname,psname,TRUE);
  94. C.r_Sampler ("s_base", C.L_textures[0]);
  95. C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  96. C.r_Sampler_clf ("s_lmap", "$user$projector",true);
  97. C.r_End ();
  98. break;
  99. case SE_R1_NORMAL_LQ:
  100. vsname = psname = "model_env_lq";
  101. if (oBlend.value) C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  102. else C.r_Pass (vsname,psname,TRUE);
  103. C.r_Sampler ("s_base", C.L_textures[0]);
  104. C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  105. C.r_End ();
  106. break;
  107. case SE_R1_LPOINT:
  108. vsname = "model_def_point";
  109. psname = "add_point";
  110. C.r_Pass (vsname,psname,FALSE,TRUE,FALSE,TRUE,D3DBLEND_ONE, D3DBLEND_ONE,TRUE);
  111. C.r_Sampler ("s_base", C.L_textures[0]);
  112. C.r_Sampler_clf ("s_lmap", TEX_POINT_ATT);
  113. C.r_Sampler_clf ("s_att", TEX_POINT_ATT);
  114. C.r_End ();
  115. break;
  116. case SE_R1_LSPOT:
  117. vsname = "model_def_spot";
  118. psname = "add_spot";
  119. C.r_Pass (vsname,psname,FALSE,TRUE,FALSE,TRUE,D3DBLEND_ONE, D3DBLEND_ONE,TRUE);
  120. C.r_Sampler ("s_base", C.L_textures[0]);
  121. C.r_Sampler_clf ("s_lmap", "internal\\internal_light_att", true);
  122. C.r_Sampler_clf ("s_att", TEX_SPOT_ATT);
  123. C.r_End ();
  124. break;
  125. case SE_R1_LMODELS:
  126. vsname = "model_def_shadow";
  127. psname = "model_shadow";
  128. C.r_Pass (vsname,psname,FALSE,FALSE,FALSE,TRUE,D3DBLEND_ZERO,D3DBLEND_SRCCOLOR,FALSE,0);
  129. C.r_End ();
  130. break;
  131. }
  132. }
  133. }
  134. #elif RENDER==R_R2
  135. #include "uber_deffer.h"
  136. void CBlender_Model_EbB::Compile(CBlender_Compile& C)
  137. {
  138. IBlender::Compile (C);
  139.  
  140. if (oBlend.value) {
  141. // forward
  142. LPCSTR vsname = 0;
  143. LPCSTR psname = 0;
  144. switch(C.iElement)
  145. {
  146. case 0:
  147. case 1:
  148. vsname = psname = "model_env_lq";
  149. C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  150. C.r_Sampler ("s_base", C.L_textures[0]);
  151. C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  152. C.r_End ();
  153. break;
  154. }
  155. } else {
  156. // deferred
  157. LPCSTR vsname = 0;
  158. LPCSTR psname = 0;
  159. switch(C.iElement)
  160. {
  161. case SE_R2_NORMAL_HQ: // deffer
  162. //uber_deffer (C,true, "model","base",false);
  163. vsname = psname = "model_env_lq";
  164. C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  165. C.r_Sampler ("s_base", C.L_textures[0]);
  166. C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  167. C.r_End ();
  168. break;
  169. case SE_R2_NORMAL_LQ: // deffer
  170. //uber_deffer (C,false, "model","base",false);
  171. vsname = psname = "model_env_lq";
  172. C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  173. C.r_Sampler ("s_base", C.L_textures[0]);
  174. C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  175. C.r_End ();
  176. break;
  177. case SE_R2_SHADOW: // smap
  178. if (RImplementation.o.HW_smap) C.r_Pass ("shadow_direct_model","dumb", FALSE,TRUE,TRUE,FALSE);
  179. else C.r_Pass ("shadow_direct_model","shadow_direct_base", FALSE);
  180. C.r_Sampler ("s_base", C.L_textures[0]);
  181. //C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  182. C.r_End ();
  183. break;
  184. }
  185. }
  186. }
  187. #else
  188. #include "uber_deffer.h"
  189. void CBlender_Model_EbB::Compile( CBlender_Compile& C )
  190. {
  191. IBlender::Compile(C);
  192.  
  193. if (oBlend.value)
  194. {
  195. // forward
  196. LPCSTR vsname = 0;
  197. LPCSTR psname = 0;
  198. switch(C.iElement)
  199. {
  200. case 0:
  201. case 1:
  202. vsname = psname = "model_env_lq";
  203. C.r_Pass (vsname,psname,TRUE,TRUE,FALSE,TRUE,D3DBLEND_SRCALPHA, D3DBLEND_INVSRCALPHA, TRUE,0);
  204. //C.r_Sampler ("s_base", C.L_textures[0]);
  205. //C.r_Sampler ("s_env", oT2_Name,false,D3DTADDRESS_CLAMP);
  206. C.r_dx10Texture ("s_base", C.L_textures[0]);
  207. C.r_dx10Texture ("s_env", oT2_Name);
  208.  
  209. C.r_dx10Sampler ("smp_base");
  210. C.r_dx10Sampler ("smp_rtlinear");
  211. C.r_End ();
  212. break;
  213. }
  214. }
  215. else
  216. {
  217. // deferred
  218. switch(C.iElement)
  219. {
  220. case SE_R2_NORMAL_HQ: // deffer
  221. uber_deffer (C,true, "model","base",false,0,true);
  222. C.r_Stencil ( TRUE,D3DCMP_ALWAYS,0xff,0x7f,D3DSTENCILOP_KEEP,D3DSTENCILOP_REPLACE,D3DSTENCILOP_KEEP);
  223. C.r_StencilRef (0x01);
  224. C.r_End ();
  225. break;
  226. case SE_R2_NORMAL_LQ: // deffer
  227. uber_deffer (C,false, "model","base",false,0,true);
  228. C.r_Stencil ( TRUE,D3DCMP_ALWAYS,0xff,0x7f,D3DSTENCILOP_KEEP,D3DSTENCILOP_REPLACE,D3DSTENCILOP_KEEP);
  229. C.r_StencilRef (0x01);
  230. C.r_End ();
  231. break;
  232. case SE_R2_SHADOW: // smap
  233. //if (RImplementation.o.HW_smap) C.r_Pass ("shadow_direct_model","dumb", FALSE,TRUE,TRUE,FALSE);
  234. //else C.r_Pass ("shadow_direct_model","shadow_direct_base",FALSE);
  235. C.r_Pass ("shadow_direct_model","dumb", FALSE,TRUE,TRUE,FALSE);
  236. //C.r_Sampler ("s_base",C.L_textures[0]);
  237. C.r_dx10Texture ("s_base",C.L_textures[0]);
  238. C.r_dx10Sampler ("smp_base");
  239. C.r_dx10Sampler ("smp_linear");
  240. C.r_ColorWriteEnable(false, false, false, false);
  241. C.r_End ();
  242. break;
  243. }
  244. }
  245. }
  246. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement