Opengl Problem z wyświetleniem okna

0

Witam,
Właśnie próbuję odpalić rysowanie figur geometrycznych. Pracuję w Code Blocks. Wykonałem tą instrukcję:
Ze strony http://www.libsdl.org/download-1.2.php pobieramy plik SDL-devel-1.2.15-mingw32.tar.gz. Rozpakowujemy go i wykonujemy nastepujace czynnosci:

Z katalogu lib kopiujemy pliki libSDL.dll.a, libSDL.la i libSDLmain.a do katalogu lib kompliatora Code:Blocks,
Kopiujemy katalog SDL, który znajduje sie w katalogu include do odpowiadajacego katalogu include kompilatora Code:Blocks,
Z katalogu bin kopiujemy plik SDL.dll do katalogu C:/Windows/System32 (jesli posiadamy system 32 bitowy) lub do katalogu SysWOW64 jesli posiadamy system 64 bitowy,
W Code:Blocks tworzymy Pusty Projekt (Empty Project). W opcjach projektu do konsolidatora (linker settings) dodajemy nastepujace biblioteki: -lmingw32 -lSDLMain -lSDL (biblioteki SDL) oraz -lopengl32 -lglu32 (biblioteki OpenGL)
Do projektu kopiujemy nastepujaca zawartosc,
Sprawdzamy, czy w zakładce Settings->Compiler and debugger->Toolchain Executables ustawiona jest odpowiednia sciezka do kompilatora: C:\Program Files\CodeBlocks\MinGW

Niestety przy próbie uruchomienia wyświetla się nie responsywne okno...
Ma ktoś jakiś pomysł ?

0

pokaż kod.

0

Wydaję mi się że to wina zintegrowanej karty graficznej...

#include<SDL/SDL.h>
#include<GL/gl.h>
#include<GL/glu.h>


void init()
{
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45,640.0/480.0,1.0,500.0);
    glMatrixMode(GL_MODELVIEW);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
        glColor3f(1.0,0.0,0.0);
    	glBegin(GL_TRIANGLES);
		glVertex3f( 0.0, 1.0, -5.0);
		glVertex3f(-1.0,-1.0, -5.0);
		glVertex3f( 1.0,-1.0, -5.0);
	glEnd();
}


int main(int argc, char* args[])
{
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Surface* ekran=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL);

    bool petla=true;
//    Uint32 start;
    SDL_Event zdarzenie;
    init();
    while (petla)
    {
//        start=SDL_GetTicks();
        while (SDL_PollEvent(&zdarzenie))
        {
            switch(zdarzenie.type)
            {
                case SDL_QUIT:
                petla=false;
                break;
            }
        }
        display();
        SDL_GL_SwapBuffers();
//        if (1000/30>(SDL_GetTicks()-start)) SDL_Delay(SDL_GetTicks()-start);
    }
    SDL_Quit();
    return 0;
}
 
0

Dziwne bo u mnie działa a kod wygląda OK. Dodaj sobie co klatkę jakieś proste sprawdzanie błędów w stylu:

 assert (glGetError() == GL_NO_ERROR);
 assert( strcmp( SDL_GetError(), "" ) == 0 );
 

Nie wydaje mi się, żeby problem leżał po stronie karty (chyba że masz uszkodzoną).
Używasz leciwego SDL-a i prehistorycznej wersji OpenGL-a które zadziałają nawet na 15 letnim sprzęcie.

0

Do okna w OGL polecam GLFW (http://glfw.org/) - rozwiajana, prosta, ma wszystko czego trzeba :-)

0

Do okna w OGL polecam GLFW (http://glfw.org/) - rozwiajana, prosta, ma wszystko czego trzeba :-)

0

Używasz leciwego SDL-a i prehistorycznej wersji OpenGL-a które zadziałają nawet na 15 letnim sprzęcie.

Oj od razu prehistorycznej. U mnie domyślnie otwiera się kontekst 4.2, jeśli nie proszę o żadną wersję.

A wciąż wiele zintegrowanych kart (np. intela) ma sterowniki tylko OpenGL 1.4, albo góra 2.1.
I to na dwuletnim sprzęcie… czy to taka prehistoria?
Wiem bo ostatnio próbuję coś wyrzeźbić ale z założeniem dużej kompatybilności, i niestety na 1.4 muszę poprzestać.

Do tego ten „nowy” OpenGL jest beznadziejny do nauki.

0

Do tego ten „nowy” OpenGL jest beznadziejny do nauki.

Nie jest beznadziejny do nauki, uczy dobrych nawykow, prostszy i owiele szybszy :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1