Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


SDL 1.2 to 2.0 migration (open screen a blit)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
9 replies to this topic

#1 Acharis   Crossbones+   -  Reputation: 4351

Like
0Likes
Like

Posted 30 January 2014 - 01:21 PM

I'm switching from 1.2 to 2.0. I got it compiled and working (an empty window). Now, I want to run an old code (with as few changes as possible, just using the old surface, I don't want any new features yet, don't care about performace, just make the old one complie and run).

 

So basicly my question is how to open a screen/window and then render stuff using SDL_Surface (most likely only SDL_SetVideoMode and SDL_Flip should be changed/renamed).

 

Here is an example from 1.2, please just modify it and I will get hang on how it works with the new system :)

int main ( int argc, char** argv )
{
    // initialize SDL video
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "Unable to init SDL: %s\n", SDL_GetError() );
        return 1;
    }

    // make sure SDL cleans up before exit
    atexit(SDL_Quit);

    // create a new window
    SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
                                           SDL_HWSURFACE|SDL_DOUBLEBUF);
    if ( !screen )
    {
        printf("Unable to set 640x480 video: %s\n", SDL_GetError());
        return 1;
    }

    // load an image
    SDL_Surface* bmp = SDL_LoadBMP("cb.bmp");
    if (!bmp)
    {
        printf("Unable to load bitmap: %s\n", SDL_GetError());
        return 1;
    }
    
    // centre the bitmap on screen
    SDL_Rect dstrect;
    dstrect.x = (screen->w - bmp->w) / 2;
    dstrect.y = (screen->h - bmp->h) / 2;

    // program main loop
    bool done = false;
    while (!done)
    {
        // message processing loop
        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            // check for messages
            switch (event.type)
            {
                // exit if the window is closed
            case SDL_QUIT:
                done = true;
                break;

                // check for keypresses
            case SDL_KEYDOWN:
                {
                    // exit if ESCAPE is pressed
                    if (event.key.keysym.sym == SDLK_ESCAPE)
                        done = true;
                    break;
                }
            } // end switch
        } // end of message processing

        // DRAWING STARTS HERE
        
        // clear screen
        SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));

        // draw bitmap
        SDL_BlitSurface(bmp, 0, screen, &dstrect);

        // DRAWING ENDS HERE

        // finally, update the screen :)
        SDL_Flip(screen);
    } // end main loop

    // free loaded bitmap
    SDL_FreeSurface(bmp);

    // all is well ;)
    printf("Exited cleanly\n");
    return 0;
}

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB  Twitter  DevLog


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 14856

Like
1Likes
Like

Posted 30 January 2014 - 01:25 PM

There is a forum called "APIs and tools" that might be more appropriate for this question.

 

I recommend you read a bit of the SDL 2.0 documentation or a tutorial so you get an idea of what has changed and what stayed the same, then try to convert the code yourself. If you have a hard time fighting through the errors, post your attempt and someone here will try to help you.



#3 Dave Hunt   Crossbones+   -  Reputation: 2764

Like
2Likes
Like

Posted 30 January 2014 - 01:31 PM

The SDL MigrationGuide pretty much hand-holds you through the process of converting a simple 2D app from 1.2 to 2.0.



#4 Acharis   Crossbones+   -  Reputation: 4351

Like
0Likes
Like

Posted 30 January 2014 - 01:58 PM

The SDL MigrationGuide pretty much hand-holds you through the process of converting a simple 2D app from 1.2 to 2.0.

Yes, I have read it a few times. I just can't find an exmple that opens a screen in 2.0 and then blits using old 1.2 SDL_surface.


Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB  Twitter  DevLog


#5 arka80   Members   -  Reputation: 1233

Like
0Likes
Like

Posted 30 January 2014 - 02:39 PM

 

The SDL MigrationGuide pretty much hand-holds you through the process of converting a simple 2D app from 1.2 to 2.0.

Yes, I have read it a few times. I just can't find an exmple that opens a screen in 2.0 and then blits using old 1.2 SDL_surface.

 

 

 

because there isn't. 

 

2.0 is a completely different api. I suggest you to embrace it as it is, a new and different (and better) thing.



#6 Dave Hunt   Crossbones+   -  Reputation: 2764

Like
0Likes
Like

Posted 30 January 2014 - 03:05 PM

 

The SDL MigrationGuide pretty much hand-holds you through the process of converting a simple 2D app from 1.2 to 2.0.

Yes, I have read it a few times. I just can't find an exmple that opens a screen in 2.0 and then blits using old 1.2 SDL_surface.

 

 

You might want to read it again.

 

"Remember SDL_SetVideoMode()? It's completely gone. SDL 2.0 allows you to have multiple windows, so the old function didn't make sense any more."

 

It then goes on to show the old way (SDL_surface and SDL_SetVideoMode) and the new way (SDL_Window and SDL_CreateWindow).

 

And it covers your scenario of surfaces, replaceing surfaces with textures and summarizes with:

 

"At this point, your 1.2 game had a bunch of SDL_Surfaces, which it would SDL_BlitSurface() to the screen surface to compose the final framebuffer, and eventually SDL_Flip() to the screen. For SDL 2.0, you have a bunch of SDL_Textures, that you will SDL_RenderCopy() to your Renderer to compose the final framebuffer, and eventually SDL_RenderPresent() to the screen. It's that simple."

 

Seems pretty well covered to me.



#7 Acharis   Crossbones+   -  Reputation: 4351

Like
0Likes
Like

Posted 30 January 2014 - 03:39 PM

The wiki 2.0 shows that SDL_BlitSurface still takes SDL_Surface as a parameter, not SDL_Texture. So it must be doable...

 

http://wiki.libsdl.org/SDL_BlitSurface

 

 


replaceing surfaces with textures
That's exactly the thing I want to avoid :) I want to use old SDL_Surface without changing the whole code.

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB  Twitter  DevLog


#8 richardurich   Members   -  Reputation: 1187

Like
1Likes
Like

Posted 30 January 2014 - 04:17 PM

http://lazyfoo.net/tutorials/SDL/02_getting_an_image_on_the_screen/index.php seems to be what you want.



#9 Acharis   Crossbones+   -  Reputation: 4351

Like
0Likes
Like

Posted 30 January 2014 - 05:36 PM

Exactly, thanks :D


Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB  Twitter  DevLog


#10 Acharis   Crossbones+   -  Reputation: 4351

Like
0Likes
Like

Posted 31 January 2014 - 05:40 AM

Yay! Got the whole game converted to SDL2 (now the ugly black mouse cursor is the cute system mouse instead, which was the primary reason of the upgrade :))

 

 

One more thing, does anyone know what's the replacement for SDL_DisplayFormatAlpha now?

 

Here is the code, it's supposed to render a font without antialiasing.

    SDL_Color col;  col.r=col.g=col.b=255; // white

    // Create Image from TTF
    SDL_Surface* fontSurface;
    if(aamode)
    {
        // Antialiased
        fontSurface=TTF_RenderText_Blended(font, s, col);
    }
    else
    {
        // Pixelated (no antialiasing)
        SDL_Surface* tmpSurface=TTF_RenderText_Solid(font, s, col);
        fontSurface=SDL_DisplayFormatAlpha(tmpSurface); // ERROR !MIGRATION
    }

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB  Twitter  DevLog





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS