ilut_states.c
Upload User: wmy0603
Upload Date: 2022-05-02
Package Size: 1808k
Code Size: 9k
Development Platform:

Visual C++

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