Aller Anfang...



  • Hallo erstmal alle,
    zuerst einmal nett, dass es so ein Forum überhaupt gibt.
    Nun die Ausgangslage ist folgende: Ich kenne mich Recht gut mit C++ aus, doch leider habe ich das Programmieren für ziemlich lange Zeit auf die Seit geschoben.
    Nun hätte ich dies gern aufgefrischt und falls möglich, ein wenig über OpenGl-Anwendung gelernt.
    Ich habe es wie immer gemacht wenn ich etwas lerne: Ich habe einige einfache Beispiele gesucht, diese kopiert und analysiert.
    Eigentlich dachte ich, dass ich alle erfordlerichen Bibliotheken etc eingebunden hätte, doch macht mir bei meinem Programm ein Fehler zu schaffen, den ich einfach nicht herausfinde.
    Ich weiss das es ein sehr trivialer Fehler ist, doch wäre ich sehr froh, wenn sich jemand meinen Code anschauen könnte. Wie gesagt ist es nicht wirklich mein Code, ich habe ihn abgeschrieben, analysiert etc.

    /* ---- System Header einbinden ---- */
    #include <stdio.h>
    #include <stddef.h>
    #include <stdlib.h>
    #include <GL/glut.h>

    /* ---- Eigene Header einbinden ---- */
    #include "debugGL.h"

    void
    display (void)
    {
    //Buffer zurücksetzen
    glClear (GL_COLOR_BUFFER_BIT);

    glBegin (GL_POLYGON);
    {
    glVertex2f (0.5f, 0.5f);
    glVertex2f (-0.5f, 0.5f);
    glVertex2f (-0.5f, -0.5f);
    glVertex2f (0.5f, -0.5f);
    }
    glEnd ();
    glFlush ();
    }

    int main(int argc, char **argv)
    {
    /* Initialisieren des Fensters */
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (500, 500);
    glutInitWindowPosition (0, 0);

    /* Glut initialisieren */
    glutInit (&argc, argv);

    /* Erzeugen des Fensters */
    if (!glutCreateWindow ("Mein erstes OpenGL-Programm"))
    exit (1);

    /* Setzen der Farbattribute */
    /* Hintergrundfarbe */
    glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
    /* Zeichenfarbe */
    glColor3f (1.0f, 1.0f, 1.0f);

    /* DEBUG-Ausgabe */
    INFO (("nach glColor3f(%f,%f,%f)\n", 1.0, 1.0, 1.0));

    /* Setzen der Viewattribute */
    glMatrixMode (GL_PROJECTION);
    glLoadIdentity ();
    glOrtho (-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);

    /* Callback-Funktionen festlegen */

    /* Display-Callback (wird ausgefuehrt, wenn neu gezeichnet wird
    * z.B. nach Erzeugen oder Groessenaenderungen des Fensters) */
    glutDisplayFunc (display);

    /* DEBUG-Ausgabe */
    GLSTATE;

    /* Hauptschleife der Ereignisbehandlung starten */
    glutMainLoop ();

    return 0;
    }



  • Hallo, ich bin zwar neu hier und nicht wirklich ein Experte, aber ich kann mich nicht erinnern dass nach glBegin() ein { kommt. (Ja vor allem nicht wenn hinter glBegin() noch ein ; steht)

    glBegin (GL_POLYGON);
    glVertex2f (0.5f, 0.5f);
    glVertex2f (-0.5f, 0.5f);
    glVertex2f (-0.5f, -0.5f);
    glVertex2f (0.5f, -0.5f);
    glEnd();

    schreibs so, dann wird alles gut 😉
    aber ob weitere Fehler drin sind, kann ich jetzt nicht beantworten.

    Gruß

    Bertram;



  • man kann zwar einen neuen Block beginnen. Nur ist er in diesem Fall völlig wirkungslos. Korrigiert mich, falls falsch.
    Sag doch mal Compiler-, Linker- oder Laufzeitfehler, dann können wir dir eher helfen. Und Codetags wären nciht schlecht.
    geloescht



  • hm danke erstmal, wie gesagt hab net viel Erfahrung, aber gut zu wissen, dass dort keine Klammern kommen...
    Hab mal euren Rat befolgt und mir den Fehler angesehen und ich bin leicht schockiert:
    9 c:\dokume1\mller1\desktop\c__1\opgeng1.cpp
    C:\DEV-C_~1\Include\debugGL.h:25: parse error before `template'



  • zeig mal debugGL.h



  • wollte ich gerade tun...
    das is ja das, was mich überrascht hat, ich hab das Ding runtergeladen und eingesetzt, bingar nie auf die Idee gekommen, dass dort Fehler drin sind...

    /*/
    /**
    * @file
    * Einfache Debug-Funktionalitat fuer OpenGL-Programme.
    * Genutzt werden sollten die Makros #ERROR, #INFO, #GLSTATE und #GLGETERROR.
    /
    /
    /

    /* ---- Eigene Header einbinden ---- */
    #include "debugGL.h"

    /* ---- Funktionen ---- */

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * Ausgabe wie mit fprintf auf stderr.
    * @return Rueckgabewert der Ausgabefunktion (vfprintf).
    /
    /
    /
    int
    dbgPrint (const char *template, ...)
    {
    va_list ap;
    int result;

    va_start (ap, template);
    result = vfprintf (stderr, template, ap);
    va_end (ap);
    return result;
    }

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * Ausgabe eines GL-Fehlercode als String auf stderr.
    * @param state GL-Fehlercode (In).
    * @return Rueckgabewert der Ausgabefunktion (fprintf).
    /
    /
    /
    int
    dbgPrintGLState (GLenum state)
    {
    if (state == GL_NO_ERROR)
    {
    return fprintf (stderr, "OK: %s\n", gluErrorString (state));
    }
    else
    {
    return fprintf (stderr, "NOT OK: %s\n", gluErrorString (state));
    }
    }

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * GL-Fehlercode ermitteln und als String auf stderr ausgeben.
    * @return GL-Fehlercode (von glGetError()).
    /
    /
    /
    int
    dbgGetGLError (void)
    {
    GLenum errorCode = glGetError ();

    dbgPrintGLState (errorCode);

    return errorCode;
    }

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * GL-Fehlercode ermitteln und als String auf stderr ausgeben.
    * @return Rueckgabewert der Ausgabe-Funktion.
    /
    /
    /
    int
    dbgGL (void)
    {
    /* GLStatuswert ermitteln */
    GLenum errorCode = glGetError ();
    /* In String umwandeln und zurueckgeben */
    return dbgPrintGLState (errorCode);
    }



  • das is debugGL.cpp oder?
    in debugGL.h scheint irgendwo ein Semikolon zu fehlen, wenn meine Kristallkugel richtig funktioniert 🤡



  • code tag?
    


  • Ich würde Dir empfehlen, die ersten Schritte _Schritt für Schritt_ selber zu machen, anstatt Dir irgendwo einen Batzen Code zu schnappen und zu "analysieren".
    Wer weiß ob der Code nicht selber von einem Newbie stammt, der erstmal Schrott produziert hat.



  • Nun danke erstmal, aber egal ob ich es selber mache oder etwas anschaue, die Bibliotheken müssen funktionieren...

    Huch tatächlich Programme verwexelt sorry:
    Hier die H-Datei, hoffe es stimmt diesmal...
    erstmal Danke an alle für die Hilfe...

    #ifndef __DEBUG_GL__
    #define __DEBUG_GL__
    /*/
    /**
    * @file
    * Einfache Debug-Funktionalitat fuer OpenGL-Programme.
    * Genutzt werden sollten die Makros #ERROR, #INFO, #GLSTATE und #GLGETERROR.
    /
    /
    /

    /* ---- System Header einbinden ---- */
    #include <GL/glut.h>
    #include <stdio.h>
    #include <stdarg.h>

    /* ---- Funktionen ---- */

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * Ausgabe wie mit fprintf auf stderr.
    * @return Rueckgabewert der Ausgabefunktion (vfprintf).
    /
    /
    /
    int dbgPrint (const char *template, ...);

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * Ausgabe eines GL-Fehlercode als String auf stderr.
    * @param state GL-Fehlercode (In).
    * @return Rueckgabewert der Ausgabefunktion (fprintf).
    /
    /
    /
    int dbgPrintGLState (GLenum state);

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * GL-Fehlercode ermitteln und als String auf stderr ausgeben.
    * @return GL-Fehlercode (von glGetError()).
    /
    /
    /
    int dbgGetGLError (void);

    /*/
    /**
    * Hilfsfunktion: nicht direkt verwenden.
    * GL-Fehlercode ermitteln und als String auf stderr ausgeben.
    * @return Rueckgabewert der Ausgabe-Funktion.
    /
    /
    /
    int dbgGL (void);

    /* ---- Makros ---- */

    #ifdef DEBUG
    #define ERROR(ARGS) \
    (dbgPrint("ERR <%s[%i]>: ", __FILE__, __LINE__), dbgPrint ARGS, exit(1))
    #define INFO(ARGS) \
    (dbgPrint("INFO <%s[%i]>: ", __FILE__, __LINE__), dbgPrint ARGS)
    #define GLSTATE \
    (dbgPrint("GLSTATE <%s[%i]>: ", __FILE__, __LINE__), dbgGL())
    #define GLGETERROR \
    (dbgPrint("GLSTATE <%s[%i]>: ", __FILE__, __LINE__), dbgGetGLError())
    #else
    /**
    * Abbruch des Programms. Kompiliert mit -DDEBUG, wie: <code>fprintf (stderr,
    * ".."); exit (1);</code> (mit Ausgabe des Dateinamens und der
    * Zeilennummer).<br>
    * sonst, wie: <code>exit (1);</code><br>
    * Anwendungsbeispiel: <code>ERROR (("Fehler! zahl=%d\n", zahl));</code>
    /
    #define ERROR(ARGS) exit(1)
    /
    *
    * Ausgabe von Informationen. Kompiliert mit -DDEBUG, wie: <code>fprintf
    * (stderr, "..");</code><br> sonst, wie: NULL<br>
    * Anwendungsbeispiel: <code>INFO (("Info! zahl=%d\n", zahl))</code>;
    /
    #define INFO(ARGS)
    /
    *
    * Ausgabe des GL-Status (ersetzt GL-Fehlercodes durch entsprechende Strings).
    * Kompiliert mit -DDEBUG: GL-Status ausgeben<br>
    * sonst: nichts tun<br>
    * Anwendungsbeispiel: <code>GLSTATE;</code>
    /
    #define GLSTATE
    /
    *
    * Aktuellen GL-Status ermitteln. Kompiliert mit -DDEBUG, wie:
    * <code>glGetError();</code>, mit gleichzeitiger Ausgabe des
    * GL-Fehlercodes<br>
    * sonst, wie: <code>glGetError();</code><br>
    * Anwendungsbeispiel: <code>if (GLGETERROR != GL_NO_ERROR) exit(1);</code>
    */
    #define GLGETERROR glGetError()
    #endif

    #endif /* __DEBUG_GL__ */

    PS: Hat wer grad ne gute Anfängersite die man nicht über google findet?



  • DrMueller schrieb:

    PS: Hat wer grad ne gute Anfängersite die man nicht über google findet?

    LOL

    Bye, TGGC (Demo or Die)


Anmelden zum Antworten