亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? glhelpers.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <float.h>#include "glHelpers.h"//#include "buffers.h"//#include "glContext.h"#include <vector>#include <list>#define GLES2LIB#define EN_REG_DUMP 1ghShader::ghShader(const char* text, const unsigned int* bin,  int binLen, int binCS){    textShader = text;    binShader = bin;    binShaderLen = sizeof(int) * binLen; //added shariq for converting the size in byte    binShaderCheckSum = binCS;}ghShader::ghShader(){    textShader = 0;    binShader = 0;    binShaderLen = 0;    binShaderCheckSum = 0;}ghProgram::ghProgram(ghShader vertShaderObject, ghShader fragShaderObject){    vertShader = vertShaderObject;    fragShader = fragShaderObject;    loadShadersFromFile = false;    prog = 0;    vs = 0;    fs = 0;    progUsed = false;    //_registerProgram(this);}    //Loading from files is only supported on WIN32ghProgram::ghProgram(const char* vsFileName, const char* fsFileName){    vsFile = vsFileName;    fsFile = fsFileName;    loadShadersFromFile = true;        prog = 0;    vs = 0;    fs = 0;}ghProgram::~ghProgram(){    reset();}GLint ghProgram::loc(const char* varName){    //TODO: implement a cache? (not for performance but will it help in isolating bugs in gl lib?)    return glGetUniformLocation(prog, varName);}void ghProgram::bindAttribLoc(int index, const char* attribName){    std::string s(attribName);        unsigned int i=0;        for(i=0; i<attribBindings.size(); i++)    {        if(attribBindings[i].attribName == s)        {            attribBindings[i].index = index;            break;        }    }    if(i==attribBindings.size())    {        attribBindings.push_back(AttribBinding(s,index));    }}void ghProgram::reset(){    if(prog)    {        glDeleteProgram(prog);    }    if(vs)    {        glDeleteShader(vs);    }    if(fs)    {        glDeleteShader(fs);    }        prog = 0;    vs = 0;    fs = 0;}int ghProgram::reload(){    if(progUsed)    {    return    load();    }        return 0;}void checkGLerror(const char* location){    GLenum err = glGetError();        const char* errString = 0;    switch(err)    {        case GL_NO_ERROR:           errString = "GL_NO_ERROR"; break;        case GL_INVALID_ENUM:       errString = "GL_INVALID_ENUM"; break;        case GL_INVALID_VALUE:      errString = "GL_INVALID_VALUE"; break;        case GL_INVALID_OPERATION:  errString = "GL_INVALID_OPERATION"; break;        case GL_STACK_OVERFLOW:     errString = "GL_STACK_OVERFLOW"; break;        case GL_STACK_UNDERFLOW:    errString = "GL_STACK_UNDERFLOW"; break;        case GL_OUT_OF_MEMORY:      errString = "GL_OUT_OF_MEMORY"; break;        case GL_INVALID_FRAMEBUFFER_OPERATION: errString = "GL_INVALID_FRAMEBUFFER_OPERATION"; break;        default:                    errString = "UNKNOWN ERROR!!"; break;    }    if(err != GL_NO_ERROR)    {        printf("%s: %s\n", location,errString);       // __asm int 3;    }    }void checkFBStatus(const char* location){    GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);    const char* statusString = 0;    switch(fbStatus)    {    case GL_FRAMEBUFFER_COMPLETE:         statusString = "GL_FRAMEBUFFER_COMPLETE"; break;       case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:         statusString = "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"; break;    case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:         statusString = "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"; break;//    case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT: //        statusString = "GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT"; break;    case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:         statusString = "GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS"; break;    case GL_FRAMEBUFFER_INCOMPLETE_FORMATS:         statusString = "GL_FRAMEBUFFER_INCOMPLETE_FORMATS"; break;    case GL_FRAMEBUFFER_UNSUPPORTED:         statusString = "GL_FRAMEBUFFER_UNSUPPORTED"; break;//    case GL_FRAMEBUFFER_STATUS_ERROR: //        statusString = "GL_FRAMEBUFFER_STATUS_ERROR"; break;    default:        statusString = "UNKNOWN!"; break;    }    printf("@%s FBstatus :%s\n", location, statusString);}extern "C" unsigned char* binFileRead(const char*fn, unsigned int* len){    FILE* fp;    unsigned char* content = NULL;    if(fn!=NULL)     {        fp = fopen(fn,"rb");        if(fp!=NULL) {            fseek(fp,0,SEEK_END);            *len = ftell(fp);            fseek(fp,0,SEEK_SET);            if(*len > 0) {                content = (unsigned char*)malloc(sizeof(unsigned char)* (*len));                *len = fread(content,sizeof(unsigned char),*len, fp);            }            fclose(fp);        }        else{            printf("\nERROR: unable to open file %s for reading\n", fn);        }    }    return content;}//Taken from lighthouse3d's tut..extern "C" char *textFileRead(const char *fn) {    FILE *fp;    char *content = NULL;    int count=0;    if (fn != NULL) {        fp = fopen(fn,"rt");        if (fp != NULL) {            fseek(fp, 0, SEEK_END);      count = ftell(fp);      fseek(fp,0,SEEK_SET);            if (count > 0) {                content = (char *)malloc(sizeof(char) * (count+1));                count = fread(content,sizeof(char),count,fp);                content[count] = '\0';            }            //printf("SOURCE:%s\n",content);            fclose(fp);        }        else        {            printf("\nERROR: unable to open file %s for reading\n", fn);        }    }       return content;}int ghProgram::load(){    progUsed = true;    //if(!this->vs)    {        this->reset();//to be safe        this->vs = glCreateShader(GL_VERTEX_SHADER);        this->fs = glCreateShader(GL_FRAGMENT_SHADER);        this->prog = glCreateProgram();                    glAttachShader(this->prog, this->fs);        checkGLerror();        glAttachShader(this->prog, this->vs);        checkGLerror();    }    if(this->loadShadersFromFile)    {#ifndef GLES2LIB        const char* vsText = textFileRead(this->vsFile);        const char* fsText = textFileRead(this->fsFile);        if(vsText && fsText)        {            printf("\nReloading: %s, %s\n",this->vsFile, this->fsFile);            glShaderSource(this->fs, 1, &(fsText) , NULL);            checkGLerror("Post fs text shader load");            glShaderSource(this->vs, 1, &(vsText) , NULL);            checkGLerror("Post fs text shader load");            free((void*)vsText);            free((void*)fsText);        }        else        {            printf("Program load failed, one or more shader files not found\n");            return 0;        }#else        unsigned int vsBinLen=0;        unsigned int fsBinLen=0;        char fname[512];        sprintf(fname,"%s.bin",vsFile);        const unsigned char* vsBin = binFileRead(fname, &vsBinLen);        sprintf(fname,"%s.bin",fsFile);        const unsigned char* fsBin = binFileRead(fname, &fsBinLen);        glShaderBinary(1, &this->fs, (GLenum)0, fsBin, fsBinLen);        checkGLerror("Post fs bin load (from filesystem)");        glShaderBinary(1, &this->vs, (GLenum)0, vsBin, vsBinLen);        checkGLerror("Post vs bin load (from filesystem)");#endif    }    else    {#ifndef GLES2LIB        glShaderSource(this->fs, 1, &(this->fragShader.textShader) , NULL);        checkGLerror("Post fs text shader load");        glShaderSource(this->vs, 1, &(this->vertShader.textShader) , NULL);        checkGLerror("Post fs text shader load");#else    isCheckSumValid(this->fragShader.binShader, this->fragShader.binShaderLen,        this->fragShader.binShaderCheckSum,"Fragment Shader");    isCheckSumValid(this->vertShader.binShader, this->vertShader.binShaderLen,        this->vertShader.binShaderCheckSum,"Vertex Shader");    glShaderBinary(1, &this->fs, (GLenum)0, this->fragShader.binShader, this->fragShader.binShaderLen);    checkGLerror("Post fs bin load");    glShaderBinary(1, &this->vs, (GLenum)0, this->vertShader.binShader, this->vertShader.binShaderLen);    checkGLerror("Post vs bin load");#endif    }    for(unsigned int i=0; i<this->attribBindings.size(); i++)    {        glBindAttribLocation(this->prog, this->attribBindings[i].index, this->attribBindings[i].attribName.c_str());    }    glLinkProgram(this->prog);    checkGLerror();    static char buff[4000];    int len;    glGetProgramInfoLog(this->prog, sizeof(buff), &len, buff);    printf("\nProgram info log:\n%s\n", buff);    fflush(stdout);        glUseProgram(this->prog);    checkGLerror("set current program");        return 1;}/*****************************************************************************************///TODO: remove this and use c++ swapvoid tswap(float& a, float& b){        float temp = a;    a = b;    b = temp;    }/* element order reference:    m[0]  m[4]  m[8]   m[12]    m[1]  m[5]  m[9]   m[13]    m[2]  m[6]  m[10]  m[14]    m[3]  m[7]  m[11]  m[15]*/extern "C" void matTranspose(float* m){    tswap(m[1],m[4]);     tswap(m[2],m[8]);     tswap(m[3],m[12]);                        tswap(m[6],m[9]);      tswap(m[7],m[13]);                                            tswap(m[11],m[14]);}extern "C" void matIdentity(float m[16]){    for(int i=0; i<16; i++)    {        m[i] = (i%5==0)? 1.0f : 0.0f;  //The first and every fifth element after that is 1.0 other are 0.0    }}/*#ifndef fabsfloat fabs(float f){    return (f >0)? f : -f;}#endif*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99视频一区二区三区| 亚洲欧美欧美一区二区三区| 91成人在线精品| 在线亚洲高清视频| 在线观看免费亚洲| 久久久久97国产精华液好用吗 | 日日夜夜免费精品视频| 亚洲国产一区二区在线播放| 午夜精品在线视频一区| 日韩av高清在线观看| 久久99久久精品欧美| 亚洲一区免费在线观看| 日韩精品一级二级| 91麻豆精品在线观看| 欧美午夜免费电影| 精品va天堂亚洲国产| 国产欧美综合在线| 一区二区三区在线不卡| 日韩电影在线观看电影| 91麻豆国产自产在线观看| 欧美精品一区二区三| 日产欧产美韩系列久久99| 欧美视频中文一区二区三区在线观看| 国产精品午夜在线| 日韩高清电影一区| 欧美日韩在线一区二区| 久久伊人蜜桃av一区二区| 亚洲啪啪综合av一区二区三区| 国产尤物一区二区在线| 91天堂素人约啪| 中文字幕成人在线观看| 石原莉奈在线亚洲三区| 欧美日韩一区二区在线视频| 亚洲精品第一国产综合野| 国产一本一道久久香蕉| 亚洲精品在线观看网站| 激情伊人五月天久久综合| 91麻豆高清视频| 亚洲麻豆国产自偷在线| 色婷婷综合五月| 久久精品亚洲麻豆av一区二区| 亚洲第一二三四区| 99视频热这里只有精品免费| 日韩伦理av电影| 国产麻豆欧美日韩一区| 日本一区二区三区四区| 99久免费精品视频在线观看| 亚洲色图第一区| 在线视频国内自拍亚洲视频| 亚洲福利一区二区三区| 91精品国产欧美一区二区成人 | 日韩欧美色电影| 亚洲色图19p| 在线观看91视频| 日韩精品1区2区3区| 精品奇米国产一区二区三区| 亚洲一区二区3| 日韩免费看的电影| 国产精品一卡二卡| 欧美成人精品3d动漫h| 国产制服丝袜一区| 亚洲欧美一区二区三区久本道91| 色婷婷国产精品综合在线观看| 亚洲福利视频三区| 久久久亚洲欧洲日产国码αv| 成人免费视频免费观看| 久久综合丝袜日本网| 99精品在线观看视频| 国产清纯白嫩初高生在线观看91 | 国内精品久久久久影院色| 中文字幕av资源一区| 欧美日韩在线播放一区| 国产精品一区二区三区乱码| 亚洲女性喷水在线观看一区| 日韩三级av在线播放| 蜜臀久久99精品久久久久久9 | 久久免费偷拍视频| 91一区二区三区在线播放| 天天操天天色综合| 国产精品久久久久久久久久免费看| 国产精品18久久久久| 日韩欧美自拍偷拍| 色综合久久99| 国产在线视频一区二区| 亚洲第一在线综合网站| 国产精品美女久久久久高潮 | 99精品视频一区| 免费在线视频一区| 久久夜色精品国产噜噜av| 91国在线观看| 成人午夜电影久久影院| 免播放器亚洲一区| 亚洲精品乱码久久久久久| 久久久99久久| 日韩欧美亚洲国产另类| 欧美午夜理伦三级在线观看| 丁香婷婷综合激情五月色| 亚洲人成人一区二区在线观看| 日韩精品资源二区在线| 欧美在线视频不卡| 色综合天天狠狠| 成人性色生活片| 麻豆精品在线视频| 婷婷国产v国产偷v亚洲高清| 亚洲人被黑人高潮完整版| 日本一区二区三区视频视频| 久久日一线二线三线suv| 欧美最猛性xxxxx直播| 不卡av在线免费观看| 日韩成人免费看| 亚洲一二三四在线观看| 亚洲香肠在线观看| 亚洲女厕所小便bbb| 亚洲私人影院在线观看| 国产精品护士白丝一区av| 国产精品久久久久aaaa樱花| 日本一区二区三区dvd视频在线| 欧美videofree性高清杂交| 欧美一区2区视频在线观看| 欧美美女bb生活片| 成人开心网精品视频| 成人一级片网址| 成人激情动漫在线观看| 波多野结衣中文字幕一区| 成人黄色在线视频| 99国产麻豆精品| 色婷婷精品大在线视频| 欧美群妇大交群的观看方式| 成人国产精品免费网站| 97久久精品人人爽人人爽蜜臀| 99精品视频免费在线观看| 在线观看国产91| 91精品国产乱码| 精品久久久久香蕉网| 中文字幕国产精品一区二区| 亚洲欧美激情视频在线观看一区二区三区 | 97aⅴ精品视频一二三区| 色屁屁一区二区| 3d动漫精品啪啪1区2区免费 | 国产精品福利电影一区二区三区四区| 国产精品国产三级国产有无不卡| 亚洲色图.com| 美女视频黄免费的久久| 国产成人av一区二区三区在线 | 国产欧美一区二区精品性色超碰 | 成人的网站免费观看| 色婷婷亚洲精品| 日韩欧美色电影| 综合激情成人伊人| 五月开心婷婷久久| 国产成人激情av| 欧美日免费三级在线| 久久久www免费人成精品| 亚洲女同ⅹxx女同tv| 久久精品国产成人一区二区三区| 成人免费毛片嘿嘿连载视频| 欧美午夜精品一区| 国产精品女主播在线观看| 午夜电影一区二区三区| 成人看片黄a免费看在线| 91精品国产高清一区二区三区蜜臀| 久久精品人人做| 午夜精品一区二区三区电影天堂 | 免费观看成人鲁鲁鲁鲁鲁视频| 成人免费高清在线观看| 日韩一区二区中文字幕| 中文字幕佐山爱一区二区免费| 久久99精品国产麻豆婷婷| 色综合色狠狠综合色| 久久婷婷一区二区三区| 香港成人在线视频| 色哟哟日韩精品| 国产无一区二区| 舔着乳尖日韩一区| 色欧美日韩亚洲| 国产精品国产三级国产普通话三级| 老鸭窝一区二区久久精品| 欧美色区777第一页| 国产精品电影一区二区三区| 久久99久久久久| 制服丝袜av成人在线看| 亚洲麻豆国产自偷在线| av午夜一区麻豆| 国产偷国产偷精品高清尤物| 视频一区二区中文字幕| 欧美日韩一区二区三区在线看| 自拍偷拍欧美精品| 99在线视频精品| 国产精品私人影院| 国产美女视频91| 精品国产一区二区三区久久久蜜月 | 国产精品久久久久一区| 国产伦精品一区二区三区免费迷 | 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产xxx精品视频大全| 精品国产乱码久久久久久老虎| 五月综合激情日本mⅴ| 欧美午夜在线一二页| 亚洲国产一区二区三区| 欧美日韩激情在线|