2010-12-11 35 views
3

Il ne fonctionne pas, évidemment. Le code est copié directement à partir de la source fournie. J'ai mis les bibliothèques et les en-têtes là où on m'a dit. L'exécuter entraîne une sorte de crash.OpenGL Superbible premier programme se bloque

J'ai demandé à quelques personnes de l'exécuter, ils ont tous dit qu'il leur a donné une erreur concernant les fichiers .dll manquants et n'ont pas essayé d'exécuter le programme, complètement différent de ce qui m'arrive.

de la "X.exe a cessé de fonctionner" dialogue:

Problem signature: 
    Problem Event Name: BEX 
    Application Name: OpenGLtutorialCh2.exe 
    Application Version: 0.0.0.0 
    Application Timestamp: 4d02d634 
    Fault Module Name: StackHash_0a9e 
    Fault Module Version: 0.0.0.0 
    Fault Module Timestamp: 00000000 
    Exception Offset: 00000000 
    Exception Code: c0000005 
    Exception Data: 00000008 
    OS Version: 6.1.7600.2.0.0.256.48 
    Locale ID: 1033 
    Additional Information 1: 0a9e 
    Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 
    Additional Information 3: 0a9e 
    Additional Information 4: 0a9e372d3b4ad19135b953a78882e789 

Construire:

1>------ Rebuild All started: Project: OpenGLtutorialCh2, Configuration: Debug Win32 ------ 
1> triangle.cpp 
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>gltools.lib(GLBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(glew.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(glew.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLShaderManager.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLShaderManager.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLTools.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTools.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLTriangleBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTriangleBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 
1>gltools.lib(GLBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(glew.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(glew.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLShaderManager.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLShaderManager.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLTools.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTools.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1>gltools.lib(GLTriangleBatch.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with 'gltools.lib(GLTriangleBatch.obj)' or at 'C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\vc90.pdb'; linking object as if no debug info 
1> OpenGLtutorialCh2.vcxproj -> C:\Users\Bacu\documents\visual studio 2010\Projects\OpenGLtutorialCh2\Debug\OpenGLtutorialCh2.exe 
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 
code

en question:

#include <GLTools.h> 
#include <GLShaderManager.h> 

#ifdef __APPLE__ 
#include <glut/glut.h> 
#else 
#define FREEGLUT_STATIC 
#include <GL/glut.h> 
#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() 
{ 
    glClearColor(0.0f,0.0f,1.0f,1.0f); 

    shaderManager.InitializeStockShaders(); 

    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(); 
    glutSwapBuffers(); 
} 

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

    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | 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; 
} 

J'ai demandé quelques les gens pour l'exécuter, ils ont tous dit que cela leur a donné un erreur concernant les fichiers .dll manquants et n'a pas essayé d'exécuter le programme, complètement différent de ce qui m'arrive.

+0

Il en résulte "une sorte de crash"? Mais vous ne pensiez pas qu'il était nécessaire de nous donner des informations sur l'accident? ;) – jalf

+0

Je ne comprends pas pourquoi vous pouvez nous donner des informations sur la trace de pile d'exception et d'autres informations utiles. Pourquoi ne commencez-vous pas le débogage? – Luca

+0

@luca parce que je ne sais rien de tout ça. De plus ce code est copié DIRECTEMENT à partir de la source fournie dans le livre, que je m'attendrais à travailler. – Bacu

Répondre

0

Je craque celui-ci pour les mauvais conducteurs.

4

En fait, les informations que vous fournies montrent que la demande était en fait compilé:

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ========== 

Le reste des messages étaient simples avertissements.

+0

Quand je l'exécute, la console se lève, puis la fenêtre.la fenêtre est toute blanche, ne répond jamais. – Bacu

+0

@Bacu Quel système d'exploitation utilisez-vous? – karlphillip

+0

Windows 7 32bit – Bacu

0

Vraiment confondu avec votre code - GLUT et WGL dans un projet ... Essayez d'utiliser juste glut comme indiqué dans ces exemples http://www.lighthouse3d.com/opengl/glut/ A travaillé parfaitement sur mon ordinateur portable Ubuntu et bureau Win7x64.

+0

Je fais juste ce que le livre me dit. Je ne connais rien à propos de ça. – Bacu

1

Les LNK4098 mises en garde doivent faire avec vos paramètres d'exécution - dans la plupart des cas, je crois que vous pouvez les annuler en allant dans les propriétés du projet et la modification Propriétés de configuration> C/C++> Génération de code> Runtime Library de DLL de débogage multithread à Débogage multithread. (Pour la configuration de débogage. Le paramètre de sortie changerait de DLL multi-thread à multithread.)

Les LNK4099 avertissements surviennent parce que les fichiers pdb ne sont pas présents, comme disent les avertissements. Vous pouvez générer les fichiers .pdb en recompilant les bibliothèques à partir de leur source - assurez-vous de compiler la bonne version pour chaque configuration (Debug ou Release) et excluez les versions Debug de la version Release, et vice versa.

Tout cela étant dit, ces avertissements ne sont pas fatals. Je préfère ne pas avoir d'avertissements obstruant ma liste d'erreurs, mais le projet devrait quand même compiler quand ils sont présents.