User forums > Help

Code Blocks Error Message with GLUT

<< < (3/5) > >>

sethjackson:

--- Quote ---I have copied the DLL to the same directory.  Now when i compile and run, i don't but that error anymore, but now it seems to crash.  I the the message, my application has generated errors and will be closed by windows, an error report is being created.  Whats the deal with that now?

--- End quote ---

Usually when that happens your code segfaults or something of that nature. Mind posting the code?

studiox:
sure, this is the code:

#define BLACK 0
#include <GL/glut.h>
#include <stdio.h>


void draw_pixel(int ix, int iy, int value)
{
  glBegin(GL_POINTS);
    glVertex2i( ix, iy);
  glEnd();
}

void bres(int x1,int y1,int x2,int y2)
{
  int dx, dy, i, e;
  int incx, incy, inc1, inc2;
  int x,y;

  dx = x2 - x1;
  dy = y2 - y1;

  if(dx < 0) dx = -dx;
  if(dy < 0) dy = -dy;
  incx = 1;
  if(x2 < x1) incx = -1;
  incy = 1;
  if(y2 < y1) incy = -1;
  x=x1;
  y=y1;

  if(dx > dy)
    {
      draw_pixel(x,y, BLACK);
      e = 2*dy - dx;
      inc1 = 2*( dy -dx);
      inc2 = 2*dy;
      for(i = 0; i < dx; i++)
      {
         if(e >= 0)
         {
            y += incy;
            e += inc1;
         }
         else e += inc2;
         x += incx;
         draw_pixel(x,y, BLACK);
      }
   }
   else
   {
      draw_pixel(x,y, BLACK);
      e = 2*dx - dy;
      inc1 = 2*( dx - dy);
      inc2 = 2*dx;
      for(i = 0; i < dy; i++)
      {
        if(e >= 0)
        {
           x += incx;
           e += inc1;
        }
        else e += inc2;
        y += incy;
        draw_pixel(x,y, BLACK);
    }
  }
 }

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    bres(200, 200, 100, 50); //EDGE 1
   bres(100, 50, 20, 20); //EDGE 2
   bres(20, 20, 80, 50); //EDGE 3
   bres(80, 50, 30, 30); //EDGE 4
   bres(30,30,200,200);  //EDGE 5
    glFlush();
}

int inPolygon(int x, int y, int px1, int py1, int px2, int py2, int crossings){
  if(((px1 < x && px2 > x)||(px1 > x && px2 < x)) && py1 > y && py2 > y){
    int cross = crossings + 1;
    return cross;
  }
  else if(((px1 < x && px2 > x)||(px1 > x && px2 < x)) && ((py1 < y && py2 > y) ||(py1 > y && py2 < y) )){
    int ypoint = py1 + ((py2-py1)/(px2-px1)) * (x-px1);
   if(ypoint > y){
      int cross = crossings + 1;
      return cross;
   }
  }
  else return crossings;
}

void mouse(int btn, int state, int x, int y)
{

/* mouse callback, checks if point is in polygon */
   if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN){
      y=500-y;

      int crossings = 0;
      crossings = inPolygon(x,y,200,200,100,50,crossings);
      crossings = inPolygon(x,y,100,50,20,20,crossings);
      crossings = inPolygon(x,y,20,20,80,50,crossings);
      crossings = inPolygon(x,y,80,50,30,30,crossings);
      crossings = inPolygon(x,y,30,30,200,200,crossings);

      if(crossings % 2 !=0){
         bres(x-1.5,y+1.5,x+1.5,y+1.5);
         bres(x+1.5,y+1.5,x+1.5,y-1.5);
         bres(x+1.5,y-1.5,x-1.5,y-1.5);
         bres(x-1.5,y-1.5,x-1.5,y+1.5);
      }
   }
}

void myinit()
{
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glColor3f(1.0, 0.0, 0.0);
    glPointSize(1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, 499.0, 0.0, 499.0);
}

