OSDN Git Service

Merge Webkit at r70949: Initial merge by git.
[android-x86/external-webkit.git] / WebCore / html / canvas / WebGLTexture.h
index c64dd41..6ee3dcc 100644 (file)
 #ifndef WebGLTexture_h
 #define WebGLTexture_h
 
-#include "CanvasObject.h"
+#include "WebGLObject.h"
 
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefCounted.h>
+#include <wtf/Vector.h>
 
 namespace WebCore {
-    
-    class WebGLTexture : public CanvasObject {
+
+class WebGLTexture : public WebGLObject {
+public:
+    virtual ~WebGLTexture() { deleteObject(); }
+
+    static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*);
+
+    void setTarget(unsigned long target, int maxLevel);
+    void setParameteri(unsigned long pname, int param);
+    void setParameterf(unsigned long pname, float param);
+
+    int getMinFilter() const { return m_minFilter; }
+
+    void setLevelInfo(unsigned long target, int level, unsigned long internalFormat, int width, int height, unsigned long type);
+
+    bool canGenerateMipmaps();
+    // Generate all level information.
+    void generateMipmapLevelInfo();
+
+    unsigned long getInternalFormat(int level) const;
+
+    // Whether width/height is NotPowerOfTwo.
+    static bool isNPOT(unsigned, unsigned);
+
+    bool isNPOT() const;
+    // Determine if texture sampling should always return [0, 0, 0, 1] (OpenGL ES 2.0 Sec 3.8.2).
+    bool needToUseBlackTexture() const;
+
+    static int computeLevelCount(int width, int height);
+
+protected:
+    WebGLTexture(WebGLRenderingContext*);
+
+    virtual void deleteObjectImpl(Platform3DObject);
+
+private:
+    virtual bool isTexture() const { return true; }
+
+    void update();
+
+    int mapTargetToIndex(unsigned long);
+
+    unsigned long m_target;
+
+    int m_minFilter;
+    int m_magFilter;
+    int m_wrapS;
+    int m_wrapT;
+
+    class LevelInfo {
     public:
-        virtual ~WebGLTexture() { deleteObject(); }
-        
-        static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*);
-    
-        // For querying previously created objects via e.g. getFramebufferAttachmentParameter
-        // FIXME: should consider canonicalizing these objects
-        static PassRefPtr<WebGLTexture> create(WebGLRenderingContext*, Platform3DObject);
-
-        bool isCubeMapRWrapModeInitialized() {
-            return cubeMapRWrapModeInitialized;
+        LevelInfo()
+            : valid(false)
+            , internalFormat(0)
+            , width(0)
+            , height(0)
+            , type(0)
+        {
         }
 
-        void setCubeMapRWrapModeInitialized(bool initialized) {
-            cubeMapRWrapModeInitialized = initialized;
+        void setInfo(unsigned long internalFmt, int w, int h, unsigned long tp)
+        {
+            valid = true;
+            internalFormat = internalFmt;
+            width = w;
+            height = h;
+            type = tp;
         }
 
-    protected:
-        WebGLTexture(WebGLRenderingContext*);
-        WebGLTexture(WebGLRenderingContext*, Platform3DObject);
+        bool valid;
+        unsigned long internalFormat;
+        int width;
+        int height;
+        unsigned long type;
+    };
 
-        virtual void _deleteObject(Platform3DObject);
+    Vector<Vector<LevelInfo> > m_info;
+
+    bool m_isNPOT;
+    bool m_isComplete;
+    bool m_needToUseBlackTexture;
+};
 
-    private:
-        bool cubeMapRWrapModeInitialized;
-    };
-    
 } // namespace WebCore
 
 #endif // WebGLTexture_h