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

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

?? oceanfft.cu

?? 采用GPU通用計算API實現快速傅立葉變換
?? CU
?? 第 1 頁 / 共 2 頁
字號:
    glTranslatef(translateX, translateY, translateZ);
    glRotatef(rotateX, 1.0, 0.0, 0.0);
    glRotatef(rotateY, 0.0, 1.0, 0.0);

    // render from the vbo
    glBindBuffer(GL_ARRAY_BUFFER, posVertexBuffer);
    glVertexPointer(4, GL_FLOAT, 0, 0);
    glEnableClientState(GL_VERTEX_ARRAY);

    glBindBuffer(GL_ARRAY_BUFFER, heightVertexBuffer);
    glClientActiveTexture(GL_TEXTURE0);
    glTexCoordPointer(1, GL_FLOAT, 0, 0);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glBindBuffer(GL_ARRAY_BUFFER, slopeVertexBuffer);
    glClientActiveTexture(GL_TEXTURE1);
    glTexCoordPointer(2, GL_FLOAT, 0, 0);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glUseProgram(shaderProg);

    glColor3f(1.0, 1.0, 1.0);
    if (drawPoints) {
        glDrawArrays(GL_POINTS, 0, meshW * meshH);
    } else {
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);

        glPolygonMode(GL_FRONT_AND_BACK, wireFrame ? GL_LINE : GL_FILL);
            glDrawElements(GL_TRIANGLE_STRIP, ((meshW*2)+1)*(meshH-1), GL_UNSIGNED_INT, 0);        
        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    }
    glDisableClientState(GL_VERTEX_ARRAY);
    glClientActiveTexture(GL_TEXTURE0);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glClientActiveTexture(GL_TEXTURE1);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);

    glUseProgram(0);

    glutSwapBuffers();
}

void idle()
{
    float time = cutGetTimerValue(timer);
    if (animate) {
        animTime += (time - prevTime) * animationRate;
        glutPostRedisplay();
    }
    prevTime = time;
}

void cleanup()
{
    CUDA_SAFE_CALL(cudaGLUnregisterBufferObject(heightVertexBuffer));
    CUDA_SAFE_CALL(cudaGLUnregisterBufferObject(slopeVertexBuffer));
    deleteVBO(&posVertexBuffer);
    deleteVBO(&heightVertexBuffer);
    deleteVBO(&slopeVertexBuffer);

    CUDA_SAFE_CALL( cudaFree(d_h0) );
    CUDA_SAFE_CALL( cudaFree(d_slope) );
    free(h_h0);
    cufftDestroy(fftPlan);
}

////////////////////////////////////////////////////////////////////////////////
//! Keyboard events handler
////////////////////////////////////////////////////////////////////////////////
void keyboard(unsigned char key, int /*x*/, int /*y*/)
{
    switch(key) {
    case(27) :
        cleanup();
        exit(0);
    case 'w':
        wireFrame = !wireFrame;
        break;
    case 'p':
        drawPoints = !drawPoints;
        break;
    case ' ':
        animate = !animate;
        break;
    }
    glutPostRedisplay();
}

////////////////////////////////////////////////////////////////////////////////
//! Mouse event handlers
////////////////////////////////////////////////////////////////////////////////
void mouse(int button, int state, int x, int y)
{
    if (state == GLUT_DOWN) {
        mouseButtons |= 1<<button;
    } else if (state == GLUT_UP) {
        mouseButtons = 0;
    }

    mouseOldX = x;
    mouseOldY = y;
    glutPostRedisplay();
}

void motion(int x, int y)
{
    float dx, dy;
    dx = x - mouseOldX;
    dy = y - mouseOldY;

    if (mouseButtons == 1) {
        rotateX += dy * 0.2f;
        rotateY += dx * 0.2f;
    } else if (mouseButtons == 2) {
        translateX += dx * 0.01f;
        translateY -= dy * 0.01f;        
    } else if (mouseButtons == 3) {
        translateZ += dy * 0.01f;
    }

    mouseOldX = x;
    mouseOldY = y;
    glutPostRedisplay();
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, (double) w / (double) h, 0.1, 10.0);

    windowW = w;
    windowH = h;
}

