cocos2d-X 节点(CCTexture2D.h)API

来源:互联网 发布:学校机房网络权限 编辑:程序博客网 时间:2024/04/30 23:06

本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-X 节点(CCTexture2D.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

贴图类 CCTexture2D是关于OpenGL的概念。在 OpenGL中称图片为贴图,在Cocos2D-xCCTexture2D就是图片对象的意思,可以通过它创建精灵等对象 .CCTexture2D类是精灵类和其相关类的基础。以下会看到很多类都可以用CCTexture2D类定义。 


//cocos2d-x-3.0alpha0-pre/cocos2dx/textures#ifndef __CCTEXTURE2D_H__#define __CCTEXTURE2D_H__#include <string>#include <map>#include "cocoa/CCObject.h"#include "cocoa/CCGeometry.h"#include "ccTypes.h"#ifdef EMSCRIPTEN#include "base_nodes/CCGLBufferedNode.h"#endif // EMSCRIPTENNS_CC_BEGINclass Image;typedef struct _MipmapInfo MipmapInfo;/** * @addtogroup textures * @{ *///CONSTANTS:class GLProgram;//CLASS INTERFACES:

简要

/** @brief Texture2D class.* 这个类可以方便的从一个  images, text or raw data. 创建OpenGL的2D textures       // 图像,文本或原始数据*创建Texture2D对象将永远有  power-of-two dimensions             //两个维度。*实际的图像的 texture 可能小于 texture 的尺寸;这取决于你是如何创建 tEXURE2D对象的 i.e. "contentSize" != (pixelsWide, pixelsHigh) and (maxS, maxT) != (1.0, 1.0).* 请注意,所生成的纹理的内容将上下颠倒! */class CC_DLL Texture2D : public Object#ifdef EMSCRIPTEN, public GLBufferedNode#endif // EMSCRIPTEN{public:    /** @typedef Texture2D::PixelFormat      texture 可能会被像素格式化     */    enum class PixelFormat    {        //! 自动检测类型          AUTO,        //! 32-bit texture: BGRA8888    //32位纹理:BGRA8888          BGRA8888,        //! 32-bit texture: RGBA8888        RGBA8888,        //! 24-bit texture: RGBA888        RGB888,        //! 不带Alpha通道的16位纹理               RGB565,        //! 8-bit textures 作为 masks     //模形        A8,        //! 8-bit 强度的 texture        I8,        //! 16-bit textures  作为 masks     //模形        AI88,        //! 16-bit textures: RGBA4444        RGBA4444,        //! 16-bit textures: RGB5A1        RGB5A1,        //! 4-bit PVRTC-compressed texture: PVRTC4A                        // 压缩        PVRTC4,        //! 4-bit PVRTC-compressed texture: PVRTC4 (有 alpha 通道)        PVRTC4A,        //! 2-bit PVRTC-compressed texture: PVRTC2        PVRTC2,        //! 2-bit PVRTC-compressed texture: PVRTC2 (有 alpha 通道)        PVRTC2A,        //! ETC-compressed texture: ETC                       // 压缩        ETC,        //! S3TC-compressed texture: S3TC_Dxt1        S3TC_DXT1,        //! S3TC-compressed texture: S3TC_Dxt3        S3TC_DXT3,        //! S3TC-compressed texture: S3TC_Dxt5        S3TC_DXT5,        //! ATITC-compressed texture: ATC_RGB        ATC_RGB,        //! ATITC-compressed texture: ATC_EXPLICIT_ALPHA        ATC_EXPLICIT_ALPHA,        //! ATITC-compresed texture: ATC_INTERPOLATED_ALPHA        ATC_INTERPOLATED_ALPHA,        //! 默认的 texture 格式: AUTO        DEFAULT = AUTO,                NONE = -1    };            struct PixelFormatInfo {        PixelFormatInfo(GLenum internalFormat, GLenum format, GLenum type, int bpp, bool compressed, bool alpha)            : internalFormat(internalFormat)            , format(format)            , type(type)            , bpp(bpp)            , compressed(compressed)            , alpha(alpha)        {}        GLenum internalFormat;        GLenum format;        GLenum type;        int bpp;        bool compressed;        bool alpha;    };        typedef std::map<Texture2D::PixelFormat, const PixelFormatInfo> PixelFormatInfoMap;        /**     set Min / Mag 扩展的过滤器     */    typedef struct _TexParams {        GLuint    minFilter;        GLuint    magFilter;        GLuint    wrapS;        GLuint    wrapT;    }TexParams;    public:    /** 为 UIImagescontains alpha 通道设置默认的像素的格式.     该UIImage如果包含Alpha通道,然后有三种选择:     - generate 32-bit textures: Texture2D::PixelFormat::RGBA8888 (default one)     //默认的一种     - generate 24-bit textures: Texture2D::PixelFormat::RGB888                     //生成     - generate 16-bit textures: Texture2D::PixelFormat::RGBA4444     - generate 16-bit textures: Texture2D::PixelFormat::RGB5A1     - generate 16-bit textures: Texture2D::PixelFormat::RGB565     - generate 8-bit textures: Texture2D::PixelFormat::A8 (使用它的时候你只能使用一种颜色)    他是如何工作的 ?     -如果图片是 RGBA(使用了 alpha通道)则默认的像素格式将被使用 (它可以是 a 8-bit, 16-bit or 32-bit texture)     -如果图片是 RGB(没有使用 alpha通道) 如果默认的像素格式是 RGBA8888 那么将使用 RGBA8888 (32-bit) ,其他情况将使用一个 RGB565 (16-bit texture)     这个参数对 PVR / PVR.CCZ 图片是无效的.     @since v0.8     */    static void setDefaultAlphaPixelFormat(Texture2D::PixelFormat format);    /** returns  alpha 通道像素格式     @since v0.8     */    static Texture2D::PixelFormat getDefaultAlphaPixelFormat();    CC_DEPRECATED_ATTRIBUTE static Texture2D::PixelFormat defaultAlphaPixelFormat() { return Texture2D::getDefaultAlphaPixelFormat(); };    /**对待(或没有) RVR 文件,把他们当作有 alpha premultiplied。          //预乘    你不可能再运行前知道他们有没有 alpha premultiplied。          //预乘   不论他们有没有 alpha premultiplied。  他们都是可以被加载的        //预乘        默认情况下,它被禁用。      @since v0.99.5     */    static void PVRImagesHavePremultipliedAlpha(bool haveAlphaPremultiplied);    public:    /**     * @js ctor     */    Texture2D();    /**     * @js NA     * @lua NA     */    virtual ~Texture2D();    /**     * @js NA     * @lua NA     */    const char* description(void) const;    /** 这些功能都需要创建可变的 textures     * @js NA     * @lua NA     */    void releaseData(void *data);    /**     * @js NA     * @lua NA     */    void* keepData(void *data, unsigned int length);    /** 使用数据,初始化一个Texture2D     * @js NA     * @lua NA     */    bool initWithData(const void *data, int dataLen, Texture2D::PixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh, const Size& contentSize);    /** 使用 mipmaps 初始化 */    bool initWithMipmaps(MipmapInfo* mipmaps, int mipmapsNum, Texture2D::PixelFormat pixelFormat, unsigned int pixelsWide, unsigned int pixelsHigh);    /**     扩展 Texture2D 对象使它很容易的绘制一个基本矩形   这个功能需要客户端支持 GL_TEXTURE_2D 、 GL_VERTEX_ARRAY 、 GL_TEXTURE_COORD_ARRAY     */    /** 在一个给定的点绘制一个 texture */    void drawAtPoint(const Point& point);    /** 在一个矩形内绘制一个 texture */    void drawInRect(const Rect& rect);    /**     扩展 Texture2D 对象使它很容易使用一个图片初始化    */    /** 使用一个 UIImage 对象初始化一个 texure.    调用 setDefaultAlphaPixelFormat 使用你制定的格式,转换图片然后在 texture 里面使用转换后的图片    NOTE: 他不会转换 pvr 图片文件.       //关于 pvr(图片的一种格式,像png、jpg一样) 是什么请参考 http://blog.sina.com.cn/s/blog_6fbe210701015j7z.html*/    bool initWithImage(Image * image);        /** 使用一个 UIImage 对象初始化一个 texure.图片使用我们传递过来的格式化参数格式化,然后被 texture 使用    如果你传递的是 PixelFormat::Automatic, 那么图片将自动检测图片的渲染类型,使用该类型来渲染 texture    **/    bool initWithImage(Image * image, PixelFormat format);    /**使用字符串和字符串的 长度、对齐方式、字体、字体尺寸 初始化一个 texture */    bool initWithString(const char *text,  const char *fontName, float fontSize, const Size& dimensions = Size(0, 0), TextHAlignment hAlignment = TextHAlignment::CENTER, TextVAlignment vAlignment = TextVAlignment::TOP);    /** 使用 text 初始化一个 texture */    bool initWithString(const char *text, const FontDefinition& textDefinition);    /** 为 texture 设置过滤器的最小值和磁力    如果 texture 是 NPOT (密度不是 2),那么它只能在 GL_TEXTURE_WRAP_{S,T} 里面使用 GL_CLAMP_TO_EDGE     @warning 调用此方法,可以为 texture 分配额外的内存。    @since v0.8    * @code     * 这个功能函数在 js 或者 lua 里面使用时,输入参数会改变    * In js: var setBlendFunc(var arg1, var arg2, var arg3, var arg4)    * In lua: local setBlendFunc(local arg1, local arg2, local arg3, local arg4)    * @endcode    */    void setTexParameters(const TexParams& texParams);    /**     * @js NA     * @lua NA     */    CC_DEPRECATED_ATTRIBUTE void setTexParameters(const TexParams* texParams) { return setTexParameters(*texParams); };    /** sets texture 的反锯齿参数:          - GL_TEXTURE_MIN_FILTER = GL_LINEAR    - GL_TEXTURE_MAG_FILTER = GL_LINEAR    @warning 调用此方法,可以为 texture 分配额外的内存。    @since v0.8    */    void setAntiAliasTexParameters();    /** 设置 texture 参数别名:    - GL_TEXTURE_MIN_FILTER = GL_NEAREST    - GL_TEXTURE_MAG_FILTER = GL_NEAREST    @warning 调用此方法,可以分配额外的 texture 内存。    @since v0.8    */    void setAliasTexParameters();    /** 为 texture 产生 mipmap 图片.    It only works if the texture size is POT (power of 2).      //她只在 texture 密度是2 时工作    @since v0.99.0    */    void generateMipmap();    /** returns 像素格式.     @since v2.0     */    const char* getStringForFormat() const;    CC_DEPRECATED_ATTRIBUTE const char* stringForFormat() const { return getStringForFormat(); };    /** return OpenGL texture每像素在内存中所占的 bit    @since v1.0    */    unsigned int getBitsPerPixelForFormat() const;    CC_DEPRECATED_ATTRIBUTE unsigned int bitsPerPixelForFormat() const { return getBitsPerPixelForFormat(); };    /**辅助功能,对于一个给定的格式返回每像素所占bit。     @since v2.0     */    unsigned int getBitsPerPixelForFormat(Texture2D::PixelFormat format) const;    CC_DEPRECATED_ATTRIBUTE unsigned int bitsPerPixelForFormat(Texture2D::PixelFormat format) const { return getBitsPerPixelForFormat(format); };    /** 内容尺寸 */    const Size& getContentSizeInPixels();    bool hasPremultipliedAlpha() const;    bool hasMipmaps() const;    /** Gets texture 的像素格式 */    Texture2D::PixelFormat getPixelFormat() const;        /**获取 texture 的宽度(以像素为单位)*/    unsigned int getPixelsWide() const;        /** *获取 texture 的高度(以像素为单位) */    unsigned int getPixelsHigh() const;        /** Gets texture 名字 */    GLuint getName() const;        /** Gets max S */    GLfloat getMaxS() const;    /** Sets max S */    void setMaxS(GLfloat maxS);        /** Gets max T */    GLfloat getMaxT() const;    /** Sets max T */    void setMaxT(GLfloat maxT);        Size getContentSize() const;        void setShaderProgram(GLProgram* program);    GLProgram* getShaderProgram() const;    public:    static const PixelFormatInfoMap& getPixelFormatInfoMap();    private:

转换函数

/**convert functions*/      //转换函数    /**   准换格式到你指定的格式参数,如果这个参数是, PixelFormat::Automatic,他会自动检测转换成最接近,你指定的格式参数。他会返回转换后的格式给你 如果 outData != data(输出数据不等于传入的数据),你必须手动删除    */    static PixelFormat convertDataToFormat(const unsigned char* data, int dataLen, PixelFormat originFormat, PixelFormat format, unsigned char** outData, int* outDataLen);    static PixelFormat convertI8ToFormat(const unsigned char* data, int dataLen, PixelFormat format, unsigned char** outData, int* outDataLen);    static PixelFormat convertAI88ToFormat(const unsigned char* data, int dataLen, PixelFormat format, unsigned char** outData, int* outDataLen);    static PixelFormat convertRGB888ToFormat(const unsigned char* data, int dataLen, PixelFormat format, unsigned char** outData, int* outDataLen);    static PixelFormat convertRGBA8888ToFormat(const unsigned char* data, int dataLen, PixelFormat format, unsigned char** outData, int* outDataLen);    //I8 to XXX    static void convertI8ToRGB888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertI8ToRGBA8888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertI8ToRGB565(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertI8ToRGBA4444(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertI8ToRGB5A1(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertI8ToAI88(const unsigned char* data, int dataLen, unsigned char* outData);    //AI88 to XXX    static void convertAI88ToRGB888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToRGBA8888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToRGB565(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToRGBA4444(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToRGB5A1(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToA8(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertAI88ToI8(const unsigned char* data, int dataLen, unsigned char* outData);    //RGB888 to XXX    static void convertRGB888ToRGBA8888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGB888ToRGB565(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGB888ToI8(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGB888ToAI88(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGB888ToRGBA4444(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGB888ToRGB5A1(const unsigned char* data, int dataLen, unsigned char* outData);    //RGBA8888 to XXX    static void convertRGBA8888ToRGB888(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToRGB565(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToI8(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToA8(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToAI88(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToRGBA4444(const unsigned char* data, int dataLen, unsigned char* outData);    static void convertRGBA8888ToRGB5A1(const unsigned char* data, int dataLen, unsigned char* outData);protected:    /**  texture 的像素格式 */    Texture2D::PixelFormat _pixelFormat;    /**宽度(像素)s */    unsigned int _pixelsWide;    /**高度(像素) */    unsigned int _pixelsHigh;    /** texture 名 */    GLuint _name;    /** texture max S */    GLfloat _maxS;        /** texture max T */    GLfloat _maxT;    /** content 尺寸 */    Size _contentSize;    /** texture 是否有他们的 Alpha premultiplied */    bool _hasPremultipliedAlpha;    bool _hasMipmaps;    /** 着色器程序在 drawAtPoint and drawInRect 里面使用*/    GLProgram* _shaderProgram;    static const PixelFormatInfoMap _pixelFormatInfoTables;};// end of textures group/// @}NS_CC_END#endif //__CCTEXTURE2D_H__


原创粉丝点击