/xbmc/visualizations/XBMCProjectM/libprojectM/BuiltinParams.cpp

http://github.com/xbmc/xbmc · C++ · 393 lines · 276 code · 95 blank · 22 comment · 37 complexity · 2b4d719c2ce87567c8a18236b1b3d1cf MD5 · raw file

  1. #include <algorithm>
  2. #include <cassert>
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include "fatal.h"
  6. #include "BuiltinParams.hpp"
  7. #include "Algorithms.hpp"
  8. #include "InitCondUtils.hpp"
  9. using namespace Algorithms;
  10. BuiltinParams::BuiltinParams() {}
  11. BuiltinParams::BuiltinParams(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
  12. {
  13. int ret;
  14. if ((ret = init_builtin_param_db(presetInputs, presetOutputs)) != PROJECTM_SUCCESS)
  15. {
  16. std::cout << "failed to allocate builtin parameter database with error " << ret << std::endl;;
  17. throw ret;
  18. }
  19. }
  20. BuiltinParams::~BuiltinParams()
  21. {
  22. destroy_builtin_param_db();
  23. }
  24. /* Loads a float parameter into the builtin database */
  25. int BuiltinParams::load_builtin_param_float(const std::string & name, void * engine_val, void * matrix, short int flags,
  26. float init_val, float upper_bound, float lower_bound, const std::string & alt_name)
  27. {
  28. Param * param = NULL;
  29. CValue iv, ub, lb;
  30. iv.float_val = init_val;
  31. ub.float_val = upper_bound;
  32. lb.float_val = lower_bound;
  33. /* Create new parameter of type float */
  34. if (BUILTIN_PARAMS_DEBUG == 2)
  35. {
  36. printf("load_builtin_param_float: (name \"%s\") (alt_name = \"%s\") ", name.c_str(), alt_name.c_str());
  37. fflush(stdout);
  38. }
  39. std::string lowerName(name);
  40. std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower);
  41. if ((param = new Param(lowerName, P_TYPE_DOUBLE, flags, engine_val, matrix, iv, ub, lb)) == NULL)
  42. {
  43. return PROJECTM_OUTOFMEM_ERROR;
  44. }
  45. if (BUILTIN_PARAMS_DEBUG == 2)
  46. {
  47. printf("created...");
  48. fflush(stdout);
  49. }
  50. /* Insert the paremeter into the database */
  51. if (insert_builtin_param( param ) < 0)
  52. {
  53. delete param;
  54. return PROJECTM_ERROR;
  55. }
  56. if (BUILTIN_PARAMS_DEBUG == 2)
  57. {
  58. printf("inserted...");
  59. fflush(stdout);
  60. }
  61. /* If this parameter has an alternate name, insert it into the database as link */
  62. if (alt_name != "")
  63. {
  64. std::string alt_lower_name(alt_name);
  65. std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower);
  66. insert_param_alt_name(param,alt_lower_name);
  67. if (BUILTIN_PARAMS_DEBUG == 2)
  68. {
  69. printf("alt_name inserted...");
  70. fflush(stdout);
  71. }
  72. }
  73. if (BUILTIN_PARAMS_DEBUG == 2) printf("finished\n");
  74. /* Finished, return success */
  75. return PROJECTM_SUCCESS;
  76. }
  77. /* Destroy the builtin parameter database.
  78. Generally, do this on projectm exit */
  79. int BuiltinParams::destroy_builtin_param_db()
  80. {
  81. Algorithms::traverse<TraverseFunctors::DeleteFunctor<Param> >(builtin_param_tree);
  82. return PROJECTM_SUCCESS;
  83. }
  84. /* Insert a parameter into the database with an alternate name */
  85. int BuiltinParams::insert_param_alt_name(Param * param, const std::string & alt_name)
  86. {
  87. assert(param);
  88. aliasMap.insert(std::make_pair(alt_name, param->name));
  89. return PROJECTM_SUCCESS;
  90. }
  91. Param * BuiltinParams::find_builtin_param(const std::string & name)
  92. {
  93. AliasMap::iterator pos = aliasMap.find(name);
  94. Param * param = 0;
  95. //std::cerr << "[BuiltinParams] find_builtin_param: name is " << name << std::endl;
  96. if (pos == aliasMap.end())
  97. {
  98. std::map<std::string, Param*>::iterator builtinPos = builtin_param_tree.find(name);
  99. if (builtinPos != builtin_param_tree.end()) {
  100. // std::cerr << "[BuiltinParams] find_builtin_param: found it directly." << std::endl;
  101. param = builtinPos->second;
  102. }
  103. }
  104. else
  105. {
  106. std::map<std::string, Param*>::iterator builtinPos = builtin_param_tree.find(pos->second);
  107. if (builtinPos != builtin_param_tree.end()) {
  108. //std::cerr << "[BuiltinParams] find_builtin_param: found it indirectly." << std::endl;
  109. param = builtinPos->second;
  110. }
  111. }
  112. return param;
  113. }
  114. /* Loads a integer parameter into the builtin database */
  115. int BuiltinParams::load_builtin_param_int(const std::string & name, void * engine_val, short int flags,
  116. int init_val, int upper_bound, int lower_bound, const std::string &alt_name)
  117. {
  118. Param * param;
  119. CValue iv, ub, lb;
  120. iv.int_val = init_val;
  121. ub.int_val = upper_bound;
  122. lb.int_val = lower_bound;
  123. std::string lowerName(name);
  124. std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower);
  125. param = new Param(lowerName, P_TYPE_INT, flags, engine_val, NULL, iv, ub, lb);
  126. if (param == NULL)
  127. {
  128. return PROJECTM_OUTOFMEM_ERROR;
  129. }
  130. if (insert_builtin_param( param ) < 0)
  131. {
  132. delete param;
  133. return PROJECTM_ERROR;
  134. }
  135. if (alt_name != "")
  136. {
  137. std::string alt_lower_name(alt_name);
  138. std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower);
  139. insert_param_alt_name(param,alt_lower_name);
  140. }
  141. return PROJECTM_SUCCESS;
  142. }
  143. /* Loads a boolean parameter */
  144. int BuiltinParams::load_builtin_param_bool(const std:: string & name, void * engine_val, short int flags,
  145. int init_val, const std::string &alt_name)
  146. {
  147. Param * param;
  148. CValue iv, ub, lb;
  149. iv.int_val = init_val;
  150. ub.int_val = TRUE;
  151. lb.int_val = false;
  152. std::string lowerName(name);
  153. std::transform(lowerName.begin(), lowerName.end(), lowerName.begin(), tolower);
  154. param = new Param(lowerName, P_TYPE_BOOL, flags, engine_val, NULL, iv, ub, lb);
  155. if (param == NULL)
  156. {
  157. return PROJECTM_OUTOFMEM_ERROR;
  158. }
  159. if (insert_builtin_param(param) < 0)
  160. {
  161. delete param;
  162. return PROJECTM_ERROR;
  163. }
  164. if (alt_name != "")
  165. {
  166. std::string alt_lower_name(alt_name);
  167. std::transform(alt_lower_name.begin(), alt_lower_name.end(), alt_lower_name.begin(), tolower);
  168. insert_param_alt_name(param,alt_lower_name);
  169. }
  170. return PROJECTM_SUCCESS;
  171. }
  172. /* Inserts a parameter into the builtin database */
  173. int BuiltinParams::insert_builtin_param( Param *param )
  174. {
  175. std::pair<std::map<std::string, Param*>::iterator, bool> inserteePos = builtin_param_tree.insert(std::make_pair(param->name, param));
  176. return inserteePos.second;
  177. }
  178. /* Initialize the builtin parameter database.
  179. Should only be necessary once */
  180. int BuiltinParams::init_builtin_param_db(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
  181. {
  182. if (BUILTIN_PARAMS_DEBUG)
  183. {
  184. printf("init_builtin_param: loading database...");
  185. fflush(stdout);
  186. }
  187. /* Loads all builtin parameters into the database */
  188. if (load_all_builtin_param(presetInputs, presetOutputs) < 0)
  189. {
  190. if (BUILTIN_PARAMS_DEBUG) printf("failed loading builtin parameters (FATAL)\n");
  191. return PROJECTM_ERROR;
  192. }
  193. if (BUILTIN_PARAMS_DEBUG) printf("success!\n");
  194. /* Finished, no errors */
  195. return PROJECTM_SUCCESS;
  196. }
  197. /* Loads all builtin parameters, limits are also defined here */
  198. int BuiltinParams::load_all_builtin_param(const PresetInputs & presetInputs, PresetOutputs & presetOutputs)
  199. {
  200. load_builtin_param_float("frating", (void*)&presetOutputs.fRating, NULL, P_FLAG_NONE, 0.0 , 5.0, 0.0, "");
  201. load_builtin_param_float("fwavescale", (void*)&presetOutputs.fWaveScale, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  202. load_builtin_param_float("gamma", (void*)&presetOutputs.fGammaAdj, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fGammaAdj");
  203. load_builtin_param_float("echo_zoom", (void*)&presetOutputs.fVideoEchoZoom, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fVideoEchoZoom");
  204. load_builtin_param_float("echo_alpha", (void*)&presetOutputs.fVideoEchoAlpha, NULL, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "fvideoechoalpha");
  205. load_builtin_param_float("wave_a", (void*)&presetOutputs.fWaveAlpha, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fwavealpha");
  206. load_builtin_param_float("fwavesmoothing", (void*)&presetOutputs.fWaveSmoothing, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  207. load_builtin_param_float("fmodwavealphastart", (void*)&presetOutputs.fModWaveAlphaStart, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  208. load_builtin_param_float("fmodwavealphaend", (void*)&presetOutputs.fModWaveAlphaEnd, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  209. load_builtin_param_float("fWarpAnimSpeed", (void*)&presetOutputs.fWarpAnimSpeed, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  210. load_builtin_param_float("fWarpScale", (void*)&presetOutputs.fWarpScale, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  211. // load_builtin_param_float("warp", (void*)&presetOutputs.warp, warp_mesh, P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, 0, "");
  212. load_builtin_param_float("fshader", (void*)&presetOutputs.fShader, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  213. load_builtin_param_float("decay", (void*)&presetOutputs.decay, NULL, P_FLAG_NONE, 0.0, 1.0, 0, "fdecay");
  214. load_builtin_param_int("echo_orient", (void*)&presetOutputs.nVideoEchoOrientation, P_FLAG_NONE, 0, 3, 0, "nVideoEchoOrientation");
  215. load_builtin_param_int("wave_mode", (void*)&presetOutputs.nWaveMode, P_FLAG_NONE, 0, 7, 0, "nwavemode");
  216. load_builtin_param_bool("wave_additive", (void*)&presetOutputs.bAdditiveWaves, P_FLAG_NONE, false, "bAdditiveWaves");
  217. load_builtin_param_bool("bmodwavealphabyvolume", (void*)&presetOutputs.bModWaveAlphaByVolume, P_FLAG_NONE, false, "");
  218. load_builtin_param_bool("wave_brighten", (void*)&presetOutputs.bMaximizeWaveColor, P_FLAG_NONE, false, "bMaximizeWaveColor");
  219. load_builtin_param_bool("wrap", (void*)&presetOutputs.bTexWrap, P_FLAG_NONE, false, "btexwrap");
  220. load_builtin_param_bool("darken_center", (void*)&presetOutputs.bDarkenCenter, P_FLAG_NONE, false, "bdarkencenter");
  221. load_builtin_param_bool("bredbluestereo", (void*)&presetOutputs.bRedBlueStereo, P_FLAG_NONE, false, "");
  222. load_builtin_param_bool("brighten", (void*)&presetOutputs.bBrighten, P_FLAG_NONE, false, "bbrighten");
  223. load_builtin_param_bool("darken", (void*)&presetOutputs.bDarken, P_FLAG_NONE, false, "bdarken");
  224. load_builtin_param_bool("solarize", (void*)&presetOutputs.bSolarize, P_FLAG_NONE, false, "bsolarize");
  225. load_builtin_param_bool("invert", (void*)&presetOutputs.bInvert, P_FLAG_NONE, false, "binvert");
  226. load_builtin_param_bool("bmotionvectorson", (void*)&presetOutputs.bMotionVectorsOn, P_FLAG_NONE, false, "");
  227. load_builtin_param_bool("wave_dots", (void*)&presetOutputs.bWaveDots, P_FLAG_NONE, false, "bwavedots");
  228. load_builtin_param_bool("wave_thick", (void*)&presetOutputs.bWaveThick, P_FLAG_NONE, false, "bwavethick");
  229. load_builtin_param_float("warp", (void*)&presetOutputs.warp, presetOutputs.warp_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  230. load_builtin_param_float("zoom", (void*)&presetOutputs.zoom, presetOutputs.zoom_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  231. load_builtin_param_float("rot", (void*)&presetOutputs.rot, presetOutputs.rot_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  232. /// @note added huge bug fix here potentially by prevening zoomexp_mesh from being freed when presets dealloc
  233. load_builtin_param_float("zoomexp", (void*)&presetOutputs.zoomexp, presetOutputs.zoomexp_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE , 0.0, MAX_DOUBLE_SIZE, 0, "fzoomexponent");
  234. load_builtin_param_float("cx", (void*)&presetOutputs.cx, presetOutputs.cx_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  235. load_builtin_param_float("cy", (void*)&presetOutputs.cy, presetOutputs.cy_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  236. load_builtin_param_float("dx", (void*)&presetOutputs.dx, presetOutputs.dx_mesh, P_FLAG_PER_PIXEL | P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  237. load_builtin_param_float("dy", (void*)&presetOutputs.dy, presetOutputs.dy_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  238. load_builtin_param_float("sx", (void*)&presetOutputs.sx, presetOutputs.sx_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  239. load_builtin_param_float("sy", (void*)&presetOutputs.sy, presetOutputs.sy_mesh, P_FLAG_PER_PIXEL |P_FLAG_NONE, 0.0, MAX_DOUBLE_SIZE, MIN_DOUBLE_SIZE, "");
  240. load_builtin_param_float("wave_r", (void*)&presetOutputs.wave_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  241. load_builtin_param_float("wave_g", (void*)&presetOutputs.wave_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  242. load_builtin_param_float("wave_b", (void*)&presetOutputs.wave_b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  243. load_builtin_param_float("wave_x", (void*)&presetOutputs.wave_x, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  244. load_builtin_param_float("wave_y", (void*)&presetOutputs.wave_y, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  245. load_builtin_param_float("wave_mystery", (void*)&presetOutputs.wave_mystery, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "fWaveParam");
  246. load_builtin_param_float("ob_size", (void*)&presetOutputs.ob_size, NULL, P_FLAG_NONE, 0.0, 0.5, 0, "");
  247. load_builtin_param_float("ob_r", (void*)&presetOutputs.ob_r, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  248. load_builtin_param_float("ob_g", (void*)&presetOutputs.ob_g, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  249. load_builtin_param_float("ob_b", (void*)&presetOutputs.ob_b, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  250. load_builtin_param_float("ob_a", (void*)&presetOutputs.ob_a, NULL, P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  251. load_builtin_param_float("ib_size", (void*)&presetOutputs.ib_size, NULL,P_FLAG_NONE, 0.0, .5, 0.0, "");
  252. load_builtin_param_float("ib_r", (void*)&presetOutputs.ib_r, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  253. load_builtin_param_float("ib_g", (void*)&presetOutputs.ib_g, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  254. load_builtin_param_float("ib_b", (void*)&presetOutputs.ib_b, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  255. load_builtin_param_float("ib_a", (void*)&presetOutputs.ib_a, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  256. load_builtin_param_float("mv_r", (void*)&presetOutputs.mv_r, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  257. load_builtin_param_float("mv_g", (void*)&presetOutputs.mv_g, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  258. load_builtin_param_float("mv_b", (void*)&presetOutputs.mv_b, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  259. load_builtin_param_float("mv_x", (void*)&presetOutputs.mv_x, NULL,P_FLAG_NONE, 0.0, 64.0, 0.0, "nmotionvectorsx");
  260. load_builtin_param_float("mv_y", (void*)&presetOutputs.mv_y, NULL,P_FLAG_NONE, 0.0, 48.0, 0.0, "nmotionvectorsy");
  261. load_builtin_param_float("mv_l", (void*)&presetOutputs.mv_l, NULL,P_FLAG_NONE, 0.0, 5.0, 0.0, "");
  262. load_builtin_param_float("mv_dy", (void*)&presetOutputs.mv_dy, NULL, P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  263. load_builtin_param_float("mv_dx", (void*)&presetOutputs.mv_dx, NULL,P_FLAG_NONE, 0.0, 1.0, -1.0, "");
  264. load_builtin_param_float("mv_a", (void*)&presetOutputs.mv_a, NULL,P_FLAG_NONE, 0.0, 1.0, 0.0, "");
  265. load_builtin_param_float("time", (void*)&presetInputs.time, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, "");
  266. load_builtin_param_float("bass", (void*)&presetInputs.bass, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0.0, "");
  267. load_builtin_param_float("mid", (void*)&presetInputs.mid, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, "");
  268. load_builtin_param_float("treb", (void*)&presetInputs.treb, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, "");
  269. load_builtin_param_float("mood_r", (void*)&presetInputs.mood_r, NULL,P_FLAG_READONLY, 0.0, 1.0, 0.0, "");
  270. load_builtin_param_float("mood_g", (void*)&presetInputs.mood_g, NULL,P_FLAG_READONLY, 0.0, 1.0, 0, "");
  271. load_builtin_param_float("mood_b", (void*)&presetInputs.mood_b, NULL,P_FLAG_READONLY, 0.0, 1.0, 0, "");
  272. load_builtin_param_float("bass_att", (void*)&presetInputs.bass_att, NULL,P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, "");
  273. load_builtin_param_float("mid_att", (void*)&presetInputs.mid_att, NULL, P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, "");
  274. load_builtin_param_float("treb_att", (void*)&presetInputs.treb_att, NULL, P_FLAG_READONLY, 0.0, MAX_DOUBLE_SIZE, 0, "");
  275. load_builtin_param_int("frame", (void*)&presetInputs.frame, P_FLAG_READONLY, 0, MAX_INT_SIZE, 0, "");
  276. load_builtin_param_float("progress", (void*)&presetInputs.progress, NULL,P_FLAG_READONLY, 0.0, 1, 0, "");
  277. load_builtin_param_int("fps", (void*)&presetInputs.fps, P_FLAG_READONLY, 15, MAX_INT_SIZE, 0, "");
  278. load_builtin_param_float("x", (void*)&presetInputs.x_per_pixel, presetInputs.x_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE,
  279. 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  280. load_builtin_param_float("y", (void*)&presetInputs.y_per_pixel, presetInputs.y_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX |P_FLAG_READONLY | P_FLAG_NONE,
  281. 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  282. load_builtin_param_float("ang", (void*)&presetInputs.ang_per_pixel, presetInputs.theta_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE,
  283. 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  284. load_builtin_param_float("rad", (void*)&presetInputs.rad_per_pixel, presetInputs.rad_mesh, P_FLAG_PER_PIXEL |P_FLAG_ALWAYS_MATRIX | P_FLAG_READONLY | P_FLAG_NONE,
  285. 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  286. load_builtin_param_float("q1", (void*)&presetOutputs.q1, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  287. load_builtin_param_float("q2", (void*)&presetOutputs.q2, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  288. load_builtin_param_float("q3", (void*)&presetOutputs.q3, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  289. load_builtin_param_float("q4", (void*)&presetOutputs.q4, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  290. load_builtin_param_float("q5", (void*)&presetOutputs.q5, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  291. load_builtin_param_float("q6", (void*)&presetOutputs.q6, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  292. load_builtin_param_float("q7", (void*)&presetOutputs.q7, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  293. load_builtin_param_float("q8", (void*)&presetOutputs.q8, NULL, P_FLAG_PER_PIXEL |P_FLAG_QVAR, 0, MAX_DOUBLE_SIZE, -MAX_DOUBLE_SIZE, "");
  294. /* variables added in 1.04 */
  295. load_builtin_param_int("meshx", (void*)&presetInputs.gx, P_FLAG_READONLY, 32, 96, 8, "");
  296. load_builtin_param_int("meshy", (void*)&presetInputs.gy, P_FLAG_READONLY, 24, 72, 6, "");
  297. return PROJECTM_SUCCESS;
  298. }