////////////////////////////////////////////////////////////////////////////////
//! Initialize GL
////////////////////////////////////////////////////////////////////////////////
CUTBoolean initGL()
{
    // initialize necessary OpenGL extensions
    glewInit();
    if (! glewIsSupported("GL_VERSION_2_0 " 
                          "GL_NV_primitive_restart "
        )) {
        fprintf(stderr, "ERROR: Support for necessary OpenGL extensions missing.");
        fflush(stderr);
        return CUTFalse;
    }

    // default initialization
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glEnable(GL_DEPTH_TEST);

    glPrimitiveRestartIndexNV(0xffffffff);
    glEnableClientState(GL_PRIMITIVE_RESTART_NV);

    // load shader
    shaderProg = loadGLSLProgram(vertShaderPath, fragShaderPath);

    CUT_CHECK_ERROR_GL();
    return CUTTrue;
}

////////////////////////////////////////////////////////////////////////////////
//! Create VBO
////////////////////////////////////////////////////////////////////////////////
void createVBO(GLuint* vbo, int size)
{
    // create buffer object
    glGenBuffers(1, vbo);
    glBindBuffer(GL_ARRAY_BUFFER, *vbo);
    glBufferData(GL_ARRAY_BUFFER, size, 0, GL_DYNAMIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    CUT_CHECK_ERROR_GL();
}

////////////////////////////////////////////////////////////////////////////////
//! Delete VBO
////////////////////////////////////////////////////////////////////////////////
void deleteVBO(GLuint* vbo)
{
    glDeleteBuffers(1, vbo);
    *vbo = 0;
}

// create index buffer for rendering quad mesh
void createMeshIndexBuffer(GLuint *id, int w, int h)
{
    int size = ((w*2)+1)*(h-1)*sizeof(GLuint);

    // create index buffer
    glGenBuffersARB(1, id);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, *id);
    glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER, size, 0, GL_STATIC_DRAW);

    // fill with indices for rendering mesh as triangle strips
    GLuint *indices = (GLuint *) glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY);
    if (!indices) {
        return;
    }

    for(int y=0; y<h-1; y++) {
        for(int x=0; x<w; x++) {
            *indices++ = y*w+x;
            *indices++ = (y+1)*w+x;
        }
        *indices++ = 0xffffffff;    // restart strip
    }

    glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}

// create fixed vertex buffer to store mesh vertices
void createMeshPositionVBO(GLuint *id, int w, int h)
{
    createVBO(id, w*h*4*sizeof(float));

    glBindBuffer(GL_ARRAY_BUFFER, *id);
    float *pos = (float *) glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    if (!pos) {
        return;
    }
    
    for(int y=0; y<h; y++) {
        for(int x=0; x<w; x++) {
            float u = x / (float) (w-1);
            float v = y / (float) (h-1);
            *pos++ = u*2.0f-1.0f;
            *pos++ = 0.0f;
            *pos++ = v*2.0f-1.0f;
            *pos++ = 1.0f;
        }
    }

    glUnmapBuffer(GL_ARRAY_BUFFER);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
}

// Attach shader to a program
int attachShader(GLuint prg, GLenum type, const char *name)
{
    GLuint shader;
    FILE * fp;
    int size, compiled;
    char * src;

    fp = fopen(name, "rb");
    if (!fp) return 0;

    fseek(fp, 0, SEEK_END);
    size = ftell(fp);
    src = (char*)malloc(size);

    fseek(fp, 0, SEEK_SET);
    fread(src, sizeof(char), size, fp);
    fclose(fp);

    shader = glCreateShader(type);
    glShaderSource(shader, 1, (const char**)&src, (const GLint*)&size);
    glCompileShader(shader);
    glGetShaderiv(shader, GL_COMPILE_STATUS, (GLint*)&compiled);
    if (!compiled) {
        char log[2048];
        int len;

        glGetShaderInfoLog(shader, 2048, (GLsizei*)&len, log);
        printf("Info log: %s\n", log);
        glDeleteShader(shader);
        return 0;
    }
    free(src);
        
    glAttachShader(prg, shader);
    glDeleteShader(shader);

    return 1;
}

