/src/3rdparty/webkit/Source/WebCore/html/canvas/WebGLTexture.h

https://bitbucket.org/ultra_iter/qt-vtl · C Header · 130 lines · 72 code · 31 blank · 27 comment · 1 complexity · 4119cd6f9e91edd1f460a26110461cdf MD5 · raw file

  1. /*
  2. * Copyright (C) 2009 Apple Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  15. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
  17. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  18. * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  19. * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  20. * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  21. * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  22. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  23. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  24. */
  25. #ifndef WebGLTexture_h
  26. #define WebGLTexture_h
  27. #include "WebGLObject.h"
  28. #include <wtf/PassRefPtr.h>
  29. #include <wtf/RefCounted.h>
  30. #include <wtf/Vector.h>
  31. namespace WebCore {
  32. class WebGLTexture : public WebGLObject {
  33. public:
  34. virtual ~WebGLTexture() { deleteObject(); }
  35. static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*);
  36. void setTarget(GC3Denum target, GC3Dint maxLevel);
  37. void setParameteri(GC3Denum pname, GC3Dint param);
  38. void setParameterf(GC3Denum pname, GC3Dfloat param);
  39. GC3Denum getTarget() const { return m_target; }
  40. int getMinFilter() const { return m_minFilter; }
  41. void setLevelInfo(GC3Denum target, GC3Dint level, GC3Denum internalFormat, GC3Dsizei width, GC3Dsizei height, GC3Denum type);
  42. bool canGenerateMipmaps();
  43. // Generate all level information.
  44. void generateMipmapLevelInfo();
  45. GC3Denum getInternalFormat(GC3Denum target, GC3Dint level) const;
  46. GC3Denum getType(GC3Denum target, GC3Dint level) const;
  47. GC3Dsizei getWidth(GC3Denum target, GC3Dint level) const;
  48. GC3Dsizei getHeight(GC3Denum target, GC3Dint level) const;
  49. // Whether width/height is NotPowerOfTwo.
  50. static bool isNPOT(GC3Dsizei, GC3Dsizei);
  51. bool isNPOT() const;
  52. // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2).
  53. bool needToUseBlackTexture() const;
  54. bool hasEverBeenBound() const { return object() && m_target; }
  55. static GC3Dint computeLevelCount(GC3Dsizei width, GC3Dsizei height);
  56. protected:
  57. WebGLTexture(WebGLRenderingContext*);
  58. virtual void deleteObjectImpl(Platform3DObject);
  59. private:
  60. class LevelInfo {
  61. public:
  62. LevelInfo()
  63. : valid(false)
  64. , internalFormat(0)
  65. , width(0)
  66. , height(0)
  67. , type(0)
  68. {
  69. }
  70. void setInfo(GC3Denum internalFmt, GC3Dsizei w, GC3Dsizei h, GC3Denum tp)
  71. {
  72. valid = true;
  73. internalFormat = internalFmt;
  74. width = w;
  75. height = h;
  76. type = tp;
  77. }
  78. bool valid;
  79. GC3Denum internalFormat;
  80. GC3Dsizei width;
  81. GC3Dsizei height;
  82. GC3Denum type;
  83. };
  84. virtual bool isTexture() const { return true; }
  85. void update();
  86. int mapTargetToIndex(GC3Denum) const;
  87. const LevelInfo* getLevelInfo(GC3Denum target, GC3Dint level) const;
  88. GC3Denum m_target;
  89. GC3Denum m_minFilter;
  90. GC3Denum m_magFilter;
  91. GC3Denum m_wrapS;
  92. GC3Denum m_wrapT;
  93. Vector<Vector<LevelInfo> > m_info;
  94. bool m_isNPOT;
  95. bool m_isComplete;
  96. bool m_needToUseBlackTexture;
  97. };
  98. } // namespace WebCore
  99. #endif // WebGLTexture_h