Первая программа OpenGL Superbible аварийно завершает работу - PullRequest
3 голосов
/ 11 декабря 2010

Это не работает, очевидно. Код копируется прямо из предоставленного источника. Я положил библиотеки и заголовки, где мне сказали. Запуск его приводит к некоторому сбою.

Я попросил нескольких человек запустить его, все они сказали, что он дал им ошибку, касающуюся отсутствия DLL-файлов, и не пытался запустить программу, что совершенно не похоже на то, что происходит со мной.

из диалогового окна «x.exe перестал работать»:

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

Сложение:

    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 ==========

Код вопроса:

    #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;
}

Я попросил нескольких человек запустить его, все они сказали, что он дал им ошибку, касающуюся отсутствия DLL-файлов, и не пытался запустить программу, что совершенно не похоже на то, что происходит со мной.

Ответы [ 4 ]

4 голосов
/ 11 декабря 2010

На самом деле, предоставленная вами информация показывает, что приложение фактически было скомпилировано:

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

Остальные сообщения были просто предупреждениями.

1 голос
/ 29 февраля 2012

Предупреждения LNK4098 связаны с вашими настройками времени выполнения - в большинстве случаев я считаю, что вы можете отменить их, перейдя в свойства проекта и изменив Свойства конфигурации> C / C ++> Генерация кода>Библиотека времени выполнения от Многопоточная отладочная DLL до Многопоточная отладка .(Для конфигурации отладки. Параметр Release изменится с Многопоточная DLL на Многопоточная .)

Появляются предупреждения LNK4099 потому что .pdb файлы отсутствуют, как говорится в предупреждениях.Вы можете сгенерировать файлы .pdb, перекомпилировав библиотеки из их источника - убедитесь, что вы скомпилировали правильную версию для каждой конфигурации (Debug или Release) и исключили версии Debug из сборки Release, и наоборот.

Все это говорит, что эти предупреждения не смертельны.Я предпочитаю, чтобы предупреждения не забивали мой список ошибок, но проект все равно должен компилироваться, когда они присутствуют.

0 голосов
/ 27 января 2011

Я отношу это к плохим водителям.

0 голосов
/ 11 декабря 2010

Действительно перепутали с вашим кодом - GLUT и WGL в одном проекте ... Попробуйте использовать просто перенасыщение, как показано в этих примерах http://www.lighthouse3d.com/opengl/glut/ Отлично работало на моем ноутбуке Ubuntu и рабочем столе Win7x64.

...