PDA

View Full Version : Who can help me?



fanxingrong
09-14-2011, 07:34 AM
There are some error messages when I run the fogindex.c.
First, I input g++ -Wall -o fogindex fogindex.c -lglut[/B] in terminal on ubuntu 10.04. That's ok.
Second, there are some error messages after I input ./fogindex:
X Error of failed request: BadMatch (invalid parameter attributes)
Major opcode of failed request: 128 (GLX)
Minor opcode of failed request: 26 (X_GLXMakeContextCurrent)
Serial number of failed request: 48
Current serial number in output stream: 48[/B]

So who can help me solve the problem. By the way, the codes are extracted from OpenGL Programming Guide 6th, whose authors are Dave Shreiner, Mason Woo, Jackie Neider, Tom Davis.

The Codes are listed:
/*
* fogindex.c
* This program draws 5 wireframe spheres, each at
* a different z distance from the eye, in linear fog.
*/
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

/* Initialize color map and fog. Set screen clear color
* to end of color ramp.
*/
#define NUMCOLORS 32
#define RAMPSTART 16

static void init(void)
{
int i;

glEnable(GL_DEPTH_TEST);

for (i = 0; i < NUMCOLORS; i++) {
GLfloat shade;
shade = (GLfloat) (NUMCOLORS-i)/(GLfloat) NUMCOLORS;
glutSetColor (RAMPSTART + i, shade, shade, shade);
}
glEnable(GL_FOG);

glFogi (GL_FOG_MODE, GL_LINEAR);
glFogi (GL_FOG_INDEX, NUMCOLORS);
glFogf (GL_FOG_START, 1.0);
glFogf (GL_FOG_END, 6.0);
glHint (GL_FOG_HINT, GL_NICEST);
glClearIndex((GLfloat) (NUMCOLORS+RAMPSTART-1));
}

static void renderSphere (GLfloat x, GLfloat y, GLfloat z)
{
glPushMatrix();
glTranslatef (x, y, z);
glutWireSphere(0.4, 16, 16);
glPopMatrix();
}

/* display() draws 5 spheres at different z positions.
*/
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glIndexi (RAMPSTART);

renderSphere (-2., -0.5, -1.0);
renderSphere (-1., -0.5, -2.0);
renderSphere (0., -0.5, -3.0);
renderSphere (1., -0.5, -4.0);
renderSphere (2., -0.5, -5.0);

glFlush();
}

void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho (-2.5, 2.5, -2.5*(GLfloat)h/(GLfloat)w,
2.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
else
glOrtho (-2.5*(GLfloat)w/(GLfloat)h,
2.5*(GLfloat)w/(GLfloat)h, -2.5, 2.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity ();
}

void keyboard(unsigned char key, int x, int y)
{

switch (key) {
case 27:
exit(0);
}
}


/* Main Loop
* Open window with initial window size, title bar,
* color index mode, depth buffer, and handle input events.
*/
int main(int argc, char** argv)
{
glutInit(&amp;argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_INDEX | GLUT_DEPTH);
glutInitWindowSize(500, 500);
glutCreateWindow(argv[0]);
init();
glutReshapeFunc (reshape);
glutKeyboardFunc (keyboard);
glutDisplayFunc (display);
glutMainLoop();
return 0;
}

ZbuffeR
09-14-2011, 08:39 AM
glutInitDisplayMode (GLUT_SINGLE | GLUT_INDEX | GLUT_DEPTH);
My eyes bleed. Remove GLUT_INDEX, indexed color mode is obsolete and not longer supported since quite a long time.

By the way, replace also GLUT_SINGLE by GLUT_DOUBLE and replace glFlush() by glutSwapBuffers().
Because single buffering mode is getting obsoleted too...

_arts_
09-15-2011, 02:43 AM
Because double buffering mode is getting obsoleted too...


Simple buffering is getting deprecated too. That's what ZbuffeR wanted to say.

ZbuffeR
09-15-2011, 04:15 AM
Thanks for mentionning it, at least some people are actually reading what I write :)