PDA

View Full Version : Can not run simple GLUT code.



bodyCount++
11-02-2011, 04:20 AM
Hi folks,

I want to start learning OpenGL. So I got myself the Superbible (5th edition) and followed all instructions. Here's the first code sample:



// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.

#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h> // Shader Manager Class

#ifdef __APPLE__
#include <glut/glut.h> // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> // Windows FreeGlut equivalent
#endif

GLBatch triangleBatch;
GLShaderManager shaderManager;

///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}


///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
// Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );

shaderManager.InitializeStockShaders();

// Load up a triangle
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };

triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}



///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();

// Perform the buffer swap to display back buffer
glutSwapBuffers();
}


///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);

glutInit(&amp;argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEP TH|GLUT_STENCIL);
glutInitWindowSize(800,600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);

GLenum err = glewInit();

if(GLEW_OK != err){
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
SetupRC();

glutMainLoop();
return 0;

}


But somehow I alway run into a "Unhandled exception at 0x00000000 in Triangle.exe: 0x00000005: Access violation reading location 0x00000000".

Using the debugger it seems the problem lies in SetupRC(). The error occurs when the triangleBatch code is executed. If I comment out trianglebatch.Begin(); + ....CopyVertexData3f(vVerts); + triangleBatch.end(); It works and shows the "scene".

Another issue was that after loading "freeglut_static.lib" I got a message from VS-2008, that there are no rules defined for reading this library. Could this be the problem? If so how could I solve it?

Thanks in advance!

V-man
11-02-2011, 04:33 AM
Which GL version are you running?
Which function is causing the crash? You have to determine that for yourself.

bodyCount++
11-02-2011, 04:39 AM
I am running GL 3.0, the one you can download for this book (http://www.starstonesoftware.com/OpenGL/).

I actually know that it is in the SetupRC()-function, caused by the trianglebatch-statements. But I do not understand why.

V-man
11-02-2011, 09:00 AM
You can't download OpenGL from some random site. Check what GL version your machine supports.
Use glGetString(GL_VERSION) to find out.

http://www.opengl.org/wiki/FAQ#How_do_I_tell_what_version_of_OpenGL_I.27m_usi ng.3F

mobeen
11-02-2011, 08:15 PM
Add glewExperimental=GL_TRUE; before this line

GLenum err = glewInit();
and tell us if u still get exception.