opengl geht nicht



  • ich will anfangen opengl zu lernen, mit devcpp. ich habe also ausprobiert das sampleprogramm (new->project->multimedia) zu kompilieren, was auch einwandfrei geklappt hat, nur dass das programm nix gemacht hat ausser ein kleines schwarzes fenster zu öffnen und nach ein paar sekunden ein abnormal program termination zu bringen. ich hab ein bischen rumgesucht und mal das freeglut devpack installiert. wieder ein sample das einwandfrei kompiliert (nachdem man das #include angepasst hat), nix macht und nach ein paar sekunden mit dem selben fehler stirbt.
    ich hab weder mit der forumsinternen suchfunktion noch mit google etwas passendes finden können.

    weiß einer von euch worans liegen könnte? ich tippe darauf das was mit meinem computer nicht stimmt aber ich hatte noch keine gelegnheit es auf einem anderen auszuprobieren.



  • Debugger?

    Bye, TGGC (Ein Jahr Helden)


  • Mod

    muhkuhmasta schrieb:

    ich tippe darauf das was mit meinem computer nicht stimmt aber ich hatte noch keine gelegnheit es auf einem anderen auszuprobieren.

    gib hier mal dein projekt zum DL. dann kann man es auf anderen rechnern testen und dir sagen, ob es wirklich nur dein rechner ist 😉

    rapso->greets();



  • http://home.arcor.de/myukew/opengl.zip (8kb)
    http://home.arcor.de/myukew/freeglut.zip (62kb)

    debugger? hab keine ahnung wie der funktioniert...

    für die ohne dev-cpp:

    #include <freeglut.h>
    
    #include <stdlib.h>
    
    static int slices = 16;
    static int stacks = 16;
    
    /* GLUT callback Handlers */
    
    static void 
    resize(int width, int height)
    {
        const float ar = (float) width / (float) height;
    
        glViewport(0, 0, width, height);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
    
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity() ;
    }
    
    static void 
    display(void)
    {
        const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
        const double a = t*90.0;
    
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glColor3d(1,0,0);
    
        glPushMatrix();
            glTranslated(-2.4,1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutSolidSphere(1,slices,stacks);
        glPopMatrix();
    
        glPushMatrix();
            glTranslated(0,1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutSolidCone(1,1,slices,stacks);
        glPopMatrix();
    
        glPushMatrix();
            glTranslated(2.4,1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutSolidTorus(0.2,0.8,slices,stacks);
        glPopMatrix();
    
        glPushMatrix();
            glTranslated(-2.4,-1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutWireSphere(1,slices,stacks);
        glPopMatrix();
    
        glPushMatrix();
            glTranslated(0,-1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutWireCone(1,1,slices,stacks);
        glPopMatrix();
    
        glPushMatrix();
            glTranslated(2.4,-1.2,-6);
            glRotated(60,1,0,0);
            glRotated(a,0,0,1);
            glutWireTorus(0.2,0.8,slices,stacks);
        glPopMatrix();
    
        glutSwapBuffers();
    }
    
    static void 
    key(unsigned char key, int x, int y)
    {
        switch (key) 
        {
            case 27 : 
            case 'q':
                exit(0);
                break;
    
            case '+':
                slices++;
                stacks++;
                break;
    
            case '-':
                if (slices>3 && stacks>3)
                {
                    slices--;
                    stacks--;
                }
                break;
        }
    
        glutPostRedisplay();
    }
    
    static void 
    idle(void)
    {
        glutPostRedisplay();
    }
    
    const GLfloat light_ambient[]  = { 0.0f, 0.0f, 0.0f, 1.0f };
    const GLfloat light_diffuse[]  = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
    
    const GLfloat mat_ambient[]    = { 0.7f, 0.7f, 0.7f, 1.0f };
    const GLfloat mat_diffuse[]    = { 0.8f, 0.8f, 0.8f, 1.0f };
    const GLfloat mat_specular[]   = { 1.0f, 1.0f, 1.0f, 1.0f };
    const GLfloat high_shininess[] = { 100.0f };
    
    /* Program entry point */
    
    int 
    main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitWindowSize(640,480);
        glutInitWindowPosition(10,10);
        glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    
        glutCreateWindow("FreeGLUT Shapes");
    
        glutReshapeFunc(resize);
        glutDisplayFunc(display);
        glutKeyboardFunc(key);
        glutIdleFunc(idle);
    
        glClearColor(1,1,1,1);
        glEnable(GL_CULL_FACE);
        glCullFace(GL_BACK);
    
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LESS);
    
        glEnable(GL_LIGHT0);
        glEnable(GL_NORMALIZE);
        glEnable(GL_COLOR_MATERIAL);
        glEnable(GL_LIGHTING);
    
        glLightfv(GL_LIGHT0, GL_AMBIENT,  light_ambient);
        glLightfv(GL_LIGHT0, GL_DIFFUSE,  light_diffuse);
        glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
        glLightfv(GL_LIGHT0, GL_POSITION, light_position);
    
        glMaterialfv(GL_FRONT, GL_AMBIENT,   mat_ambient);
        glMaterialfv(GL_FRONT, GL_DIFFUSE,   mat_diffuse);
        glMaterialfv(GL_FRONT, GL_SPECULAR,  mat_specular);
        glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
    
        glutMainLoop();
    
        return EXIT_SUCCESS;
    }
    
    #include <windows.h>
    #include <gl/gl.h>
    
    /**************************
     * Function Declarations
     *
     **************************/
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
    WPARAM wParam, LPARAM lParam);
    void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
    void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);
    
    /**************************
     * WinMain
     *
     **************************/
    
    int WINAPI WinMain (HINSTANCE hInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpCmdLine,
                        int iCmdShow)
    {
        WNDCLASS wc;
        HWND hWnd;
        HDC hDC;
        HGLRC hRC;        
        MSG msg;
        BOOL bQuit = FALSE;
        float theta = 0.0f;
    
        /* register window class */
        wc.style = CS_OWNDC;
        wc.lpfnWndProc = WndProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hInstance;
        wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor (NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
        wc.lpszMenuName = NULL;
        wc.lpszClassName = "GLSample";
        RegisterClass (&wc);
    
        /* create main window */
        hWnd = CreateWindow (
          "GLSample", "OpenGL Sample", 
          WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
          0, 0, 256, 256,
          NULL, NULL, hInstance, NULL);
    
        /* enable OpenGL for the window */
        EnableOpenGL (hWnd, &hDC, &hRC);
    
        /* program main loop */
        while (!bQuit)
        {
            /* check for messages */
            if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
            {
                /* handle or dispatch messages */
                if (msg.message == WM_QUIT)
                {
                    bQuit = TRUE;
                }
                else
                {
                    TranslateMessage (&msg);
                    DispatchMessage (&msg);
                }
            }
            else
            {
                /* OpenGL animation code goes here */
    
                glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
                glClear (GL_COLOR_BUFFER_BIT);
    
                glPushMatrix ();
                glRotatef (theta, 0.0f, 0.0f, 1.0f);
                glBegin (GL_TRIANGLES);
                glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
                glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.87f, -0.5f);
                glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.87f, -0.5f);
                glEnd ();
                glPopMatrix ();
    
                SwapBuffers (hDC);
    
                theta += 1.0f;
                Sleep (1);
            }
        }
    
        /* shutdown OpenGL */
        DisableOpenGL (hWnd, hDC, hRC);
    
        /* destroy the window explicitly */
        DestroyWindow (hWnd);
    
        return msg.wParam;
    }
    
    /********************
     * Window Procedure
     *
     ********************/
    
    LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                              WPARAM wParam, LPARAM lParam)
    {
    
        switch (message)
        {
        case WM_CREATE:
            return 0;
        case WM_CLOSE:
            PostQuitMessage (0);
            return 0;
    
        case WM_DESTROY:
            return 0;
    
        case WM_KEYDOWN:
            switch (wParam)
            {
            case VK_ESCAPE:
                PostQuitMessage(0);
                return 0;
            }
            return 0;
    
        default:
            return DefWindowProc (hWnd, message, wParam, lParam);
        }
    }
    
    /*******************
     * Enable OpenGL
     *
     *******************/
    
    void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
    {
        PIXELFORMATDESCRIPTOR pfd;
        int iFormat;
    
        /* get the device context (DC) */
        *hDC = GetDC (hWnd);
    
        /* set the pixel format for the DC */
        ZeroMemory (&pfd, sizeof (pfd));
        pfd.nSize = sizeof (pfd);
        pfd.nVersion = 1;
        pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
          PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
        pfd.iPixelType = PFD_TYPE_RGBA;
        pfd.cColorBits = 24;
        pfd.cDepthBits = 16;
        pfd.iLayerType = PFD_MAIN_PLANE;
        iFormat = ChoosePixelFormat (*hDC, &pfd);
        SetPixelFormat (*hDC, iFormat, &pfd);
    
        /* create and enable the render context (RC) */
        *hRC = wglCreateContext( *hDC );
        wglMakeCurrent( *hDC, *hRC );
    
    }
    
    /******************
     * Disable OpenGL
     *
     ******************/
    
    void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
    {
        wglMakeCurrent (NULL, NULL);
        wglDeleteContext (hRC);
        ReleaseDC (hWnd, hDC);
    }
    


  • muhkuhmasta schrieb:

    debugger? hab keine ahnung wie der funktioniert...

    Na da finds mal raus, du Drops.

    Bye, TGGC (Ein Jahr Helden)



  • Also bei mir funktioniert dass erste Projekt,
    wird wohl an deinem Rechner liegen

    Das zweite auch



  • Also bei mir klappt OpenGL nicht, wenn ich neue Windows NVidia Treiber benutze. Meine Grafikkarte ist etwas älter. Vielleicht probierts du mal verschiedene Treiber versionen aus.



  • Oder verschiedene Gehirn-Versionen? Mit Autocogito und so....

    Bye, TGGC (Ein Jahr Helden)



  • TGGC schrieb:

    Oder verschiedene Gehirn-Versionen? Mit Autocogito und so....

    cogitare = Lat. glauben, meinen --> Hä, was willst du sagen?



  • ProgChild schrieb:

    TGGC schrieb:

    Oder verschiedene Gehirn-Versionen? Mit Autocogito und so....

    cogitare = Lat. glauben, meinen --> Hä, was willst du sagen?

    und auch denken



  • Die Standard-DevCPP Templates sollten eigentlich überall funzen.

    Ich tippe auf eine schrottige OpenGL32.dll.

    Hast Du MS "Treiber" drauf?



  • ich bin mir ziemlich sicher dass ich nicht die standard windows treiber für meine riva tnt 2 hab, sondern irgendwelche aktuelleren



  • ein update auf die neuste version des graphikkartentreibers hat das problem beseitigt.


Anmelden zum Antworten