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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 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一区二区三区免费野_久草精品视频
精品国产乱码久久| 日韩欧美中文字幕精品| 精品亚洲国内自在自线福利| 亚洲国产日韩一级| 亚洲欧美成aⅴ人在线观看| 国产嫩草影院久久久久| 国产日本一区二区| 麻豆精品新av中文字幕| 无吗不卡中文字幕| 午夜免费欧美电影| 日本中文字幕一区二区视频| 日本va欧美va精品发布| 日本不卡123| 国产一区福利在线| 丁香一区二区三区| 色婷婷亚洲精品| 欧美美女喷水视频| 日韩午夜精品视频| 久久品道一品道久久精品| 日本一区二区三区国色天香 | 狠狠色丁香久久婷婷综| 精品一区二区在线播放| 高清国产一区二区三区| 91丨porny丨国产入口| 色婷婷av一区二区三区gif| 在线亚洲高清视频| 欧美刺激午夜性久久久久久久| 久久精品在这里| 亚洲男人的天堂网| 蜜桃视频免费观看一区| 成人va在线观看| 欧美日韩国产成人在线91| 精品区一区二区| 亚洲啪啪综合av一区二区三区| 午夜久久久久久电影| 国产成人综合网站| 欧美午夜一区二区| 久久久久久麻豆| 亚洲成a人片在线不卡一二三区| 免费欧美高清视频| 色综合久久综合网欧美综合网 | 午夜在线成人av| 国产又粗又猛又爽又黄91精品| 97久久久精品综合88久久| 欧美视频三区在线播放| 国产性天天综合网| 天天免费综合色| 91在线你懂得| 久久久综合网站| 日韩高清不卡一区二区三区| 99re亚洲国产精品| 久久九九久精品国产免费直播| 亚洲3atv精品一区二区三区| jlzzjlzz亚洲女人18| 日韩欧美一区二区久久婷婷| 亚洲欧美区自拍先锋| 国产伦理精品不卡| 日韩精品中文字幕一区| 亚洲最新视频在线观看| 国产91对白在线观看九色| 日韩精品专区在线| 日韩国产高清影视| 欧美日韩在线一区二区| 亚洲人午夜精品天堂一二香蕉| 丰满白嫩尤物一区二区| 精品国产亚洲在线| 久久精品99久久久| 欧美一区二区在线观看| 亚洲一区二区三区爽爽爽爽爽| 成人av网站免费| 欧美极品美女视频| 成人少妇影院yyyy| 国产午夜精品久久| 丁香一区二区三区| 国产精品人妖ts系列视频| 国产成人亚洲精品狼色在线 | 国产成人免费9x9x人网站视频| 欧美一激情一区二区三区| 亚洲成人动漫在线观看| 欧美系列在线观看| 三级久久三级久久| 日韩三级高清在线| 国产精品88av| 国产精品福利av| 99热精品国产| 亚洲一区二区在线视频| 欧美日本国产视频| 麻豆精品视频在线观看视频| 欧美精品一区二区三区视频| 国产一区二区三区av电影 | 色婷婷av一区二区| 亚洲午夜精品网| 91精品国产综合久久久久久| 蜜桃久久精品一区二区| 久久色在线视频| 白白色 亚洲乱淫| 一二三四区精品视频| 欧美一二三区在线观看| 国产一区二区不卡在线| 国产精品电影一区二区| 在线国产亚洲欧美| 久久99深爱久久99精品| 国产精品污污网站在线观看| 欧美优质美女网站| 蜜桃一区二区三区在线| 国产精品人人做人人爽人人添| 在线观看国产一区二区| 蜜臀av一区二区在线免费观看| 中文成人av在线| 777亚洲妇女| 成人avav在线| 久久国产精品第一页| 最新国产の精品合集bt伙计| 在线播放视频一区| www.亚洲色图.com| 久久精品99国产国产精| 中文字幕一区二区三区视频 | 337p粉嫩大胆噜噜噜噜噜91av | 亚洲国产视频一区| 久久久久久久久久久黄色| 91丨porny丨蝌蚪视频| 久久国产精品色婷婷| 一区二区三区欧美| 国产欧美一区二区精品婷婷| 91麻豆精品国产自产在线 | 亚洲国产wwwccc36天堂| 国产亚洲污的网站| 91麻豆精品国产91久久久资源速度| 成人午夜短视频| 久久精品国产一区二区三区免费看| 亚洲精品乱码久久久久| 国产欧美精品一区| 日韩精品资源二区在线| 欧美巨大另类极品videosbest| 99久久综合狠狠综合久久| 久久精品99久久久| 日韩高清一级片| 夜色激情一区二区| 亚洲欧美另类小说| 国产精品剧情在线亚洲| 久久久欧美精品sm网站| 欧美成人三级电影在线| 欧美一区二区三区婷婷月色| 欧美丝袜丝nylons| 在线一区二区三区做爰视频网站| 成人午夜视频在线观看| 精品一区二区免费看| 日本成人在线一区| 日韩精品一区第一页| 性久久久久久久久久久久| 一个色综合av| 亚洲国产日产av| 亚洲第一精品在线| 性感美女极品91精品| 午夜激情久久久| 视频一区国产视频| 日产国产欧美视频一区精品| 日韩国产一区二| 精品一区二区在线免费观看| 国产一区欧美二区| 国产成人精品免费视频网站| 欧美日韩久久久久久| 欧美色国产精品| 欧美精选一区二区| 日韩欧美一级特黄在线播放| 精品国产污网站| 国产欧美一区二区精品婷婷 | 欧美三区在线视频| 欧美精品1区2区3区| 日韩欧美国产电影| 久久九九久精品国产免费直播| 中文字幕第一区| 一级日本不卡的影视| 日韩成人一级大片| 国产麻豆成人传媒免费观看| 高清不卡一二三区| 在线中文字幕不卡| 日韩精品中文字幕在线不卡尤物| 精品国产伦一区二区三区观看体验| 久久久国产精华| 一区二区久久久| 久久成人羞羞网站| 9色porny自拍视频一区二区| 欧美日韩在线直播| 久久中文字幕电影| 一卡二卡欧美日韩| 国产在线麻豆精品观看| 91欧美激情一区二区三区成人| 欧美日韩国产欧美日美国产精品| 欧美不卡一区二区三区| 亚洲女厕所小便bbb| 久久精品国产在热久久| 色欲综合视频天天天| 日韩欧美不卡一区| 一区二区在线看| 国产麻豆成人传媒免费观看| 欧美影视一区在线| 国产日产欧美一区| 乱一区二区av| 欧美亚洲高清一区二区三区不卡|