Guest User

Untitled

a guest
Feb 21st, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.67 KB | None | 0 0
  1. IL::Image img = IL::LoadImage(c_fnHeatnoise);
  2.  
  3. if (img) {
  4.  
  5. /* get dimension once... */
  6.  
  7. int width = img.width(), height = img.height(), depth = img.depth();
  8.  
  9. heatTex = GL::CreateTexture(GL_TEXTURE_2D);
  10.  
  11. if (!heatTex) {
  12. SetError("error: GL::CreateTexture(...) failed at %s:%u\n", __FILE__, __LINE__);
  13. return false;
  14. }
  15.  
  16. /* autodetect number of levels to create */
  17.  
  18. GLint level[2];
  19.  
  20. glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &level[0]);
  21. glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &level[1]);
  22.  
  23. int numLevels = level[0] - level[1] + 1;
  24.  
  25. /* create temporary image */
  26.  
  27. IL::Image tmp = IL::CloneImage(img);
  28. if (!tmp) {
  29. SetError("error: tmp == NULL at %s:%u\n", __FILE__, __LINE__);
  30. GL::DeleteTexture(heatTex);
  31. return false;
  32. }
  33.  
  34. for(int level = 0; level < numLevels; ++level) {
  35.  
  36. /* upload level image */
  37.  
  38. glTexImage2D(GL_TEXTURE_2D,
  39. level,
  40. GL_RGBA,
  41. width,
  42. height,
  43. 0,
  44. tmp.format(),
  45. tmp.type(),
  46. tmp.data());
  47.  
  48. if((1 == width) && (1 == height) && (1 == depth)) {
  49.  
  50. /* no more levels to create: we're done */
  51.  
  52. OIL::DeleteImage(tmp);
  53. break;
  54. }
  55.  
  56. width >>= (1 == width) ? 0 : 1;
  57. height >>= (1 == height) ? 0 : 1;
  58. depth >>= (1 == depth) ? 0 : 1;
  59.  
  60. if(!tmp.scale(width, height, depth, ILU_BILINEAR)) {
  61. SetError("error: Image::scale(...) failed at %s:%u\n", __FILE__, __LINE__);
  62. IL::DeleteImage(tmp);
  63. GL::DeleteTexture(heatTex);
  64. return false;
  65. }
  66. }
  67. }
  68.  
  69. IL::DeleteImage(img);
Add Comment
Please, Sign In to add comment