// Create shader program from vertex shader and fragment shader files
GLuint loadGLSLProgram(const char *vertFileName, const char *fragFileName)
{
    GLint linked;
    GLuint program;

    program = glCreateProgram();
    if (!attachShader(program, GL_VERTEX_SHADER, vertFileName)) {
        glDeleteProgram(program);
        fprintf(stderr, "Couldn't attach vertex shader from file %s\n", vertFileName);
        return 0;
    }

    if (!attachShader(program, GL_FRAGMENT_SHADER, fragFileName)) {
        glDeleteProgram(program);
        fprintf(stderr, "Couldn't attach fragment shader from file %s\n", fragFileName);
        return 0;
    }

    glLinkProgram(program);
    glGetProgramiv(program, GL_LINK_STATUS, &linked);
    if (!linked) {
        glDeleteProgram(program);
        char temp[256];
        glGetProgramInfoLog(program, 256, 0, temp);
        fprintf(stderr, "Failed to link program: %s\n", temp);
        return 0;
    }

    return program;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美熟乱第一页| 亚洲乱码一区二区三区在线观看| 久久精品亚洲国产奇米99| 中文字幕制服丝袜成人av| 日韩av电影免费观看高清完整版| 成人av在线资源网站| 91精品国产综合久久蜜臀| 中文字幕日韩欧美一区二区三区| 免费看欧美女人艹b| 欧美伊人久久久久久午夜久久久久| 久久在线免费观看| 奇米影视一区二区三区| 欧美喷潮久久久xxxxx| 一区二区三区四区av| av中文字幕亚洲| 久久久蜜桃精品| 久久国产人妖系列| 这里只有精品99re| 亚洲成av人片在线观看| 色爱区综合激月婷婷| 国产精品久久久久国产精品日日 | 亚洲电影欧美电影有声小说| caoporn国产一区二区| 久久久另类综合| 国产专区欧美精品| 久久女同精品一区二区| 美女脱光内衣内裤视频久久影院| 欧美日韩三级视频| 亚洲成a人v欧美综合天堂| 欧美视频一二三区| 视频一区二区国产| 3d动漫精品啪啪一区二区竹菊| 亚洲aaa精品| 日韩一区二区在线播放| 久久精品国产免费| 久久久久久久久久电影| 成人免费视频播放| 国产精品初高中害羞小美女文| kk眼镜猥琐国模调教系列一区二区| 中文字幕第一区综合| 成人精品免费看| 亚洲精品国产无套在线观| 日本高清无吗v一区| 香港成人在线视频| 日韩一卡二卡三卡| 国产乱妇无码大片在线观看| 亚洲国产精品国自产拍av| 91在线视频观看| 亚洲成人免费看| 日韩免费一区二区| 成人午夜伦理影院| 夜夜夜精品看看| 欧美xxxx老人做受| 成人在线综合网| 亚洲一区在线电影| 日韩三级伦理片妻子的秘密按摩| 国产一区二区福利| 亚洲精品中文字幕在线观看| 制服丝袜国产精品| 国产91丝袜在线播放九色| 亚洲自拍欧美精品| 精品久久久久久久久久久久包黑料| 国产a视频精品免费观看| 夜夜爽夜夜爽精品视频| 久久综合丝袜日本网| 91在线porny国产在线看| 日本三级亚洲精品| 国产精品久久毛片av大全日韩| 欧美视频你懂的| 国产精品自在欧美一区| 亚洲最新视频在线观看| wwwwww.欧美系列| 精品婷婷伊人一区三区三| 国产精品1区二区.| 亚洲动漫第一页| 中文字幕制服丝袜一区二区三区| 91麻豆精品国产综合久久久久久| 国产大陆精品国产| 日本在线播放一区二区三区| 国产精品婷婷午夜在线观看| 91精品国产欧美一区二区成人 | 亚洲女同女同女同女同女同69| 欧美一区二区视频在线观看 | 欧美一区二区三区在线| 福利一区二区在线| 免费日本视频一区| 亚洲精品高清在线| 中文字幕免费观看一区| 日韩三级视频在线看| 欧美日韩亚洲综合一区| 成人av电影观看| 国产精品影视网| 蜜臀av一区二区| 午夜精品久久久久久久久久久 | 久久国产夜色精品鲁鲁99| 亚洲国产综合在线| 亚洲视频中文字幕| 国产人伦精品一区二区| 欧美成人精品福利| 欧美一区二区三区男人的天堂| 在线日韩一区二区| 91美女片黄在线| 99精品欧美一区二区三区小说| 国模大尺度一区二区三区| 美女视频一区二区三区| 亚洲国产精品视频| 亚洲一区二区三区四区中文字幕 | 欧洲激情一区二区| 色噜噜久久综合| 一本久道中文字幕精品亚洲嫩| 成人在线视频一区| 成人黄色片在线观看| 成人在线视频一区二区| 99视频精品在线| 99久久99久久精品免费看蜜桃| 成人激情校园春色| 99天天综合性| 欧洲一区在线观看| 欧美二区三区的天堂| 777精品伊人久久久久大香线蕉| 欧美系列亚洲系列| 777奇米成人网| 精品久久久久久无| 日本一二三四高清不卡| 亚洲另类色综合网站| 亚洲一线二线三线视频| 日韩vs国产vs欧美| 国产美女视频91| 91片在线免费观看| 精品视频色一区| 91精品国产丝袜白色高跟鞋| 久久久噜噜噜久噜久久综合| 国产精品美日韩| 亚洲一区二区三区国产| 免费高清不卡av| 国产精品77777| 色婷婷久久99综合精品jk白丝| 欧美日韩美女一区二区| 精品久久久久久久久久久久久久久久久 | 欧美日韩精品是欧美日韩精品| 91精品国产免费久久综合| 国产亚洲精品aa午夜观看| 亚洲欧美日韩国产另类专区| 性做久久久久久免费观看 | 丝袜美腿一区二区三区| 韩国成人在线视频| 在线日韩av片| 久久久久国产精品免费免费搜索| 亚洲三级电影网站| 免费成人在线视频观看| 99视频精品免费视频| 欧美一区二区三区日韩| 国产精品乱码一区二三区小蝌蚪| 亚洲国产一区视频| 国产精品一区一区| 欧美人动与zoxxxx乱| 国产精品麻豆网站| 奇米四色…亚洲| 91一区二区在线观看| 2024国产精品| 五月天欧美精品| av电影一区二区| 欧美精品一区在线观看| 一区二区视频在线看| 国产精品99久久久久久有的能看| 欧美三级中文字幕在线观看| 国产欧美日韩在线看| 卡一卡二国产精品| 精品污污网站免费看| 亚洲欧美区自拍先锋| 国产精品一区二区黑丝| 欧美成人一区二区三区在线观看| 一区二区三区毛片| 成人开心网精品视频| 日韩精品一区二区三区四区视频| 亚洲女人的天堂| a在线欧美一区| 国产精品乱码人人做人人爱| 狠狠色综合播放一区二区| 欧美日韩精品一区二区三区四区| 亚洲视频综合在线| 国产一区二区三区精品视频| 欧美日韩国产高清一区二区| 亚洲色图在线看| 顶级嫩模精品视频在线看| 欧美一区二区在线看| 日韩精品亚洲一区二区三区免费| 色天天综合久久久久综合片| 国产精品白丝在线| av一区二区三区四区| 国产精品三级视频| 成人一级片在线观看| 精品国产乱码久久久久久老虎| 美女网站在线免费欧美精品| 91精品国产91综合久久蜜臀| 日本va欧美va精品发布| 欧美精品丝袜久久久中文字幕| 亚洲第一福利视频在线| 欧美喷水一区二区| 免费高清视频精品|