C++: OpenGL Red Book Beispiel 1.1 Fehler

Hallo,

ich bin dabei, OpenGL zu lernen, deswegen habe ich mir den „OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3“ gekauft.
Ich verwende „Microsoft Visual C++ 2010 Express“ um die Programme zu kompilieren.
Jetzt habe ich mir als Ergänzung schon „FreeGLUT“ und „GLEW“ heruntergeladen und „Example 1.1“ (mit den Include-Dateien leicht abgeändert) abgeschrieben (als Libraries sind „freeglut.lib“ und „glew32.lib“ eingebunden):

#include 




#include 




#include 




using namespace std;




#include "include\LoadShaders.h"




#include "include\vgl.h"




enum VAO\_IDs { Triangles, NumVAOs };




enum Buffer\_IDs { ArrayBuffer, NumBuffers };




enum Attrib\_IDs { vPosition = 0 };




GLuint VAOs[NumVAOs];




GLuint Buffers[NumBuffers];




const GLuint NumVertices = 6;




void init()




{




    glGenVertexArrays(NumVAOs, VAOs);




    glBindVertexArray(VAOs[Triangles]);




    GLfloat vertices[NumVertices][2] = {




        { -0.90, -0.90 },   // Triangle 1




        {  0.85, -0.90 },




        { -0.90,  0.85 },




        {  0.90, -0.85 },   // Triangle 2




        {  0.90,  0.90 },




        { -0.85,  0.90 }




    };




    glGenBuffers(NumBuffers, Buffers);




    glBindBuffer(GL\_ARRAY\_BUFFER, Buffers[ArrayBuffer]);




    glBufferData(GL\_ARRAY\_BUFFER, sizeof(vertices), vertices, GL\_STATIC\_DRAW);




    ShaderInfo shaders[] = {




        { GL\_VERTEX\_SHADER, "triangles.vert" },




        { GL\_FRAGMENT\_SHADER, "triangles.frag" },




        { GL\_NONE, NULL }




    };




    GLuint program = LoadShaders(shaders);




    glUseProgram(program);




    glVertexAttribPointer(vPosition, 2, GL\_FLOAT, GL\_FALSE, 0, BUFFER\_OFFSET(0));




    glEnableVertexAttribArray(vPosition);




}




void display(void)




{




    glClear(GL\_COLOR\_BUFFER\_BIT);




    glBindVertexArray(VAOs[Triangles]);




    glDrawArrays(GL\_TRIANGLES, 0, NumVertices);




    glFlush();




}




int main(int argc, char \*\*argv)




{




    glutInit(&argc, argv);




    glutInitDisplayMode(GLUT\_RGBA);




    glutInitWindowSize(512, 512);




    glutInitContextVersion(4, 3);




    glutInitContextProfile(GLUT\_CORE\_PROFILE);




    glutCreateWindow(argv[0]);




    if(glewInit())




    {




        cerr 



            exit(EXIT\_FAILURE);





        }





        init();





        glutDisplayFunc(display);





        glutMainLoop();





        return 0;





    }





Von Visual Studio 2010 Express werden mir jetzt folgende Fehler angezeigt:



    1\>------ Erstellen gestartet: Projekt: triangles, Konfiguration: Release Win32 ------





    1\>  triangles.cpp





    1\>triangles.cpp(25): error C2220: Warnung wird als Fehler interpretiert, es wurde keine object-Datei generiert.





    1\>triangles.cpp(25): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(25): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(26): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(26): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(27): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(27): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(28): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(28): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(29): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(29): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(30): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>triangles.cpp(30): warning C4305: 'Initialisierung': Verkürzung von 'double' in 'GLfloat'





    1\>c:\program files\microsoft sdks\windows\v7.0a\include\gl\freeglut\_std.h(618): warning C4505: 'glutCreateMenu\_ATEXIT\_HACK': Nichtreferenzierte lokale Funktion wurde entfernt





    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========






Was kann ich jetzt machen, damit das Programm läuft?

Über hilfreiche Antworten wäre ich sehr dankbar. :smile:

LG,
nano99

Hi,

vor dem naechsten Einstellen solltest du das PRE am Anfang des Quellcodes oeffnen und am Ende schliessen, damit alles ordentlich formatiert beim Antwortwilligen ankommt.

Ich verwende „Microsoft Visual C++ 2010 Express“ um die

1>triangles.cpp(25): error C2220: Warnung wird als Fehler
interpretiert, es wurde keine object-Datei generiert.

Genau diese Einstellung musst du in den Projektproperties wegnehmen. Hier werden alle Warnings als Fehler interpretiert. Das ist in diesem Fall gar nicht notwendig, denn

1>triangles.cpp(25): warning C4305: ‚Initialisierung‘:
Verkürzung von ‚double‘ in ‚GLfloat‘

sagt lediglich, dass GLfloat wohl ein float anstatt eines doubles ist.

Gruss
E.

Wow, vielen Dank!

Die Einstellung wegzunehmen, dass Warnungen als Fehler internpretiert werden, war einer der ENTSCHEIDENDEN zwei Punkte!
Sonst musste ich nur noch in der „main()“-Funktion die Zeile „glutInitContextVersion(4,3)“ durch „glutInitContextVersion(2,1)“ ersetzen.

LG,
nano99