Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL/Opengl] Problem z odpaleniem programu

Ostatnio zmodyfikowano 2010-10-14 21:49
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
[SDL/Opengl] Problem z odpaleniem programu
» 2010-10-09 19:19:55
Witam
Program ma za zadanie wyswietlic sprite bmp przy uzyciu SDL i Opengl. Niestety gdy go uruchamiam on odrazu sie wylacza i juz mi nerwy puszaczaja bo przyczyny znalesc nie umiem ;/
Bylbym ogromnie wdzieczny za pomoc
C/C++
#include <sdl/sdl.h>
#include <gl/gl.h>
#include <sdl/sdl_opengl.h>
SDL_Surface * surface;
SDL_Event event;
GLuint texture;
GLenum texture_format;
GLint nofcolors;

int load() {
    nofcolors = 3;
    texture_format = GL_RGB;
    texture = NULL;
   
    surface = SDL_LoadBMP( "flower.bmp" );
   
    glGenTextures( 1, & texture );
    glBindTexture( GL_TEXTURE_2D, texture );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
   
    glTexImage2D( GL_TEXTURE_2D, 0, nofcolors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels );
    if( surface ) {
        SDL_FreeSurface( surface );
    }
}

void draw() {
    // Clear the screen before drawing
    glClear( GL_COLOR_BUFFER_BIT );
   
    // Bind the texture to which subsequent calls refer to
    glBindTexture( GL_TEXTURE_2D, texture );
   
    glBegin( GL_QUADS );
    // Top-left vertex (corner)
    glTexCoord2i( 0, 0 );
    glVertex3f( 100, 100, 0 );
   
    // Bottom-left vertex (corner)
    glTexCoord2i( 1, 0 );
    glVertex3f( 228, 100, 0 );
   
    // Bottom-right vertex (corner)
    glTexCoord2i( 1, 1 );
    glVertex3f( 228, 228, 0 );
    // Top-right vertex (corner)
    glTexCoord2i( 0, 1 );
    glVertex3f( 100, 228, 0 );
    glEnd();
    glLoadIdentity();
    SDL_GL_SwapBuffers();
}

int init()
{
    SDL_Surface * screen;
    SDL_Init( SDL_INIT_VIDEO );
    // Slightly different SDL initialization
   
    screen = SDL_SetVideoMode( 640, 480, 16, SDL_OPENGL );
    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
}


void init_GL()
{
    // Set the OpenGL state after creating the context with SDL_SetVideoMode
   
    glClearColor( 0, 0, 0, 0 );
   
    glEnable( GL_TEXTURE_2D ); // Need this to display a texture
   
    glViewport( 0, 0, 640, 480 );
   
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
   
    glOrtho( 0, 640, 480, 0, - 1, 1 );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
}


int main( int argc, char * argv[] )
{
    //Make sure the program waits for a quit
    bool quit = false;
    init();
    init_GL();
    load();
    draw();
    while( quit == false )
    {
        if( SDL_PollEvent( & event ) )
        {
            //If a key was pressed
            if( event.type == SDL_KEYDOWN )
            {
                //Adjust the velocity
                switch( event.key.keysym.sym )
                {
                case SDLK_ESCAPE:
                    quit = true;
                    break;
                }
            }
           
        }
    }
}
P-22679
DejaVu
» 2010-10-09 19:26:40
Nie sprawdzasz czy udało się załadować bitmapę. Pewnie zrobiłeś rename, a nie konwersję pliku bądź plik leży w złym miejscu.
P-22682
Savail
Temat założony przez niniejszego użytkownika
» 2010-10-09 19:36:50
niestety to nie to ;/ Wymiary obrazka sa takze potega liczby 2(128 / 128) i nazwa jest poprawna
P-22683
DejaVu
» 2010-10-09 19:39:59
Jeżeli twierdzisz, że nie wiem co ja piszę to ja już głosu nie zabieram. Nie jeden był taki co miał taki sam problem jak Ty.
P-22684
kamillo121
» 2010-10-09 19:48:50
1. DejaVu wie co pisze ;)
2. Widać, że kod jest zerżnięty(za przeproszeniem) z jakiegoś przykładu bo jakbys sam pisał to nie dawałbyś chociażby funkcji typu int gdzie nie zwraca żadnej wartości
3. Tak jak wspomniał poprzednik sprawdź warunkiem czy udało się załadować bmp, jak nie to wywal jakiś błąd do terminalu przez standardowe wyjście i zobaczysz
4. Skoro nie wiesz gdzie błąd staraj się sam dodawać kilka warunków w newralgicznych miejscach programu wykluczając tym ewentualne błędy a potem pisz
5. Wiele osób mówi, że sprawdzało, że na pewno to nie to a potem... sami wiecie :)
6. gdzie main zwraca wartość ?
P-22685
Savail
Temat założony przez niniejszego użytkownika
» 2010-10-09 20:00:14
Sory jesli obrazilem cie Piotrze, mieliscie racje... Kod jest z przykladu... chcialem szybko sprawdzic czy to zadziala i dlatego tak troche niedbale. Oryginalny obrazek ma format png, wydawalo mi sie ze zmienilem go na bmp bo nawet we wlasciwosciach pisze ze jest to mapa bitowa ale mylilem sie... Wielkie dzieki za pomoc. Bylem pewien ze nie chodzi o grafike, a jednak...
P-22686
DejaVu
» 2010-10-09 20:34:46
Ja się nie obrażam :P jak już to strzelam fochy :) tak przynajmniej dziewczyna mi kiedyś powiedziała :) po prostu... niektórzy spamują, a niektórzy dają konkretną odpowiedź. Ty dążąc do szybkiego osiągnięcia celu pomijasz podstawowe kroki weryfikacji błędów co się później przekłada na nieporozumienia z którymi polemizować mi się po prostu nie chce. Jak już pisałem nie jesteś pierwszym, który robi takie oczywiste błędy.
P-22692
Drraven
» 2010-10-10 09:46:29
taka mała uwaga:

C/C++
#include <sdl/sdl.h>
#include <gl/gl.h>
#include <sdl/sdl_opengl.h>

Powinno być:
C/C++
#include <sdl/sdl.h>
#include <sdl/sdl_opengl.h>
#include <gl/gl.h>
 Z doświadczenia wiem ze sdl/sdl_opengl.h jest trochę wredne i musi być tak jak napisałem chyba ze coś się zmieniło od moich ostatnich prób z ogl i sdl ;p
P-22698
« 1 » 2
  Strona 1 z 2 Następna strona