Содержание


NTL
Core
ITexture

ITexture



Описывает текстуру (картинку). Является объектом рендера и может использоваться только при существовании самого рендера. Это означает, что текстура может использоваться только когда ее владелец принадлежит форме. Не может быть использована для рисования на форме, если рендер формы другой. Не должна использоваться элементами управления после удаления элемента управления с формы. Если нужно хранить картинки без таких ограничений, можно вместо этого использовать Image (после можно создать текстуру с него и рисовать ее с помощью рендера).

Вы можете найти больше информации в комментариях ниже.

class ITexture : public virtual IBaseTexture
{
public:
    class IData : public virtual IReleasable
    {
    protected:
        int m_iLevel;
        int m_iWidth;
        int m_iHeight;
        bool m_bPrecomputed;
    public:
        const int &Level;
        const int &Width;
        const int &Height;
        const bool &Precomputed;

        virtual Color getColor(const int x, const int y) const = 0;
        virtual void getColor(const int x, const int y, unsigned char &red, unsigned char &green, unsigned char &blue, unsigned char &alpha) = 0;
        virtual void getColor(const int x, const int y, float &red, float &green, float &blue, float &alpha) = 0;
        virtual float getDepth(const int x, const int y) const = 0;
        virtual unsigned char getStencil(const int x, const int y) const = 0;
        virtual unsigned char *getData() = 0;

        virtual void setColor(const int x, const int y, const Color &color) = 0;
        virtual void setColor(const int x, const int y, const float red, const float green, const float blue, const float alpha) = 0;
        virtual void setDepth(const int x, const int y, const float value) = 0;
        virtual void setStencil(const int x, const int y, const unsigned char value) = 0;
    };
protected:
    String m_sFilename;
    int m_iRequiredLevelCount;
    int m_iActualLevelCount;
    bool m_bPrecomputed;
    TextureMinFilter m_eMinFilter;
    TextureMagFilter m_eMagFilter;
    TextureDepthStencilMode m_eDepthStencilMode;
    int m_iBaseLevel;
    float m_fMinLOD;
    float m_fMaxLOD;
    TextureWrap m_eWrapS;
    TextureWrap m_eWrapT;
    TextureWrap m_eWrapR;
    Color m_sBorderColor;
    TextureCompareMode m_eCompareMode;
    TextureCompareFunction m_eCompareFunction;
    float m_fLODBias;
    int m_iMaxLevel;
    TextureSwizzle m_eSwizzleR;
    TextureSwizzle m_eSwizzleG;
    TextureSwizzle m_eSwizzleB;
    TextureSwizzle m_eSwizzleA;
public:
    String const &Filename;
    int const &RequiredLevelCount; // Сколько уровней должно быть у текстуры. 0 - максимально возможное. Если указано слишком большое число, будет создано максимально допустимое количество уровней 
    int const &ActualLevelCount; // Сколько уровней есть у текстуры в действительности 
    bool const &Precomputed; // Умножаются ли значения цвета на прозрачность (только для RGBA текстур). Используется для помощи при смешивании 
    TextureMinFilter const &MinFilter;
    TextureMagFilter const &MagFilter;
    TextureDepthStencilMode const &DepthStencilMode;
    int const &BaseLevel; // Начальный уровень для генерации mipmap 
    float const &MinLOD;
    float const &MaxLOD;
    TextureWrap const &WrapS;
    TextureWrap const &WrapT;
    TextureWrap const &WrapR;
    Color const &BorderColor;
    TextureCompareMode const &CompareMode;
    TextureCompareFunction const &CompareFunction;
    float const &LODBias;
    int const &MaxLevel; // Максимальный уровень для генерации mipmap 
    TextureSwizzle const &SwizzleR;
    TextureSwizzle const &SwizzleG;
    TextureSwizzle const &SwizzleB;
    TextureSwizzle const &SwizzleA;

    virtual bool setRequiredLevelCount(const int value) = 0;
    virtual bool setDepthStencilMode(const TextureDepthStencilMode value) = 0;
    virtual bool setBaseLevel(const int value) = 0;
    virtual bool setMinFilter(const TextureMinFilter value) = 0; // Устанавливает режим уменьшения 
    virtual bool setMagFilter(const TextureMagFilter value) = 0; // Устанавливает режим увеличения 
    virtual bool setMinLOD(const float value, const float relative_tolerance = ntl::RelativeTolerance<float>) = 0;
    virtual bool setMaxLOD(const float value, const float relative_tolerance = ntl::RelativeTolerance<float>) = 0;
    virtual bool setWrapS(const TextureWrap value) = 0;
    virtual bool setWrapT(const TextureWrap value) = 0;
    virtual bool setWrapR(const TextureWrap value) = 0;
    virtual bool setBorderColor(const Color &value) = 0;
    virtual bool setCompareMode(const TextureCompareMode value) = 0;
    virtual bool setCompareFunction(const TextureCompareFunction value) = 0;
    virtual bool setLODBias(const float value, const float relative_tolerance = ntl::RelativeTolerance<float>) = 0;
    virtual bool setMaxLevel(const int value) = 0;
    virtual bool setSwizzleR(const TextureSwizzle value) = 0;
    virtual bool setSwizzleG(const TextureSwizzle value) = 0;
    virtual bool setSwizzleB(const TextureSwizzle value) = 0;
    virtual bool setSwizzleA(const TextureSwizzle value) = 0;
    virtual bool setSwizzleRGBA(const TextureSwizzle value) = 0;

    virtual IData *Lock(const TextureFormat format, const int level, const bool read_only) = 0; // Возвращает данные, которые можно использовать и изменять напрямую. Формат DepthStencil нельзя использовать, вместо этого нужно использовать отдельно Depth и Stencil 
};
Пространство имен: nitisa
Включение: Nitisa/Interfaces/ITexture.h