Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 21:04

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Feb 11, 2006 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Habe versucht die EasySDL Klasse nach C++ zu portieren. Da ich mit der Sprache etwas vertrauter werden wollte ohne dabei groß Neuland zu betreten.

Ich erhalte nur ein schwarzes Fenster, jedoch sollte eigentlich der Hintergrund mit einer andern Farbe gelöscht werden.

So sehen meine beiden Initialisierungs Methoden aus (by the way, wo sind eigentlich hier die C++ Tags ;) ):

Code:
  1.  
  2. void EasySDL::initSDL()
  3. {
  4.     // Init SDL
  5.     cout << "Init SDL..." << endl;
  6.     if (SDL_Init(SDL_INIT_VIDEO) < 0)
  7.     {
  8.         string sdlError =  SDL_GetError();
  9.         throw runtime_error("Fail to init SDL:" + sdlError);
  10.     }
  11.     // detect graphic card
  12.     videoInfo = SDL_GetVideoInfo();
  13.     if (videoInfo == NULL)
  14.     {
  15.         string sdlError =  SDL_GetError();
  16.         throw runtime_error("Unable to detect graphic card:" +sdlError);
  17.     }
  18.     // set flags
  19.     videoFlags = SDL_OPENGL || SDL_DOUBLEBUF || SDL_HWPALETTE;
  20.  
  21.     if (videoInfo->hw_available)
  22.     {
  23.         cout << "Hardware Surface enabled..." << endl;
  24.         videoFlags = videoFlags || SDL_HWSURFACE;
  25.     }
  26.     else
  27.     {
  28.         cout << "Software Surface enabled..." << endl;
  29.         videoFlags = videoFlags || SDL_SWSURFACE;
  30.     }
  31.  
  32.     // hardware blit
  33.     if (videoInfo->blit_hw)
  34.     {
  35.         cout << "Hardware support" << endl;
  36.         videoFlags = videoFlags || SDL_HWACCEL;
  37.     }
  38.     else
  39.         cout << "Software support" << endl;
  40.  
  41.     // set attributes
  42.     SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
  43.     SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
  44.     SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
  45.     SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
  46.     SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
  47.  
  48.     // window caption
  49.     SDL_WM_SetCaption(caption.c_str(), NULL);
  50.     SDL_WM_SetIcon(IMG_Load(iconPath.c_str()), 0);
  51.  
  52.     // Init OpenGL surface
  53.     surface = SDL_SetVideoMode(width, height, colorDepth,videoFlags);
  54.     if (surface == NULL)
  55.     {
  56.         string sdlError =  SDL_GetError();
  57.         throw runtime_error("Fail to create surface:" + sdlError);
  58.     }
  59.  
  60.     cout << "SDL done.\n";
  61. }
  62.  


Die OpenGL-Intitialsiserungs besteht bei mir hier nur aus ein paar Standart Einstellungen. Eine Funktion wie InitGL wie man sie aus der dglOpenGL.pas kennt muss man anscheinend nicht aufrufen.

Code:
  1.  
  2. void EasySDL::initGL()
  3. {
  4.     cout << "Set OpenGL values" << endl;
  5.     // some good start values
  6.     glEnable(GL_TEXTURE_2D);
  7.     glShadeModel(GL_SMOOTH);
  8.     glClearColor(0.0f, 1.0f, 0.0f, 0.5f);
  9.     glClearDepth(1.0);
  10.     glEnable(GL_DEPTH_TEST);
  11.     glDepthFunc(GL_LEQUAL);
  12.     glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
  13.  
  14.     handleResize(width,height);
  15. }
  16.  
  17. void EasySDL::handleResize(int width, int height)
  18. {
  19.     cout << "Resize to: X:" << width << ", Y:" << height << endl;
  20.     this->width = width;
  21.     this->height = height;
  22.  
  23.     // height with value 0 would cause a zero devide
  24.     if ( height == 0 )
  25.         throw runtime_error("Unable to set projection matrix with zero height");
  26.  
  27.     // refresh viewport
  28.     glViewport( 0, 0, width, height);
  29.  
  30.     glMatrixMode( GL_PROJECTION );
  31.     glLoadIdentity();
  32.     gluPerspective( 45.0, (this->width / this->height), 0.1, 1000.0 );
  33.     glMatrixMode( GL_MODELVIEW );
  34.  
  35.     // reset world matrix
  36.     glLoadIdentity();
  37. }
  38.  

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Zuletzt geändert von Flo am Sa Feb 11, 2006 18:02, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 11, 2006 17:36 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Rufst du eigentlich irgendwo glClear() auf?

Ich entblöße mal meine main() die ich benutze. Nur so zum abgucken:

