⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extgl.h

📁 PDE simulator on GPU.
💻 H
📖 第 1 页 / 共 5 页
字号:
extern "C" {
#endif

/* stuff for NV_half_float extension (datatype and conversion functions) 
   I hope this type will be reused for other 2 byte float extensions */

union ieee_half /* ieee-like 16 bit float */ 
{
    unsigned short bits;
    struct 
    {
        unsigned long m : 10; /* mantissa */
        unsigned long e : 5;  /* exponent */
        unsigned long s : 1;  /* sign */
    } ieee;
};

union ieee_single /* ieee-754 single floating point type */
{
    float f;
    struct 
    {
        unsigned long m : 23;  /* mantissa */
        unsigned long e : 8;   /* exponent */
        unsigned long s : 1;   /* sign */
    } ieee;
};

/* the actual typedef */

typedef unsigned short GLhalf;

/* conversion functions */

/* half to float */
__inline static float htof(GLhalf val) 
{
    union ieee_half h;
    union ieee_single sng;
    h.bits = val;
    sng.ieee.s = h.ieee.s;

    /* special cases */
    if ((h.ieee.e==0) && (h.ieee.m==0)) 
    {  /* zero */
        sng.ieee.m=0;
        sng.ieee.e=0;
    }
    else if ((h.ieee.e==0) && (h.ieee.m!=0)) 
    { /* denorm -- denorm half will fit in non-denorm single */
        const float half_denorm = (1.0f/16384.0f); // 2^-14
        float mantissa = ((float)(h.ieee.m)) / 1024.0f;
        float sgn = (h.ieee.s)? -1.0f :1.0f;
        sng.f = sgn*mantissa*half_denorm;
    }
    else if ((h.ieee.e==31) && (h.ieee.m==0)) 
    { /* infinity */
        sng.ieee.e = 0xff;
        sng.ieee.m = 0;
    }
    else if ((h.ieee.e==31) && (h.ieee.m!=0)) 
    { /* NaN */
        sng.ieee.e = 0xff;
        sng.ieee.m = 1;
    }
    else 
    {
        sng.ieee.e = h.ieee.e+112;
        sng.ieee.m = (h.ieee.m << 13);
    }

    return sng.f;
}

/* float to half */
__inline static GLhalf ftoh(float val) 
{
    union ieee_single f;
    union ieee_half h;
    f.f = val;
    
    h.ieee.s = f.ieee.s;

    /* special cases */


    if ((f.ieee.e==0) && (f.ieee.m==0)) 
    { /* zero */
        h.ieee.m = 0;
        h.ieee.e = 0;
    }
    else if ((f.ieee.e==0) && (f.ieee.m!=0)) 
    { /* denorm -- denorm float maps to 0 half */
        h.ieee.m = 0;
        h.ieee.e = 0;
    }           
    else if ((f.ieee.e==0xff) && (f.ieee.m==0)) 
    { /* infinity */
        h.ieee.m = 0;
        h.ieee.e = 31;
    }
    else if ((f.ieee.e==0xff) && (f.ieee.m!=0)) 
    { /* NaN */
        h.ieee.m = 1;
        h.ieee.e = 31;
    }
    else 
    { /* normal case */
        int new_exp = f.ieee.e-127;
        if (new_exp<-24) 
        { /* half can't map such numbers */
            h.ieee.m = 0;
            h.ieee.e = 0;
        }

        if (new_exp<-14) 
        { /* this maps to a denorm */
            unsigned int exp_val = (unsigned int) (-14 - new_exp); // 2^-exp_val
            h.ieee.e = 0;
            switch (exp_val) 
            {
            case 0: h.ieee.m = 0; break; /* logical error */
            case 1: h.ieee.m = 512 + (f.ieee.m>>14); break;
            case 2: h.ieee.m = 256 + (f.ieee.m>>15); break;
            case 3: h.ieee.m = 128 + (f.ieee.m>>16); break;
            case 4: h.ieee.m = 64 + (f.ieee.m>>17); break;
            case 5: h.ieee.m = 32 + (f.ieee.m>>18); break;
            case 6: h.ieee.m = 16 + (f.ieee.m>>19); break;
            case 7: h.ieee.m = 8 + (f.ieee.m>>20); break;
            case 8: h.ieee.m = 4 + (f.ieee.m>>21); break;
            case 9: h.ieee.m = 2 + (f.ieee.m>>22); break;
            case 10: h.ieee.m = 1; break;
            }
        }
        else if (new_exp>15) 
        { /* map this value to infinity */
            h.ieee.m = 0;
            h.ieee.e = 31;
        }
        else 
        {
            h.ieee.e = new_exp+15;
            h.ieee.m = (f.ieee.m >> 13);
        }
    }
return h.bits;
}

/* OpenGL 1.1 definition */

typedef unsigned int GLenum;
typedef unsigned char GLboolean;
typedef unsigned int GLbitfield;
typedef signed char GLbyte;
typedef short GLshort;
typedef int GLint;
typedef int GLsizei;
typedef unsigned char GLubyte;
typedef unsigned short GLushort;
typedef unsigned int GLuint;
typedef float GLfloat;
typedef float GLclampf;
typedef double GLdouble;
typedef double GLclampd;
typedef void GLvoid;

#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
#include <GL/glx.h>
#endif /* _WIN32 */

/* for mingw compatibility */
typedef void (*_GLfuncptr)();

#define GL_VERSION_1_1                                          1
#define GL_ACCUM                                                0x0100
#define GL_LOAD                                                 0x0101
#define GL_RETURN                                               0x0102
#define GL_MULT                                                 0x0103
#define GL_ADD                                                  0x0104
#define GL_NEVER                                                0x0200
#define GL_LESS                                                 0x0201
#define GL_EQUAL                                                0x0202
#define GL_LEQUAL                                               0x0203
#define GL_GREATER                                              0x0204
#define GL_NOTEQUAL                                             0x0205
#define GL_GEQUAL                                               0x0206
#define GL_ALWAYS                                               0x0207
#define GL_CURRENT_BIT                                          0x00000001
#define GL_POINT_BIT                                            0x00000002
#define GL_LINE_BIT                                             0x00000004
#define GL_POLYGON_BIT                                          0x00000008
#define GL_POLYGON_STIPPLE_BIT                                  0x00000010
#define GL_PIXEL_MODE_BIT                                       0x00000020
#define GL_LIGHTING_BIT                                         0x00000040
#define GL_FOG_BIT                                              0x00000080
#define GL_DEPTH_BUFFER_BIT                                     0x00000100
#define GL_ACCUM_BUFFER_BIT                                     0x00000200
#define GL_STENCIL_BUFFER_BIT                                   0x00000400
#define GL_VIEWPORT_BIT                                         0x00000800
#define GL_TRANSFORM_BIT                                        0x00001000
#define GL_ENABLE_BIT                                           0x00002000
#define GL_COLOR_BUFFER_BIT                                     0x00004000
#define GL_HINT_BIT                                             0x00008000
#define GL_EVAL_BIT                                             0x00010000
#define GL_LIST_BIT                                             0x00020000
#define GL_TEXTURE_BIT                                          0x00040000
#define GL_SCISSOR_BIT                                          0x00080000
#define GL_ALL_ATTRIB_BITS                                      0x000fffff
#define GL_POINTS                                               0x0000
#define GL_LINES                                                0x0001
#define GL_LINE_LOOP                                            0x0002
#define GL_LINE_STRIP                                           0x0003
#define GL_TRIANGLES                                            0x0004
#define GL_TRIANGLE_STRIP                                       0x0005
#define GL_TRIANGLE_FAN                                         0x0006
#define GL_QUADS                                                0x0007
#define GL_QUAD_STRIP                                           0x0008
#define GL_POLYGON                                              0x0009
#define GL_ZERO                                                 0
#define GL_ONE                                                  1
#define GL_SRC_COLOR                                            0x0300
#define GL_ONE_MINUS_SRC_COLOR                                  0x0301
#define GL_SRC_ALPHA                                            0x0302
#define GL_ONE_MINUS_SRC_ALPHA                                  0x0303
#define GL_DST_ALPHA                                            0x0304
#define GL_ONE_MINUS_DST_ALPHA                                  0x0305
#define GL_DST_COLOR                                            0x0306
#define GL_ONE_MINUS_DST_COLOR                                  0x0307
#define GL_SRC_ALPHA_SATURATE                                   0x0308
#define GL_TRUE                                                 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -