游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2324|回复: 1

GPGPU例子运行报链接错误

[复制链接]

1

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-6-29 14:15:00 | 显示全部楼层 |阅读模式
我想把数组映射到纹理中,看了GPGPU的一个简单例子,想运行下,但是总是报链接错误,

1>main.obj : error LNK2001: unresolved external symbol __imp____glewFramebufferTexture2DEXT
1>main.obj : error LNK2001: unresolved external symbol __imp____glewBindFramebufferEXT
1>main.obj : error LNK2001: unresolved external symbol __imp____glewGenFramebuffersEXT
1>main.obj : error LNK2019: unresolved external symbol __imp__glewInit referenced in function _main
1>E:\test\program\texture\Debug\texture.exe : fatal error LNK1120: 5 unresolved externals


应该怎么设置啊?

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glut.h>

int main(int argc, char **argv) {
    // 这里声明纹理的大小为:teSize;而数组的大小就必须是texSize*texSize*4
    int texSize = 2;

        int i;

    // 生成测试数组的数据
    float* data = (float*)malloc(4*texSize*texSize*sizeof(float));
    float* result = (float*)malloc(4*texSize*texSize*sizeof(float));
    for (i=0; i<texSize*texSize*4; i++)
        data = (i+1.0)*0.01F;

    // 初始化OpenGL的环境
    glutInit (&argc, argv);
    glutCreateWindow("TEST1");
    glewInit();
    // 视口的比例是 1:1 pixel=texel=data 使得三者一一对应
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0,texSize,0.0,texSize);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glViewport(0,0,texSize,texSize);

   
        // 生成并绑定一个FBO,也就是生成一个离屏渲染对像
    GLuint fb;
    glGenFramebuffersEXT(1,&fb);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fb);
    // 生成两个纹理,一个是用来保存数据的纹理,一个是用作渲染对像的纹理
    GLuint tex,fboTex;
    glGenTextures (1, &tex);
        glGenTextures (1, &fboTex);

        glBindTexture(GL_TEXTURE_RECTANGLE_ARB,fboTex);
    // 设定纹理参数
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_WRAP_T, GL_CLAMP);

   // 这里在显卡上分配FBO纹理的贮存空间,每个元素的初始值是0;
    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA32F_ARB,
                 texSize,texSize,0,GL_RGBA,GL_FLOAT,0);


    // 分配数据纹理的显存空间
    glBindTexture(GL_TEXTURE_RECTANGLE_ARB,tex);
        glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,
                    GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_COLOR,GL_DECAL);

    glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA32F_ARB,
                 texSize,texSize,0,GL_RGBA,GL_FLOAT,0);





        //把当前的FBO对像,与FBO纹理绑定在一起
    glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
                              GL_COLOR_ATTACHMENT0_EXT,
                              GL_TEXTURE_RECTANGLE_ARB,fboTex,0);


    // 把本地数据传输到显卡的纹理上。
        glBindTexture(GL_TEXTURE_RECTANGLE_ARB,tex);
    glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB,0,0,0,texSize,texSize,
                    GL_RGBA,GL_FLOAT,data);


        //--------------------begin-------------------------
        //以下代码是渲染一个大小为texSize * texSize矩形,
        //其作用就是把纹理中的数据,经过处理后,保存到帧缓冲中去,
        //由于用到了离屏渲染,这里的帧缓冲区指的就是FBO纹理。
        //在这里,只是简单地把数据从纹理直接传送到帧缓冲中,
        //没有对这些流过GPU的数据作任何处理,但是如果我们会用CG、
        //GLSL等高级着色语言,对显卡进行编程,便可以在GPU中
        //截获这些数据,并对它们进行任何我们所想要的复杂运算。
        //这就是GPGPU技术的精髓所在。问题讨论:www.physdev.com

        glColor4f(1.00f,1.00f,1.00f,1.0f);
        glBindTexture(GL_TEXTURE_RECTANGLE_ARB,tex);
        glEnable(GL_TEXTURE_RECTANGLE_ARB);
                        glBegin(GL_QUADS);
                                glTexCoord2f(0.0, 0.0);
                                glVertex2f(0.0, 0.0);
                                glTexCoord2f(texSize, 0.0);
                                glVertex2f(texSize, 0.0);
                                glTexCoord2f(texSize, texSize);
                                glVertex2f(texSize, texSize);
                                glTexCoord2f(0.0, texSize);
                                glVertex2f(0.0, texSize);
                        glEnd();

        //--------------------end------------------------

    // 从帧缓冲中读取数据,并把数据保存到result数组中。
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
    glReadPixels(0, 0, texSize, texSize,GL_RGBA,GL_FLOAT,result);



    // 显示最终的结果
    printf("Data before roundtrip:\n");

    for (i=0; i<texSize*texSize*4; i++)
        printf("%f\n",data);
    printf("Data after roundtrip:\n");
    for (i=0; i<texSize*texSize*4; i++)
        printf("%f\n",result);
    // 释放本地内存
    free(data);
    free(result);

        // 释放显卡内存
    glDeleteFramebuffersEXT (1,&fb);
    glDeleteTextures (1,&tex);
        glDeleteTextures(1,&fboTex);
    return 0;
}

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2010-8-4 23:26:00 | 显示全部楼层

Re:GPGPU例子运行报链接错误

哦,这是我几年前写的代码,相不到还有人在研究。

首先你要下载glew,glut两个库,设置好路径,才能编译。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-8 06:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表