You've probably guessed it already:
This Guy has compile problems with some code.
Yeah, I'm that Guy. Some Guy. =)
Anyway, I tried to compile the base code (slightly modified) from the SDL version of the tutorials. I tried to compile it with Mesa and gcc, mind you.
Here's something like what I wrote (I actually had no comments except for a description header at the top of the file, and had many tabs for good allignment, but no other changes; this version is copied from Molofee's source code.):
#ifdef WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif
#if defined(__APPLE__) && defined(__MACH__)
#include <OpenGL/gl.h> // Header File For The OpenGL32 Library
#include <OpenGL/glu.h> // Header File For The GLu32 Library
#else
#include <GL/gl.h> // Header File For The OpenGL32 Library
#include <GL/glu.h> // Header File For The GLu32 Library
#endif
#include <SDL/SDL.h> //(Some Guy) Changed this from "SDL.h"
int done;
void InitGL (int w, int h);
void DrawGLScene();
void CheckEvents(); //a function I added (Some Guy)
/* A general OpenGL initialization function. Sets all of the initial parameters. */
void InitGL(int Width, int Height) // We call this right after our OpenGL window is created.
{
glViewport(0, 0, Width, Height);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // This Will Clear The Background Color To Black
glClearDepth(1.0); // Enables Clearing Of The Depth Buffer
glDepthFunc(GL_LESS); // The Type Of Depth Test To Do
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glShadeModel(GL_SMOOTH); // Enables Smooth Color Shading
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Reset The Projection Matrix
gluPerspective(45.0f,(GLfloat)Width/(GLfloat)Height,0.1f,100.0f); // Calculate The Aspect Ratio Of The Window
glMatrixMode(GL_MODELVIEW);
}
/* The main drawing function. */
void DrawGLScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
glLoadIdentity(); // Reset The View
glTranslatef(-1.5f,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0
// draw a triangle
glBegin(GL_POLYGON); // start drawing a polygon
glVertex3f( 0.0f, 1.0f, 0.0f); // Top
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // we're done with the polygon
glTranslatef(3.0f,0.0f,0.0f); // Move Right 3 Units
// draw a square (quadrilateral)
glBegin(GL_QUADS); // start drawing a polygon (4 sided)
glVertex3f(-1.0f, 1.0f, 0.0f); // Top Left
glVertex3f( 1.0f, 1.0f, 0.0f); // Top Right
glVertex3f( 1.0f,-1.0f, 0.0f); // Bottom Right
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // done with the polygon
// swap buffers to display, since we're double buffered.
SDL_GL_SwapBuffers();
}
void CheckEvents()
{ SDL_Event event;
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_QUIT ) {
done = 1;
}
if ( event.type == SDL_KEYDOWN ) {
if ( event.key.keysym.sym == SDLK_ESCAPE ) {
done = 1;
}
}
}//end while(SDL_PollEvent...)
}
int main(int argc, char **argv)
{
/* Initialize SDL for video output */
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
exit(1);
}
/* Create a 640x480 OpenGL screen */
if ( SDL_SetVideoMode(640, 480, 0, SDL_OPENGL) == NULL ) {
fprintf(stderr, "Unable to create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
exit(2);
}
/* Set the title bar in environments that support it */
SDL_WM_SetCaption("Jeff Molofee's GL Code Tutorial ... NeHe '99", NULL);
/* Loop, drawing and checking events */
InitGL(640, 480);
done = 0;
while ( ! done ) {
DrawGLScene();
CheckEvents();
}
SDL_Quit();
return 1;
}
Now, basically this is my slightly modified version of Molofee's source code released with the SDL tutorials. I simply made the variable done into a global variable, rather than a local one, and added a function called CheckEvents(), which is called towards the end of main(). I also changed #include "SDL.h" to #include <SDL/SDL.h>, because the former wouldn't compile on my Linux system.
Apparently, gcc doesn't like something about this. I narrowed the error messages down, but a few remain like (off the top of my head):
In function main(...)
'exit' undeclared (first use this function)
In function InitGL(...)
'glViewPort' undeclared (first use this function)
That last one really bothers me.
And here's what I wrote to compile it, in case you want to know:
$ gcc main.cpp -o first
Should work, but why isn't it finding either of these functions in the headers?
Edited by - Some Guy on February 2, 2002 10:20:35 PM