Hi all,<br><br>I would like to be able to use SDL + OpenGL and get hardware rendering on Linux.<br>I believe there have been previous posts about this topic, but I cant seem to be able to find a satisfactory answer.<br><br>
According to the following posts, hardware rendering is not supported by SDL yet:<br><a href="http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2006-September/058154.html">http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2006-September/058154.html</a><br>
<a href="http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2002-January/022714.html">http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2002-January/022714.html</a><br><a href="http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2002-January/022730.html">http://lists.libsdl.org/htdig.cgi/sdl-libsdl.org/2002-January/022730.html</a><br>
<br>(I tried using dga, but that resulted in SDL_Init(SDL_INIT_VIDEO) failing.)<br><br>And according to the following tutorial, SDL would use OpenGL's hardware rendering, if I pass SDL_OPENGL as the flag in SDL_SetVideoMode:<br>
<a href="http://lazyfoo.net/SDL_tutorials/lesson36/index.php">http://lazyfoo.net/SDL_tutorials/lesson36/index.php</a><br><br>So which is it? Can I get hardware acceleration with SDL or not?<br><br>I am using a Dell Inspiron 1525 laptop with Intel 965 express chipset running Fedora 10.<br>
<br>Here is the output of lspci | grep -i vga:<br>00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (rev 0c)<br><br>And here is the output of glxinfo | grep -i render:<br>
direct rendering: Yes<br>OpenGL renderer string: Mesa DRI Intel(R) 965GM GEM 20080716 x86/MMX/SSE2<br><br>When I try to run the Nehe's SDL code (<a href="http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz">http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz</a>), I get only a software surface and hardware blits is  (blit_hw) is not available.<br>
The relevant portion of code is shown below (I added the printfs to see what is happening):<br><br><br>    videoInfo = SDL_GetVideoInfo( );<br><br>    if ( !videoInfo )<br>    {<br>        fprintf( stderr, "Video query failed: %s\n",<br>
             SDL_GetError( ) );<br>        Quit( 1 );<br>    }<br><br>    /* the flags to pass to SDL_SetVideoMode */<br>    videoFlags  = SDL_OPENGL;          /* Enable OpenGL in SDL */<br>    videoFlags |= SDL_GL_DOUBLEBUFFER; /* Enable double buffering */<br>
    videoFlags |= SDL_HWPALETTE;       /* Store the palette in hardware */<br>    videoFlags |= SDL_RESIZABLE;       /* Enable window resizing */<br><br>    /* This checks to see if surfaces can be stored in memory */<br>
    if ( videoInfo->hw_available )<br>    {<br>      printf("Hardware surface available\n");<br>    videoFlags |= SDL_HWSURFACE;<br>    }<br>    else<br>    {<br>      printf("Software surface available\n");<br>
    videoFlags |= SDL_SWSURFACE;<br>    }<br><br>    /* This checks if hardware blits can be done */<br>    if ( videoInfo->blit_hw )<br>    {<br>      printf("Hardware blits can be done\n");<br>    videoFlags |= SDL_HWACCEL;<br>
    }<br><br>And the output I get is:<br>Software surface available<br>973 frames in 5.001 seconds = 194.561 FPS<br><br>If I use the GLX version of the same tutorial (<a href="http://nehe.gamedev.net/data/lessons/linuxglx/lesson01.tar.gz">http://nehe.gamedev.net/data/lessons/linuxglx/lesson01.tar.gz</a>), I do get hardware rendering<br>
Relevant portion of the code:<br>if (glXIsDirect(GLWin.dpy, GLWin.ctx)) <br>        printf("Congrats, you have Direct Rendering!\n");<br>    else<br>        printf("Sorry, no Direct Rendering possible!\n");<br>
    initGL();<br><br>I get the output "Congrats, you have Direct Rendering!\n" with this.<br><br>I would prefer to use SDL but I really want hardware acceleration.<br>Any help, pointers, tips are much appreciated.<br>
<br>Thanks and Regards,<br>Abhishek<br><br>