int main(int argc, char** argv)
{

/* standard GLUT initialization */

    glutInit(&argc,argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); /* default, not needed */
    glutInitWindowSize(500,500); /* 500x500 pixel window */
    glutInitWindowPosition(0,0); /* place window top left on display */
    glutCreateWindow("Bresenham's Algorithm"); /* window title */
    glutDisplayFunc(display); /* display callback invoked when window opened */

   glutMouseFunc(mouse);

    myinit(); /* set attributes */

    glutMainLoop(); /* enter event loop */
}

thomas:

--- Quote from: rickg22 on October 04, 2005, 11:17:24 pm ---Do you think we should contact the site author so he can testdrive codeblocks? :D
Hey, maybe we could make a codeblocks workspace for the glut! :)

--- End quote ---

Generally a good idea, but unluckily GLUT is quite old (and somehow deprecated). As far as I know, Mark Kilgard gave up on it around 1998, and Nate Robins' version is some 3-4 years old, too (or so I believe).

Many OpenGL programmers will tell you "don't use GLUT, use freeglut" these days because of that (and because freeglut has a nicer license).

Unluckily, to run all those stone-age "how to draw a textured cube with OpenGL 1.1" tutorials that are on the web, you really need GLUT. Although the name "freeglut" suggests that it drops in as a more or less seemless replacement, reality is nothing like that (it was 2 years ago, maybe it is now...).

Speaking of GLUT alternatives, GLFW is a quite cool product (not only a OpenGL toolkit, but includes many things like keyboard and joystick handling, as well as threading/messaging). Personally, I recommend this as the toolkit of choice, as it is really easy to use, small, zlib-licensed, and it includes everything you probably need.
Strangely, nobody seems to really use GLFW for some reason, which is a shame (I know of no serious project using it).

It might be worthwile to contact Marcus Geelnard ("the GLFW guy"), though. It should not be too much pain to build it with Code::Blocks (I tried with Dev-CPP a year and a day ago, compiled out of the box) and make a GLFW application template, what do you think?




--- Quote from: studiox on October 05, 2005, 01:25:53 am ---
--- Quote from: himaja on October 04, 2005, 07:34:42 pm ---I am having the same problem [...] could you tell me how...
--- End quote ---

To fix that error i had to put all the right files in all the right directories.
1)glut.h, gl.h and glu.h must be the codeblocks/include/GL directory
2)glu32.lib, glut32.lib and opengl32.lib must be in the codeblocks/lib directory
3)glu32.dll, glut.dll and opengl32.dll must be in the WINNT/ServicePackFiles/i386 directory

--- End quote ---
1) and 2) are correct, but 3) is (at least in a normal setup) not correct. Unless you have a very unusual setup, the ServicePackFiles folder is not searched. This means that you keep an useless copy of your dll, and need to copy it to every project folder to run your programs.
<WINDOWS>\system32 is a better place, because then you actually use the dll as a "shared" library.
As a sidenote to 1) one might add glext.h and wglext.h, and you may want to use the gl.h/glu.h versions that you get either from SGI, nVidia, or ATI - if you intend to use more than only OpenGL 1.2 - for a basic GLUT demo, it does not matter, though.

mandrav:

--- Quote ---Speaking of GLUT alternatives, GLFW is a quite cool product (not only a OpenGL toolkit, but includes many things like keyboard and joystick handling, as well as threading/messaging). Personally, I recommend this as the toolkit of choice, as it is really easy to use, small, zlib-licensed, and it includes everything you probably need.
Strangely, nobody seems to really use GLFW for some reason, which is a shame (I know of no serious project using it).

--- End quote ---

I couldn't say it better. GLFW rocks! :)

sethjackson:
Maybe you should try to debug the code....

I would debug for you but I dont have glut.

I really don't see anything wrong but, I'm not a very good programmer (yet)  :lol:.

Anyways, thomas is right the glut dll should be in <WINDOWS>\system32.

Navigation

[0] Message Index

[#] Next page

[*] Previous page

Go to full version