/branches/WXSJ/????/??/???/Devil/src-ILUT/src/ilut_states.c

http://mmo-resourse.googlecode.com/ · C · 379 lines · 277 code · 77 blank · 25 comment · 29 complexity · 056b3ff3490931320dd113836bc4692a MD5 · raw file

  1. //-----------------------------------------------------------------------------
  2. //
  3. // ImageLib Utility Toolkit Sources
  4. // Copyright (C) 2000-2002 by Denton Woods
  5. // Last modified: 05/18/2002 <--Y2K Compliant! =]
  6. //
  7. // Filename: src-ILUT/src/ilut_states.c
  8. //
  9. // Description: The state machine
  10. //
  11. //-----------------------------------------------------------------------------
  12. #include "ilut_internal.h"
  13. #include "ilut_states.h"
  14. //#ifdef ILUT_USE_OPENGL
  15. #include "ilut_opengl.h"
  16. //#endif
  17. const char *_ilutVendor = "Abysmal Software";
  18. const char *_ilutVersion = "Developer's Image Library Utility Toolkit (ILUT) 1.6.7 " __DATE__;
  19. // Set all states to their defaults
  20. ILvoid ilutDefaultStates()
  21. {
  22. ilutStates[ilutCurrentPos].ilutUsePalettes = IL_FALSE;
  23. ilutStates[ilutCurrentPos].ilutOglConv = IL_FALSE; // IL_TRUE ?
  24. ilutStates[ilutCurrentPos].ilutDXTCFormat = 0;
  25. ilutStates[ilutCurrentPos].ilutUseS3TC = IL_FALSE;
  26. ilutStates[ilutCurrentPos].ilutGenS3TC = IL_FALSE;
  27. ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget = IL_FALSE;
  28. ilutStates[ilutCurrentPos].D3DMipLevels = 0;
  29. ilutStates[ilutCurrentPos].D3DPool = 0;
  30. ilutStates[ilutCurrentPos].D3DAlphaKeyColor = -1;
  31. }
  32. ILvoid ILAPIENTRY ilutD3D8MipFunc(ILuint NumLevels)
  33. {
  34. ilutStates[ilutCurrentPos].D3DMipLevels = NumLevels;
  35. return;
  36. }
  37. ILstring ILAPIENTRY ilutGetString(ILenum StringName)
  38. {
  39. switch (StringName)
  40. {
  41. case ILUT_VENDOR:
  42. return (const ILstring)_ilutVendor;
  43. //changed 2003-09-04
  44. case ILUT_VERSION_NUM:
  45. return (const ILstring)_ilutVersion;
  46. default:
  47. ilSetError(ILUT_INVALID_PARAM);
  48. break;
  49. }
  50. return NULL;
  51. }
  52. ILboolean ILAPIENTRY ilutEnable(ILenum Mode)
  53. {
  54. return ilutAble(Mode, IL_TRUE);
  55. }
  56. ILboolean ILAPIENTRY ilutDisable(ILenum Mode)
  57. {
  58. return ilutAble(Mode, IL_FALSE);
  59. }
  60. ILboolean ilutAble(ILenum Mode, ILboolean Flag)
  61. {
  62. switch (Mode)
  63. {
  64. case ILUT_PALETTE_MODE:
  65. ilutStates[ilutCurrentPos].ilutUsePalettes = Flag;
  66. break;
  67. case ILUT_OPENGL_CONV:
  68. ilutStates[ilutCurrentPos].ilutOglConv = Flag;
  69. break;
  70. case ILUT_GL_USE_S3TC:
  71. ilutStates[ilutCurrentPos].ilutUseS3TC = Flag;
  72. break;
  73. case ILUT_GL_GEN_S3TC:
  74. ilutStates[ilutCurrentPos].ilutGenS3TC = Flag;
  75. break;
  76. case ILUT_GL_AUTODETECT_TEXTURE_TARGET:
  77. ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget = Flag;
  78. break;
  79. default:
  80. ilSetError(ILUT_INVALID_ENUM);
  81. return IL_FALSE;
  82. }
  83. return IL_TRUE;
  84. }
  85. ILboolean ILAPIENTRY ilutIsEnabled(ILenum Mode)
  86. {
  87. switch (Mode)
  88. {
  89. case ILUT_PALETTE_MODE:
  90. return ilutStates[ilutCurrentPos].ilutUsePalettes;
  91. case ILUT_OPENGL_CONV:
  92. return ilutStates[ilutCurrentPos].ilutOglConv;
  93. case ILUT_GL_USE_S3TC:
  94. return ilutStates[ilutCurrentPos].ilutUseS3TC;
  95. case ILUT_GL_GEN_S3TC:
  96. return ilutStates[ilutCurrentPos].ilutGenS3TC;
  97. case ILUT_GL_AUTODETECT_TEXTURE_TARGET:
  98. return ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget;
  99. default:
  100. ilSetError(ILUT_INVALID_ENUM);
  101. }
  102. return IL_FALSE;
  103. }
  104. ILboolean ILAPIENTRY ilutIsDisabled(ILenum Mode)
  105. {
  106. return !ilutIsEnabled(Mode);
  107. }
  108. ILvoid ILAPIENTRY ilutGetBooleanv(ILenum Mode, ILboolean *Param)
  109. {
  110. switch (Mode)
  111. {
  112. case ILUT_PALETTE_MODE:
  113. *Param = ilutStates[ilutCurrentPos].ilutUsePalettes;
  114. break;
  115. case ILUT_OPENGL_CONV:
  116. *Param = ilutStates[ilutCurrentPos].ilutOglConv;
  117. break;
  118. case ILUT_GL_USE_S3TC:
  119. *Param = ilutStates[ilutCurrentPos].ilutUseS3TC;
  120. break;
  121. case ILUT_GL_GEN_S3TC:
  122. *Param = ilutStates[ilutCurrentPos].ilutGenS3TC;
  123. break;
  124. case ILUT_GL_AUTODETECT_TEXTURE_TARGET:
  125. *Param = ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget;
  126. break;
  127. default:
  128. ilSetError(ILUT_INVALID_ENUM);
  129. }
  130. return;
  131. }
  132. ILboolean ILAPIENTRY ilutGetBoolean(ILenum Mode)
  133. {
  134. ILboolean Temp = IL_FALSE;
  135. ilutGetBooleanv(Mode, &Temp);
  136. return Temp;
  137. }
  138. ILvoid ILAPIENTRY ilutGetIntegerv(ILenum Mode, ILint *Param)
  139. {
  140. switch (Mode)
  141. {
  142. /*case IL_ORIGIN_MODE:
  143. *Param = ilutStates[ilutCurrentPos].ilutOriginMode;
  144. break;*/
  145. case ILUT_VERSION_NUM:
  146. *Param = ILUT_VERSION;
  147. break;
  148. case ILUT_PALETTE_MODE:
  149. *Param = ilutStates[ilutCurrentPos].ilutUsePalettes;
  150. break;
  151. case ILUT_OPENGL_CONV:
  152. *Param = ilutStates[ilutCurrentPos].ilutOglConv;
  153. break;
  154. case ILUT_GL_USE_S3TC:
  155. *Param = ilutStates[ilutCurrentPos].ilutUseS3TC;
  156. break;
  157. case ILUT_GL_GEN_S3TC:
  158. *Param = ilutStates[ilutCurrentPos].ilutUseS3TC;
  159. break;
  160. case ILUT_S3TC_FORMAT:
  161. *Param = ilutStates[ilutCurrentPos].ilutDXTCFormat;
  162. break;
  163. case ILUT_GL_AUTODETECT_TEXTURE_TARGET:
  164. *Param = ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget;
  165. break;
  166. case ILUT_D3D_MIPLEVELS:
  167. *Param = ilutStates[ilutCurrentPos].D3DMipLevels;
  168. break;
  169. case ILUT_D3D_ALPHA_KEY_COLOR:
  170. *Param = ilutStates[ilutCurrentPos].D3DAlphaKeyColor;
  171. break;
  172. case ILUT_D3D_POOL:
  173. *Param = ilutStates[ilutCurrentPos].D3DPool;
  174. break;
  175. default:
  176. ilSetError(ILUT_INVALID_ENUM);
  177. }
  178. return;
  179. }
  180. ILint ILAPIENTRY ilutGetInteger(ILenum Mode)
  181. {
  182. ILint Temp = 0;
  183. ilutGetIntegerv(Mode, &Temp);
  184. return Temp;
  185. }
  186. ILvoid ILAPIENTRY ilutSetInteger(ILenum Mode, ILint Param)
  187. {
  188. switch (Mode)
  189. {
  190. case ILUT_S3TC_FORMAT:
  191. if (Param >= IL_DXT1 && Param <= IL_DXT5) {
  192. ilutStates[ilutCurrentPos].ilutDXTCFormat = Param;
  193. return;
  194. }
  195. //#ifdef ILUT_USE_OPENGL
  196. case ILUT_MAXTEX_WIDTH:
  197. iGLSetMaxW(Param);
  198. return;
  199. case ILUT_MAXTEX_HEIGHT:
  200. iGLSetMaxH(Param);
  201. return;
  202. case ILUT_MAXTEX_DEPTH:
  203. break;
  204. case ILUT_GL_USE_S3TC:
  205. if (Param == IL_TRUE || Param == IL_FALSE) {
  206. ilutStates[ilutCurrentPos].ilutUseS3TC = Param;
  207. return;
  208. }
  209. break;
  210. case ILUT_GL_GEN_S3TC:
  211. if (Param == IL_TRUE || Param == IL_FALSE) {
  212. ilutStates[ilutCurrentPos].ilutGenS3TC = Param;
  213. return;
  214. }
  215. break;
  216. case ILUT_GL_AUTODETECT_TEXTURE_TARGET:
  217. if (Param == IL_TRUE || Param == IL_FALSE) {
  218. ilutStates[ilutCurrentPos].ilutAutodetectTextureTarget = Param;
  219. return;
  220. }
  221. break;
  222. //#endif//ILUT_USE_OPENGL
  223. //#ifdef ILUT_USE_DIRECTX8
  224. case ILUT_D3D_MIPLEVELS:
  225. if (Param >= 0) {
  226. ilutStates[ilutCurrentPos].D3DMipLevels = Param;
  227. return;
  228. }
  229. break;
  230. case ILUT_D3D_ALPHA_KEY_COLOR:
  231. ilutStates[ilutCurrentPos].D3DAlphaKeyColor = Param;
  232. return;
  233. break;
  234. case ILUT_D3D_POOL:
  235. if (Param >= 0 && Param <= 2) {
  236. ilutStates[ilutCurrentPos].D3DPool = Param;
  237. return;
  238. }
  239. break;
  240. //#endif//ILUT_USE_DIRECTX8
  241. default:
  242. ilSetError(ILUT_INVALID_ENUM);
  243. }
  244. ilSetError(IL_INVALID_PARAM); // Parameter not in valid bounds.
  245. return;
  246. }
  247. ILvoid ILAPIENTRY ilutPushAttrib(ILuint Bits)
  248. {
  249. // Should we check here to see if ilCurrentPos is negative?
  250. if (ilutCurrentPos >= ILUT_ATTRIB_STACK_MAX - 1) {
  251. ilutCurrentPos = ILUT_ATTRIB_STACK_MAX - 1;
  252. ilSetError(ILUT_STACK_OVERFLOW);
  253. return;
  254. }
  255. ilutCurrentPos++;
  256. //memcpy(&ilutStates[ilutCurrentPos], &ilutStates[ilutCurrentPos - 1], sizeof(ILUT_STATES));
  257. if (Bits & ILUT_OPENGL_BIT) {
  258. ilutStates[ilutCurrentPos].ilutUsePalettes = ilutStates[ilutCurrentPos-1].ilutUsePalettes;
  259. ilutStates[ilutCurrentPos].ilutOglConv = ilutStates[ilutCurrentPos-1].ilutOglConv;
  260. }
  261. if (Bits & ILUT_D3D_BIT) {
  262. ilutStates[ilutCurrentPos].D3DMipLevels = ilutStates[ilutCurrentPos-1].D3DMipLevels;
  263. ilutStates[ilutCurrentPos].D3DAlphaKeyColor = ilutStates[ilutCurrentPos-1].D3DAlphaKeyColor;
  264. }
  265. return;
  266. }
  267. ILvoid ILAPIENTRY ilutPopAttrib()
  268. {
  269. if (ilutCurrentPos <= 0) {
  270. ilutCurrentPos = 0;
  271. ilSetError(ILUT_STACK_UNDERFLOW);
  272. return;
  273. }
  274. // Should we check here to see if ilutCurrentPos is too large?
  275. ilutCurrentPos--;
  276. return;
  277. }
  278. ILboolean ILAPIENTRY ilutRenderer(ILenum Renderer)
  279. {
  280. if (Renderer > ILUT_WIN32) {
  281. ilSetError(ILUT_INVALID_VALUE);
  282. return IL_FALSE;
  283. }
  284. switch (Renderer)
  285. {
  286. #ifdef ILUT_USE_OPENGL
  287. case ILUT_OPENGL:
  288. return ilutGLInit();
  289. #endif
  290. #ifdef ILUT_USE_WIN32
  291. case ILUT_WIN32:
  292. return ilutWin32Init();
  293. #endif
  294. #ifdef ILUT_USE_DIRECTX8
  295. case ILUT_DIRECT3D8:
  296. return ilutD3D8Init();
  297. #endif
  298. default:
  299. ilSetError(ILUT_NOT_SUPPORTED);
  300. }
  301. return IL_FALSE;
  302. }