Code:
  1. int main( int argc, char **argv )
  2. {
  3.     /* Flags to pass to SDL_SetVideoMode */
  4.     int videoFlags;
  5.     /* main loop variable */
  6.     bool done = false;
  7.     /* used to collect events */
  8.     SDL_Event event;
  9.     /* this holds some info about our display */
  10.     const SDL_VideoInfo *videoInfo;
  11.     /* whether or not the window is active */
  12.     bool isActive = true;
  13.     /* a true type font. Will be used for the UI */
  14.     TTF_Font* font;
  15.    
  16.     // Get the ProgramPath
  17.     TCHAR fullPath[MAX_PATH];
  18.     GetModuleFileName(NULL, fullPath, MAX_PATH);
  19.     string programPath = fullPath;
  20.     programPath = programPath.substr(0,programPath.rfind('\')+1);
  21.    
  22.     application.setProgramPath(&programPath);
  23.  
  24.     /* initialize SDL */
  25.     if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
  26.     {
  27.         fprintf( stderr, "Video initialization failed: %s\n",
  28.              SDL_GetError( ) );
  29.         Quit( 1 );
  30.     }
  31.  
  32.     /* Fetch the video info */
  33.     videoInfo = SDL_GetVideoInfo( );
  34.  
  35.     if ( !videoInfo )
  36.     {
  37.         fprintf( stderr, "Video query failed: %s\n",
  38.              SDL_GetError( ) );
  39.         Quit( 1 );
  40.     }
  41.  
  42.     /* the flags to pass to SDL_SetVideoMode */
  43.     videoFlags  = SDL_OPENGL;          /* Enable OpenGL in SDL */
  44.     videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */
  45.     videoFlags |= SDL_HWPALETTE;       /* Store the palette in hardware */
  46.     videoFlags |= SDL_RESIZABLE;       /* Enable window resizing */
  47.  
  48.     /* This checks to see if surfaces can be stored in memory */
  49.     if ( videoInfo->hw_available )
  50.     videoFlags |= SDL_HWSURFACE;
  51.     else
  52.     videoFlags |= SDL_SWSURFACE;
  53.  
  54.     /* This checks if hardware blits can be done */
  55.     if ( videoInfo->blit_hw )
  56.     videoFlags |= SDL_HWACCEL;
  57.  
  58.     /* Sets up OpenGL double buffering */
  59.     SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
  60.  
  61.     /* get a SDL surface */
  62.     surface = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
  63.                 videoFlags );
  64.  
  65.     /* Verify there is a surface */
  66.     if ( !surface )
  67.     {
  68.         fprintf( stderr,  "Video mode set failed: %s\n", SDL_GetError( ) );
  69.         Quit( 1 );
  70.     }
  71.    
  72.     /* initialize SDL_ttf */
  73.     if(TTF_Init())
  74.     {
  75.         fprintf( stderr,  "Initializing SDL_ttf failed: %s\n", TTF_GetError() );
  76.         Quit( 1 ); 
  77.     }
  78.    
  79.     /* create a true type font */
  80.     string dummi = programPath+"font\\ARIBLK.TTF";
  81.     if(!(font = TTF_OpenFont(dummi.c_str(), 10))) {
  82.         printf("Error loading font: %s", TTF_GetError());
  83.         return 1;
  84.     }
  85.  
  86.     /* initialize OpenGL */
  87.     application.initGL();
  88.    
  89.     /* Set window title*/
  90.     SDL_WM_SetCaption("Puke Machine by Kevin Fleischer - CG1 Projekt 2005/2006", NULL);
  91.  
  92.     /* Resize the initial window */
  93.     application.resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT );
  94.    
  95.     /* Setup the UIManager */
  96.     TUIManager* uimanager = application.getUIManager();
  97.     ((TTexManager*)uimanager->getTexManager())->setTexturePath(programPath+"tex\\");
  98.     uimanager->setStdTex( "stdTex.tga" );
  99.     uimanager->addFont(font,"Arial_Black");
  100.     /* Now we build all Forms an Buttons etc. */
  101.     application.buildUI();
  102.  
  103.  
  104.     Kamera* kamera = application.getKamera();
  105.     isActive = true;
  106.     /* wait for events */
  107.     while ( !done )
  108.     {
  109.         /* handle the events in the queue */
  110.  
  111.         while ( SDL_PollEvent( &event ) )
  112.         {
  113.             switch( event.type )
  114.             {
  115.             case SDL_MOUSEBUTTONDOWN:
  116.                 /* handle mousedown event */
  117.                 if ( !(uimanager->DoClick(event.motion.x, surface->h - event.motion.y)) )
  118.                     kamera->onMouseDown( (event.button) );
  119.                 break;
  120.             case SDL_MOUSEBUTTONUP:
  121.                 /* handle mouseup event */
  122.                 kamera->onMouseUp( (event.button) );
  123.                 break;
  124.             case SDL_MOUSEMOTION:
  125.                 /* handle mouse move event */
  126.                 kamera->onMouseMove( (event.motion) );
  127.                 break;
  128.             case SDL_VIDEORESIZE:
  129.                 /* handle resize event */
  130.                 surface = SDL_SetVideoMode( event.resize.w,
  131.                             event.resize.h,
  132.                             16, videoFlags );
  133.                 if ( !surface )
  134.                 {
  135.                     fprintf( stderr, "Could not get a surface after resize: %s\n", SDL_GetError( ) );
  136.                     Quit( 1 );
  137.                 }
  138.                 application.resizeWindow( event.resize.w, event.resize.h );
  139.                 ((TTexManager*)uimanager->getTexManager())->resetTextures();           
  140.                 break;
  141.             case SDL_KEYDOWN:
  142.                 /* handle key presses */
  143.                
  144.                 break;
  145.             case SDL_KEYUP:
  146.                 /* handle key release */
  147.                
  148.                 break;
  149.             case SDL_QUIT:
  150.                 /* handle quit requests */
  151.                 done = true;
  152.                 break;
  153.             default:
  154.                 break;
  155.             }
  156.         }
  157.  
  158.         /* draw the scene */
  159.         if ( isActive )
  160.             application.draw(surface);
  161.     }
  162.  
  163.     /* clean ourselves up and exit */
  164.     Quit( 0 );
  165.  
  166.     /* Should never get here */
  167.     return( 0 );
  168. }

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 11, 2006 18:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 19, 2003 10:44
Beiträge: 991
Wohnort: Karlsfeld (nahe München)
Danke Kevin,
habe aufgrund deines Quelltextes den Fehler gefunden.

Hatte das falsche OR verwendet. Da hier das ODER bitweise angewendet werden soll muss man | schreiben statt ||

MfG
Flo

_________________
Danke an alle, die mir (und anderen) geholfen haben.
So weit... ...so gut


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]