multitexture.cpp
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:3k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // multirestexture.cpp
  2. //
  3. // Copyright (C) 2002 Deon Ramsey <dramsey@sourceforge.net>
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #include "multitexture.h"
  10. #include "texmanager.h"
  11. #include <celutil/debug.h>
  12. using namespace std;
  13. MultiResTexture::MultiResTexture()
  14. {
  15.     tex[lores] = InvalidResource;
  16.     tex[medres] = InvalidResource;
  17.     tex[hires] = InvalidResource;
  18. }
  19. MultiResTexture::MultiResTexture(ResourceHandle loTex,
  20.                                  ResourceHandle medTex,
  21.                                  ResourceHandle hiTex)
  22. {
  23.     tex[lores] = loTex;
  24.     tex[medres] = medTex;
  25.     tex[hires] = hiTex;
  26. }
  27. MultiResTexture::MultiResTexture(const string& source,
  28.                                  const string& path)
  29. {
  30.     setTexture(source, path);
  31. }
  32. void MultiResTexture::setTexture(const string& source, const string& path,
  33.                                  unsigned int flags)
  34. {
  35.     TextureManager* texMan = GetTextureManager();
  36.     tex[lores] = texMan->getHandle(TextureInfo(source, path, flags, lores));
  37.     tex[medres] = texMan->getHandle(TextureInfo(source, path, flags, medres));
  38.     tex[hires] = texMan->getHandle(TextureInfo(source, path, flags, hires));
  39. }
  40. void MultiResTexture::setTexture(const string& source, const string& path,
  41.                                  float bumpHeight, unsigned int flags)
  42. {
  43.     TextureManager* texMan = GetTextureManager();
  44.     tex[lores] = texMan->getHandle(TextureInfo(source, path, bumpHeight, flags, lores));
  45.     tex[medres] = texMan->getHandle(TextureInfo(source, path, bumpHeight, flags, medres));
  46.     tex[hires] = texMan->getHandle(TextureInfo(source, path, bumpHeight, flags, hires));
  47. }
  48. Texture* MultiResTexture::find(unsigned int resolution)
  49. {
  50.     TextureManager* texMan = GetTextureManager();
  51.     Texture* res = texMan->find(tex[resolution]);
  52.     if (res != NULL)
  53.         return res;
  54.     // Preferred resolution isn't available; try the second choice
  55.     // Set these to some defaults to avoid GCC complaints
  56.     // about possible uninitialized variable usage:
  57.     unsigned int secondChoice   = medres;
  58.     unsigned int lastResort     = hires;
  59.     switch (resolution)
  60.     {
  61.     case lores:
  62.         secondChoice = medres;
  63.         lastResort = hires;
  64.         break;
  65.     case medres:
  66.         secondChoice = lores;
  67.         lastResort = hires;
  68.         break;
  69.     case hires:
  70.         secondChoice = medres;
  71.         lastResort = lores;
  72.         break;
  73.     }
  74.     tex[resolution] = tex[secondChoice];
  75.     res = texMan->find(tex[resolution]);
  76.     if (res != NULL)
  77.         return res;
  78.     tex[resolution] = tex[lastResort];
  79.     return texMan->find(tex[resolution]);
  80. }
  81. bool MultiResTexture::isValid() const
  82. {
  83.     return (tex[lores] != InvalidResource ||
  84.             tex[medres] != InvalidResource ||
  85.             tex[hires] != InvalidResource);
  86. }