compling error in visual studio

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • yanwan

    #1

    compling error in visual studio

    Hello
    I am now compling a project, but in one source file of this project, I met
    this problem. It seems very strange.

    Below is this source file:
    ----------------------------------------
    #include "icarus_types.h "

    #ifdef WIN32
    #include <GL/glu.h>
    #include <GL/glext.h>
    extern PFNGLCONVOLUTIO NFILTER2DPROC glConvolutionFi lter2D;
    extern PFNGLCONVOLUTIO NPARAMETERIPROC glConvolutionPa rameteri;
    #endif

    extern Form *form;
    extern Project *project;
    extern psRand myrand;
    extern int can_convolve;

    SpecularPatch:: SpecularPatch(P atch *patch, int i0, int i1, int i2)
    {
    this->index[0]= i0;
    this->index[1]= i1;
    this->index[2]= i2;

    // sum radiance
    this->L[0]= patch->E[0]+patch->B[0];
    this->L[1]= patch->E[1]+patch->B[1];
    this->L[2]= patch->E[2]+patch->B[2];
    }

    SpecularPatch:: ~SpecularPatch( )
    {
    }

    void Project::buildS pecularEnvironm ent()
    {
    Octree *octree;
    OctreeVertex *ov;
    Object *obj;
    int face;
    Patch *patch;
    SpecularPatch *spatch;
    int i,j,i0,i1,i2;

    // count max vertices and patches
    i= 0;
    this->num_specular_p atches= 0;
    for (obj= this->objects; obj; obj= obj->next)
    for (face= 0; face< obj->num_faces; face++)
    {
    this->num_specular_p atches += obj->faces[face].num_patches;
    i += 3*obj->faces[face].num_patches;
    }

    // initialise
    this->specular_patch es=
    (SpecularPatch* *)calloc(this->num_specular_p atches,sizeof(S pecularPatch*)) ;
    this->specular_index _array= (unsigned
    int*)calloc(thi s->num_specular_p atches*3,sizeof (unsigned int));

    // allocate octree vertex storage
    octree= new Octree(this->bb.min,this->bb.max,i);

    // place all patch vertices into an octree
    this->num_specular_p atches= 0;
    int k= 0;
    for (obj= this->objects; obj; obj= obj->next)
    for (face= 0; face< obj->num_faces; face++)
    for (i= 0; i< obj->faces[face].num_patches; i++)
    {
    patch= obj->faces[face].patches[i];

    // insert vertices into the octree
    i0= octree->addVertex(patc h->vertex[0],patch->normal,0,0,0,0 );
    i1= octree->addVertex(patc h->vertex[1],patch->normal,0,0,0,0 );
    i2= octree->addVertex(patc h->vertex[2],patch->normal,0,0,0,0 );

    // make a new specular patch
    spatch= new SpecularPatch(p atch,i0,i1,i2);
    this->specular_patch es[this->num_specular_p atches++]= spatch;

    // store indices
    this->specular_index _array[k++]= i0;
    this->specular_index _array[k++]= i1;
    this->specular_index _array[k++]= i2;
    }

    // allocate specular vertex storage
    this->num_specular_v ertices= octree->num_vertices ;
    this->specular_radia nces=
    (SpecularRadian ce*)calloc(this->num_specular_v ertices,sizeof( SpecularRadianc e));
    this->specular_verti ces=
    (SpecularVertex *)calloc(this->num_specular_v ertices,sizeof( SpecularVertex) );

    // store data
    for (i= 0; i< this->num_specular_v ertices; i++)
    {
    // fetch octree vertex
    ov= octree->vertices[i];

    // make a new specular vertex
    this->specular_verti ces[i].pos= VectorSet(ov->x,ov->y,ov->z);

    this->specular_verti ces[i].col[0]= (unsigned char)(myrand.ra nd(255));
    this->specular_verti ces[i].col[1]= (unsigned char)(myrand.ra nd(255));
    this->specular_verti ces[i].col[2]= (unsigned char)(myrand.ra nd(255));
    this->specular_verti ces[i].col[3]= 255;
    }

    // delete the octree
    delete octree;

    for (j= 0; j< this->num_specular_p atches; j++)
    {
    spatch= this->specular_patch es[j];

    // average patch radiance at vertices
    for (i= 0; i< 3; i++)
    {
    this->specular_radia nces[spatch->index[i]].L[0] += spatch->L[0];
    this->specular_radia nces[spatch->index[i]].L[1] += spatch->L[1];
    this->specular_radia nces[spatch->index[i]].L[2] += spatch->L[2];
    this->specular_radia nces[spatch->index[i]].count++;
    }

    // calculate surface normal
    spatch->normal=
    VectorNormalize (VectorCrossPro duct(VectorSub( this->specular_verti ces[spatch->index[1]].pos,this->specular_verti ces[spatch->index[0]].pos),VectorSub (this->specular_verti ces[spatch->index[2]].pos,this->specular_verti ces[spatch->index[0]].pos)));
    }

    for (i= 0; i< this->num_specular_v ertices; i++)
    if (this->specular_radia nces[i].count > 0)
    {
    this->specular_radia nces[i].L[0] /=
    (float)(M_PI*th is->specular_radia nces[i].count);
    this->specular_radia nces[i].L[1] /=
    (float)(M_PI*th is->specular_radia nces[i].count);
    this->specular_radia nces[i].L[2] /=
    (float)(M_PI*th is->specular_radia nces[i].count);
    }
    }

    static void setMat(Vector right, Vector up, Vector view, Vector eye)
    {
    float mat[16];

    mat[0]= right.x;
    mat[1]= up.x;
    mat[2]= view.x;
    mat[3]= 0.0;

    mat[4]= right.y;
    mat[5]= up.y;
    mat[6]= view.y;
    mat[7]= 0.0;

    mat[8]= right.z;
    mat[9]= up.z;
    mat[10]= view.z;
    mat[11]= 0.0;

    mat[12]= 0.0;
    mat[13]= 0.0;
    mat[14]= 0.0;
    mat[15]= 1.0;

    glLoadMatrixf(m at);
    glTranslatef(-eye.x, -eye.y, -eye.z);
    }

    //#define __DUMP

    void Frame::buildEnv Maps()
    {
    if (project->model_type!=MO DEL_ILLUMINATIO N &&
    project->model_type!=MO DEL_RTT_ILL) return;

    Material *mat;
    int i,j;
    float mvm[16];
    Instance *inst;

    // loop over each instance
    for (j= 0, inst= project->instances; inst; j++, inst= inst->next)
    if (inst->bti)
    {
    glEnable(GL_CUL L_FACE);
    glCullFace(GL_B ACK);
    glDisable(GL_LI GHTING);
    glClearColor(0, 0,0,0);

    // prepare projection
    glMatrixMode(GL _PROJECTION);
    glPushMatrix();
    glLoadIdentity( );
    gluPerspective( 90.0, 1.0, 0.01, 100.0);

    glMatrixMode(GL _MODELVIEW);
    glPushMatrix();

    glPushAttrib(GL _VIEWPORT_BIT);
    glViewport(0,0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    // loop over each specular material
    for (i= 0; i< inst->prim->num_material s; i++)
    if (inst->bti[i] > 0)
    {
    mat= inst->prim->materials[i];

    glMatrixMode(GL _MODELVIEW);
    glGetFloatv(GL_ MODELVIEW_MATRI X, mvm);
    Vector right= VectorSet(mvm[0], mvm[4], mvm[8]);
    Vector up= VectorSet(mvm[1], mvm[5], mvm[9]);
    Vector view= VectorSet(mvm[2], mvm[6], mvm[10]);
    Vector eye= inst->material_centr es[i];
    glLoadIdentity( );

    // tone-map the scene to match this material
    project->toneMapSpecula r(this,mat);

    // bind this texture map
    glBindTexture(G L_TEXTURE_CUBE_ MAP_ARB, inst->bti[i]);

    #define MAX_BLUR 8

    // what's the filter size?
    int filter_size;
    if (mat->shi == 256.0)
    filter_size= 0;
    else
    filter_size= (int)(MAX_BLUR* (1.0-mat->shi/256.0));

    if (filter_size > 0)
    {
    if (filter_size > MAX_BLUR)
    filter_size= MAX_BLUR;

    // build an NxN convolution filter
    int sz= filter_size*fil ter_size;
    float *filter= (float*)malloc( sz*sizeof(float ));
    for (int n= 0; n< sz; n++)
    filter[n]= 1.0/(float)sz;

    if (can_convolve)
    {
    glConvolutionFi lter2D(GL_CONVO LUTION_2D,GL_LU MINANCE,filter_ size,filter_siz e,GL_LUMINANCE, GL_FLOAT,filter );
    glConvolutionPa rameteri(GL_CON VOLUTION_2D,GL_ CONVOLUTION_BOR DER_MODE,GL_REP LICATE_BORDER_H P);
    }
    glEnable(GL_CON VOLUTION_2D);

    free(filter);
    }

    // draw each face
    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(right, VectorScalar(up ,-1), VectorScalar(vi ew,-1), eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_POSIT IVE_Z_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m1.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(VectorSc alar(right,-1), VectorScalar(up ,-1), view, eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_NEGAT IVE_Z_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m2.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(view, VectorScalar(up ,-1), right, eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_NEGAT IVE_X_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m3.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(VectorSc alar(view,-1), VectorScalar(up ,-1),
    VectorScalar(ri ght,-1), eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_POSIT IVE_X_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m4.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(right, VectorScalar(vi ew,-1), up, eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_NEGAT IVE_Y_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m5.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    glClear(GL_COLO R_BUFFER_BIT | GL_DEPTH_BUFFER _BIT);
    setMat(right, view, VectorScalar(up ,-1), eye);
    project->drawSpecular(i nst,mat);
    glCopyTexSubIma ge2D(GL_TEXTURE _CUBE_MAP_POSIT IVE_Y_ARB, 0, 0, 0, 0,
    0, _ENVMAP_SIZE,_E NVMAP_SIZE);

    #ifdef __DUMP
    {
    glDisable(GL_CO NVOLUTION_2D);
    unsigned char buf[4*_ENVMAP_SIZE* _ENVMAP_SIZE];
    glReadPixels(0, 0,_ENVMAP_SIZE, _ENVMAP_SIZE,GL _RGBA,GL_UNSIGN ED_BYTE,buf);
    FILE *f= fopen("m6.ppm", "w");
    fprintf(f,"P6\n %d %d\n255\n",_ENV MAP_SIZE,_ENVMA P_SIZE);
    for (int j= 0; j< _ENVMAP_SIZE*_E NVMAP_SIZE; j++)
    {
    unsigned char c= buf[4*j+0];
    fwrite(&c,1,1,f );
    c= buf[4*j+1];
    fwrite(&c,1,1,f );
    c= buf[4*j+2];
    fwrite(&c,1,1,f );
    }
    fclose(f);
    glEnable(GL_CON VOLUTION_2D);
    }
    #endif

    if (filter_size > 0)
    glDisable(GL_CO NVOLUTION_2D);
    }

    glPopMatrix();
    glMatrixMode(GL _PROJECTION);
    glPopMatrix();
    glMatrixMode(GL _MODELVIEW);

    glPopAttrib();
    }
    }

    void Project::toneMa pSpecular(Frame *fr, Material *mat)
    {
    int i;
    float L[3];
    float k;

    // find specular scaling factor
    k= 1.0/M_PI;

    for (i= 0; i< this->num_specular_v ertices; i++)
    {
    // reflect radiance at the surface
    L[0]= mat->spe[0]*k*this->specular_radia nces[i].L[0];
    L[1]= mat->spe[1]*k*this->specular_radia nces[i].L[1];
    L[2]= mat->spe[2]*k*this->specular_radia nces[i].L[2];

    // tone-map
    fr->img->toneMap(fr->img->method,fr->img->exptime,L,th is->specular_verti ces[i].col,true);

    // gamma correct
    this->specular_verti ces[i].col[0]=
    this->gamma[this->specular_verti ces[i].col[0]];
    this->specular_verti ces[i].col[1]=
    this->gamma[this->specular_verti ces[i].col[1]];
    this->specular_verti ces[i].col[2]=
    this->gamma[this->specular_verti ces[i].col[2]];
    }
    }

    ----------------------------------------------------------------


    It seems very well in linux complie enivronment(Tol d by my friends). But in
    Visual Studio, after build it, it appears:
    --------------------------------
    Compiling...
    icarus_specular .cpp
    D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : error C2146: syntax error :
    missing ';' before identifier 'glConvolutionF ilter2D'
    D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : fatal error C1004: unexpected
    end of file found
    Error executing cl.exe.

    icarus_specular .obj - 2 error(s), 0 warning(s)
    -------------------------------------------------------

    And after I add a header file "# include <GL/glew.h> "
    the error appears as:
    -------------------------------------
    Compiling...
    icarus_specular .cpp
    D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : warning C4273:
    '__glewConvolut ionFilter2D' : inconsistent dll linkage. dllexport assumed.
    D:\cvs\icarus\r ender\icarus_sp ecular.cpp(9) : warning C4273:
    '__glewConvolut ionParameteri' : inconsistent dll linkage. dllexport
    assumed.
    D:\cvs\icarus\r ender\icarus_sp ecular.cpp(236) : error C2065:
    'GL_REPLICATE_B ORDER_HP' : undeclared identifier
    Error executing cl.exe.

    icarus_specular .obj - 1 error(s), 2 warning(s)
    -----------------------------------------------------

    It is strange, becuase 'GL_REPLICATE_B ORDER_HP' has been defined in file
    "GL/glext.h". And I have also included this header file.
    I don't know why. Is it becuase the opengl library I added was not proper?
    Or because something else? Something similar also happens in the other file.
    I hope someone can give me some advice.

    Cheers
    yanwan



  • Victor Bazarov

    #2
    Re: compling error in visual studio

    yanwan wrote:[color=blue]
    > I am now compling a project, but in one source file of this project, I met
    > this problem. It seems very strange.
    >
    > Below is this source file:
    > ----------------------------------------
    > #include "icarus_types.h "
    >
    > #ifdef WIN32
    > #include <GL/glu.h>
    > #include <GL/glext.h>[/color]

    Both headers are not standard C++ headers, you should consider the OpenGL
    newsgroup if you want some clarity on those: comp.graphics.a pi.opengl.
    [color=blue]
    > extern PFNGLCONVOLUTIO NFILTER2DPROC glConvolutionFi lter2D;
    > extern PFNGLCONVOLUTIO NPARAMETERIPROC glConvolutionPa rameteri;
    > #endif
    > [...]
    > ----------------------------------------------------------------
    >
    >
    > It seems very well in linux complie enivronment(Tol d by my friends). But in
    > Visual Studio, after build it, it appears:
    > --------------------------------
    > Compiling...
    > icarus_specular .cpp
    > D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : error C2146: syntax error :
    > missing ';' before identifier 'glConvolutionF ilter2D'[/color]

    It seems that PFNGLCONVOLUTIO NFILTER2DPROC is not defined here.
    [color=blue]
    > D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : fatal error C1004: unexpected
    > end of file found
    > Error executing cl.exe.
    >
    > icarus_specular .obj - 2 error(s), 0 warning(s)
    > -------------------------------------------------------
    >
    > And after I add a header file "# include <GL/glew.h> "[/color]

    Again, just a note: C++ has no idea what that file is for or what it
    contains.
    [color=blue]
    > the error appears as:
    > -------------------------------------
    > Compiling...
    > icarus_specular .cpp
    > D:\cvs\icarus\r ender\icarus_sp ecular.cpp(8) : warning C4273:
    > '__glewConvolut ionFilter2D' : inconsistent dll linkage. dllexport assumed.
    > D:\cvs\icarus\r ender\icarus_sp ecular.cpp(9) : warning C4273:
    > '__glewConvolut ionParameteri' : inconsistent dll linkage. dllexport
    > assumed.
    > D:\cvs\icarus\r ender\icarus_sp ecular.cpp(236) : error C2065:
    > 'GL_REPLICATE_B ORDER_HP' : undeclared identifier[/color]

    So, what's unclear? Undeclared identifier. You need to declare it or to
    include the header that declares it.
    [color=blue]
    > Error executing cl.exe.
    >
    > icarus_specular .obj - 1 error(s), 2 warning(s)
    > -----------------------------------------------------
    >
    > It is strange, becuase 'GL_REPLICATE_B ORDER_HP' has been defined in file
    > "GL/glext.h". And I have also included this header file.[/color]

    If it's a macro it could be simple 'undef'ed in the other header you added
    after that (<GL/glew.h>).
    [color=blue]
    > I don't know why. Is it becuase the opengl library I added was not proper?[/color]

    C++ has no answer to that.
    [color=blue]
    > Or because something else? Something similar also happens in the other file.
    > I hope someone can give me some advice.[/color]

    Try the OpenGL newsgroup I mentioned. If they don't know, try MS Windows
    programming newsgroup (there is a slew of those).

    V

    Comment

    Working...