@MaterialRegion.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. /******************************************************************************/
  2. /******************************************************************************/
  3. class MaterialRegion : Region
  4. {
  5. enum TEX_TYPE
  6. {
  7. TEX_COLOR ,
  8. TEX_ALPHA ,
  9. TEX_BUMP ,
  10. TEX_NORMAL ,
  11. TEX_SPEC ,
  12. TEX_GLOW ,
  13. TEX_DET_COL ,
  14. TEX_DET_BUMP,
  15. TEX_DET_NRM ,
  16. TEX_MACRO ,
  17. TEX_LIGHT ,
  18. TEX_RFL_L ,
  19. TEX_RFL_F ,
  20. TEX_RFL_R ,
  21. TEX_RFL_B ,
  22. TEX_RFL_D ,
  23. TEX_RFL_U ,
  24. TEX_RFL_ALL ,
  25. };
  26. class Change : Edit::_Undo::Change
  27. {
  28. EditMaterial data;
  29. virtual void create(ptr user)override;
  30. virtual void apply(ptr user)override;
  31. };
  32. class Texture : GuiCustom
  33. {
  34. TEX_TYPE type;
  35. Str text;
  36. Str file;
  37. Color rect_color;
  38. MemberDesc md_file, md_time;
  39. Button remove;
  40. MaterialRegion *mr;
  41. static void Load (C Str &name, Texture &texture);
  42. static void Remove( Texture &texture);
  43. ImagePtr getImage();
  44. void setDesc();
  45. void setFile(Str file);
  46. void toGui();
  47. Texture& create(TEX_TYPE type, C MemberDesc &md_file, C MemberDesc &md_time, Rect rect, C Str &text, MaterialRegion &mr);
  48. virtual void update(C GuiPC &gpc)override;
  49. bool draw(C Rect &rect);
  50. virtual void draw(C GuiPC &gpc)override;
  51. WindowIO win_io;
  52. public:
  53. Texture();
  54. };
  55. static cchar8 *auto_reload_name;
  56. ELM_TYPE elm_type;
  57. bool auto_reload;
  58. Button set_mtrl, undo, redo, locate, big, close, reload_base_textures;
  59. ComboBox texture_options;
  60. Tabs preview_mode;
  61. ViewportSkin preview, preview_big;
  62. Mesh preview_mesh[4];
  63. Camera preview_cam;
  64. flt min_zoom, max_zoom, mouse_edit_delta;
  65. Vec mouse_edit_value;
  66. Vec2 light_angle;
  67. Region sub;
  68. Button brightness;
  69. Property *red, *green, *blue, *alpha;
  70. Memx<Property> props;
  71. Memx<Texture> texs;
  72. TextBlack ts;
  73. Material temp;
  74. MaterialPtr game;
  75. EditMaterial edit, saved;
  76. Image detail_bump;
  77. Str detail_bump_file;
  78. UID elm_id;
  79. Elm *elm;
  80. bool changed;
  81. Edit::Undo<Change> undos; void undoVis();
  82. Vec previewLight()C;
  83. static void Render();
  84. void render();
  85. static void DrawPreview(Viewport &viewport);
  86. virtual void drawPreview();
  87. static void PreChanged(C Property &prop); // set all RGB props to have the same change_type so they will not create too manu undos
  88. static void Changed(C Property &prop);
  89. static Str Tech(C MaterialRegion &mr );
  90. static void Tech( MaterialRegion &mr, C Str &t);
  91. static cchar8 *DownsizeTexMobileText[]
  92. ; ASSERT(MaxMaterialDownsize==3);
  93. static Str DownsizeTexMobile(C MaterialRegion &mr );
  94. static void DownsizeTexMobile( MaterialRegion &mr, C Str &t);
  95. static cchar8 *TexQualityiOSText[]
  96. ;
  97. static Str TexQualityiOS(C MaterialRegion &mr );
  98. static void TexQualityiOS( MaterialRegion &mr, C Str &t);
  99. /*static .MaxTexSize max_tex_sizes[]=
  100. {
  101. {Edit.MTS_128 , "128", "Textures will be resized to 128 if they are bigger"},
  102. {Edit.MTS_256 , "256", "Textures will be resized to 256 if they are bigger"},
  103. {Edit.MTS_512 , "512", "Textures will be resized to 512 if they are bigger"},
  104. {Edit.MTS_1024 , "1024", "Textures will be resized to 1024 if they are bigger"},
  105. {Edit.MTS_2048 , "2048", "Textures will be resized to 2048 if they are bigger"},
  106. {Edit.MTS_UNLIMITED, "Unlimited", "Textures won't be resized"},
  107. {Edit.MTS_PUBLISH_SETTINGS, "Use Publish Settings", "Texture size limit will be taken from the value specified in Project Publishing Settings"},
  108. };
  109. static Str MaxTexSize(C MaterialRegion &mr ) {REPA(max_tex_sizes)if(max_tex_sizes[i].mts==mr.edit.max_tex_size)return i; return S;}
  110. static void MaxTexSize( MaterialRegion &mr, C Str &t) {int i=TextInt(t); if(InRange(i, max_tex_sizes)){mr.edit.max_tex_size=max_tex_sizes[i].mts; mr.edit.max_tex_size_time.now();}}*/
  111. static void RGB(MaterialRegion &mr);
  112. static Str Red (C MaterialRegion &mr );
  113. static void Red ( MaterialRegion &mr, C Str &t);
  114. static Str Green(C MaterialRegion &mr );
  115. static void Green( MaterialRegion &mr, C Str &t);
  116. static Str Blue (C MaterialRegion &mr );
  117. static void Blue ( MaterialRegion &mr, C Str &t);
  118. static Str Alpha(C MaterialRegion &mr );
  119. static void Alpha( MaterialRegion &mr, C Str &t);
  120. static const flt BumpScale;
  121. static Str Bump (C MaterialRegion &mr );
  122. static void Bump ( MaterialRegion &mr, C Str &t);
  123. static Str NrmScale(C MaterialRegion &mr );
  124. static void NrmScale( MaterialRegion &mr, C Str &t);
  125. static Str FNY (C MaterialRegion &mr );
  126. static void FNY ( MaterialRegion &mr, C Str &t);
  127. static Str Spec(C MaterialRegion &mr );
  128. static void Spec( MaterialRegion &mr, C Str &t);
  129. static Str Glow(C MaterialRegion &mr );
  130. static void Glow( MaterialRegion &mr, C Str &t);
  131. static Str DetScale(C MaterialRegion &mr );
  132. static void DetScale( MaterialRegion &mr, C Str &t);
  133. static Str DetPower(C MaterialRegion &mr );
  134. static void DetPower( MaterialRegion &mr, C Str &t);
  135. static Str Reflect(C MaterialRegion &mr );
  136. static void Reflect( MaterialRegion &mr, C Str &t);
  137. static Str Cull (C MaterialRegion &mr );
  138. static void Cull ( MaterialRegion &mr, C Str &t);
  139. static Str SSS (C MaterialRegion &mr );
  140. static void SSS ( MaterialRegion &mr, C Str &t);
  141. static Str AmbR (C MaterialRegion &mr );
  142. static void AmbR ( MaterialRegion &mr, C Str &t);
  143. static Str AmbG (C MaterialRegion &mr );
  144. static void AmbG ( MaterialRegion &mr, C Str &t);
  145. static Str AmbB (C MaterialRegion &mr );
  146. static void AmbB ( MaterialRegion &mr, C Str &t);
  147. static Str TexScale(C MaterialRegion &mr );
  148. static void TexScale( MaterialRegion &mr, C Str &t);
  149. static void Undo (MaterialRegion &editor);
  150. static void Redo (MaterialRegion &editor);
  151. static void Locate(MaterialRegion &editor);
  152. static void Hide (MaterialRegion &editor);
  153. static void SetMtrl(MaterialRegion &editor);
  154. static void AutoReload (MaterialRegion &editor);
  155. static void ReloadBaseTextures(MaterialRegion &editor);
  156. static void ResizeBase128 (MaterialRegion &editor);
  157. static void ResizeBase256 (MaterialRegion &editor);
  158. static void ResizeBase512 (MaterialRegion &editor);
  159. static void ResizeBase1024(MaterialRegion &editor);
  160. static void ResizeBase2048(MaterialRegion &editor);
  161. static void ResizeBase4096(MaterialRegion &editor);
  162. static void ResizeBase128x64 (MaterialRegion &editor);
  163. static void ResizeBase256x128 (MaterialRegion &editor);
  164. static void ResizeBase512x256 (MaterialRegion &editor);
  165. static void ResizeBase1024x512 (MaterialRegion &editor);
  166. static void ResizeBase2048x1024(MaterialRegion &editor);
  167. static void ResizeBase64x128 (MaterialRegion &editor);
  168. static void ResizeBase128x256 (MaterialRegion &editor);
  169. static void ResizeBase256x512 (MaterialRegion &editor);
  170. static void ResizeBase512x1024 (MaterialRegion &editor);
  171. static void ResizeBase1024x2048(MaterialRegion &editor);
  172. static void ResizeBaseQuarter (MaterialRegion &editor);
  173. static void ResizeBaseHalf (MaterialRegion &editor);
  174. static void ResizeBaseOriginal(MaterialRegion &editor);
  175. static void ResizeBaseDouble (MaterialRegion &editor);
  176. static void ResizeBase0_128 (MaterialRegion &editor);
  177. static void ResizeBase0_256 (MaterialRegion &editor);
  178. static void ResizeBase0_512 (MaterialRegion &editor);
  179. static void ResizeBase0_1024(MaterialRegion &editor);
  180. static void ResizeBase0_2048(MaterialRegion &editor);
  181. static void ResizeBase0_4096(MaterialRegion &editor);
  182. static void ResizeBase0_128x64 (MaterialRegion &editor);
  183. static void ResizeBase0_256x128 (MaterialRegion &editor);
  184. static void ResizeBase0_512x256 (MaterialRegion &editor);
  185. static void ResizeBase0_1024x512 (MaterialRegion &editor);
  186. static void ResizeBase0_2048x1024(MaterialRegion &editor);
  187. static void ResizeBase0_64x128 (MaterialRegion &editor);
  188. static void ResizeBase0_128x256 (MaterialRegion &editor);
  189. static void ResizeBase0_256x512 (MaterialRegion &editor);
  190. static void ResizeBase0_512x1024 (MaterialRegion &editor);
  191. static void ResizeBase0_1024x2048(MaterialRegion &editor);
  192. static void ResizeBase0_Quarter (MaterialRegion &editor);
  193. static void ResizeBase0_Half (MaterialRegion &editor);
  194. static void ResizeBase0_Original(MaterialRegion &editor);
  195. static void ResizeBase0_Double (MaterialRegion &editor);
  196. static void ResizeBase1_128 (MaterialRegion &editor);
  197. static void ResizeBase1_256 (MaterialRegion &editor);
  198. static void ResizeBase1_512 (MaterialRegion &editor);
  199. static void ResizeBase1_1024(MaterialRegion &editor);
  200. static void ResizeBase1_2048(MaterialRegion &editor);
  201. static void ResizeBase1_4096(MaterialRegion &editor);
  202. static void ResizeBase1_128x64 (MaterialRegion &editor);
  203. static void ResizeBase1_256x128 (MaterialRegion &editor);
  204. static void ResizeBase1_512x256 (MaterialRegion &editor);
  205. static void ResizeBase1_1024x512 (MaterialRegion &editor);
  206. static void ResizeBase1_2048x1024(MaterialRegion &editor);
  207. static void ResizeBase1_64x128 (MaterialRegion &editor);
  208. static void ResizeBase1_128x256 (MaterialRegion &editor);
  209. static void ResizeBase1_256x512 (MaterialRegion &editor);
  210. static void ResizeBase1_512x1024 (MaterialRegion &editor);
  211. static void ResizeBase1_1024x2048(MaterialRegion &editor);
  212. static void ResizeBase1_Quarter (MaterialRegion &editor);
  213. static void ResizeBase1_Half (MaterialRegion &editor);
  214. static void ResizeBase1_Original(MaterialRegion &editor);
  215. static void ResizeBase1_Double (MaterialRegion &editor);
  216. static void BumpFromCol (MaterialRegion &editor);
  217. static void BumpFromCol2 (MaterialRegion &editor);
  218. static void BumpFromCol3 (MaterialRegion &editor);
  219. static void BumpFromCol4 (MaterialRegion &editor);
  220. static void BumpFromCol5 (MaterialRegion &editor);
  221. static void BumpFromCol6 (MaterialRegion &editor);
  222. static void BumpFromCol8 (MaterialRegion &editor);
  223. static void BumpFromCol12(MaterialRegion &editor);
  224. static void BumpFromCol16(MaterialRegion &editor);
  225. static void BumpFromCol24(MaterialRegion &editor);
  226. static void BumpFromCol32(MaterialRegion &editor);
  227. static void MulTexCol (MaterialRegion &editor);
  228. static void MulTexRough(MaterialRegion &editor);
  229. bool bigVisible()C;
  230. void setRGB (C Vec &rgb);
  231. void resetAlpha ( );
  232. void cull (bool on );
  233. void flipNrmY (bool on ); // 'rebuildBase' already calls 'setChanged' and 'toGui'
  234. //void maxTexSize (Edit.MAX_TEX_SIZE mts) {if(edit.max_tex_size !=mts){undos.set("mts" ); edit.max_tex_size =mts; edit. max_tex_size_time.getUTC(); setChanged(); toGui();}}
  235. void downsizeTexMobile(byte ds );
  236. void texQualityiOS (bool q );
  237. void resizeBase(C VecI2 &size, bool relative=false);
  238. void resizeBase0(C VecI2 &size, bool relative=false);
  239. void resizeBase1(C VecI2 &size, bool relative=false);
  240. void bumpFromCol(int blur);
  241. virtual EditMaterial& getEditMtrl ();
  242. virtual C ImagePtr & getBase0 ();
  243. virtual C ImagePtr & getBase1 ();
  244. virtual C ImagePtr & getDetail ();
  245. virtual C ImagePtr & getReflection();
  246. virtual C ImagePtr & getMacro ();
  247. virtual C ImagePtr & getLight ();
  248. void setBottom(C Rect &prop_rect);
  249. void create();
  250. // operations
  251. Image* getDetailBump(C Str &file);
  252. void resize();
  253. void toGui();
  254. void flush(C UID &elm_id);
  255. virtual void flush();
  256. virtual void setChanged();
  257. virtual void set(Elm *elm);
  258. virtual void activate(Elm *elm);
  259. virtual void toggle(Elm *elm);
  260. void hideBig();
  261. virtual MaterialRegion& show ()override;
  262. virtual MaterialRegion& hide ()override;
  263. void set(C MaterialPtr &mtrl);
  264. void set(Memt<MaterialPtr> mtrls);
  265. void drag(Memc<UID> &elms, GuiObj *focus_obj, C Vec2 &screen_pos);
  266. class ImageSource : Edit::FileParams
  267. {
  268. int order;
  269. public:
  270. ImageSource();
  271. };
  272. static int Compare(C ImageSource &a, C ImageSource &b);
  273. void drop(Memc<Str> &names, GuiObj *focus_obj, C Vec2 &screen_pos);
  274. virtual void rebuildBase(uint old_base_tex, bool changed_flip_normal_y=false, bool adjust_params=true, bool always=false);
  275. virtual void rebuildReflection();
  276. virtual void rebuildDetail();
  277. virtual void rebuildMacro();
  278. virtual void rebuildLight();
  279. virtual void elmChanged(C UID&mtrl_id);
  280. void erasing(C UID &elm_id);
  281. bool winIOContains(GuiObj *go)C;
  282. // update
  283. virtual void update(C GuiPC &gpc)override;
  284. public:
  285. MaterialRegion();
  286. };
  287. /******************************************************************************/
  288. /******************************************************************************/
  289. extern MaterialRegion MtrlEdit;
  290. /******************************************************************************/