2016-11-18 3 views
0

C에서 SDL 1.2 코드를 SDL 2로 변환하고 텍스트 (SDL 1.2 SDL_Surface, nanoglk_surface)를 스크롤하는 코드가 발생했습니다. 하단에 새로운 라인을위한 빈 공간을 허용합니다 :C에서 SDL2 코드를 변환하는 SDL2 코드, 이전에 창을 스크롤하는 방법 SDL_BlitSurface

// Copy (scroll down). 
    SDL_Rect r1 = { win->area.x, win->area.y + d, 
        win->area.w, win->area.h - d }; 
    SDL_Rect r2 = { win->area.x, win->area.y, win->area.w, win->area.h - d }; 
    SDL_BlitSurface(nanoglk_surface, &r1, nanoglk_surface, &r2); 

    // Clear new, free area. 
    SDL_Rect r = { win->area.x, win->area.y + win->area.h - d, 
       win->area.w, d }; 
    SDL_FillRect(nanoglk_surface, &r, 
       SDL_MapRGB(nanoglk_surface->format, 
          win->bg[win->cur_styl].r, 
          win->bg[win->cur_styl].g, 
          win->bg[win->cur_styl].b)); 

이 여기에 오픈 소스 C 응용 프로그램의 일부입니다 : https://github.com/BroadcastGames/nanoglk/blob/master/nanoglk/wintextbuffer.c - 전체 응용 프로그램 컴파일 및 우분투 16.04 또는 16.10에 잘 실행됩니다. 하지만 SDL 2.0 협약으로 업데이트하려고합니다.

응용 프로그램에는 렌더러와 텍스처가 연결된 창이 하나뿐입니다. SDL_BlitSurface를 수행하는 SDL 2.0 방식은 무엇입니까? 고맙습니다. 코멘트에 링크 @genpfault 무엇인지에 관해서는

+1

https://wiki.libsdl.org/MigrationGuide#If_your_game_wants_to_blit_surfaces_to_the_screen – genpfault

답변

0

:

/* ... */ 
SDL_BlitSurface(src, &src_rect, dst, &dst_rect); 
/* ... */ 

은 (SDL2)과 동일하다 :

/* ... */ 
// Create texture as late as possible to save resources: 
SDL_Texture *src_texture = SDL_CreateTextureFromSurface(renderer_dst, src); 
SDL_RenderCopy(renderer_dst, src_texture, &src_rect, &dst_rect); 
// Destroy texture as soon as possible to save resources: 
SDL_DestroyTexture(src_texture); 
/* ... */ 
SDL_RenderPresent(render_dst); 

귀하의 블리트는 하드웨어 가속 될 것입니다.

+0

감사합니다. 표면을 시작하는 방법에 대해 혼란 스럽습니다. Window와 Renderer가 있습니다. 그러나 SDL_Surface는 이전 SDL 1.2 컨벤션이라고 생각합니까? 이 아주 간단한 예제를 보자 : https://github.com/cirosantilli/cpp-cheat/blob/master/sdl/ttf.c - 텍스트를 출력하는 방법 ** 두 텍스처 **를 만드는 방법에 주목하라. 하나의 폰트에서 'hello' , '세계'를 다른 글꼴로 사용). 합성 된 (결합 된) 결과, 렌더러의 결과 (모든 텍스처를 함께)를 수정할 수 있어야합니다. '현재 창'이 표면 또는 질감으로 가지고있는 것을 어떻게 얻을 수 있습니까? – LinuxMars

+0

@LinuxMars 당신은 render target으로 다른 텍스쳐를 설정하고 스크린 대신에 그릴 수 있습니다. 표면에 렌더링 결과를 읽는 것이 느려집니다. – keltar

+0

@keltar 외 여러분,이 간단한 예제를 참조하십시오 : https://github.com/cirosantilli/cpp-cheat/blob/master/sdl/ttf.c 정확히 내 SDL1.2 코드가하고있는 것입니다. 그것은 ** 텍스트 **, {텍스처 : "안녕하세요", 텍스처 : "세계", 텍스처 : "빠른", 질감 : "갈색"}의 각 단어에 대해 고유 한 텍스처를 만듭니다. 하나의 SDL_Window + SDL_Renderer에 수백 개의 텍스처를 가져 오는 방법에있어 SDL 2.0의 '모범 사례'는 무엇입니까? SDL_Window 크기의 텍스처를 만들어 중급으로 사용 하시겠습니까? – LinuxMars