2014-12-07 2 views
0

픽셀 당 픽셀 이미지를 만들고 SDL로 화면에 표시하려고합니다. 이미지는 초당 50 회까지 새로 고쳐지고 다시 표시되어야합니다 (50fps 게임을 찾고 있습니다). 내가하고 싶은 것을 설명하기 위해 간단한 프로그램을 만들려고했다. 1280 * 720 창과 질감을 녹색과 빨간색으로 번갈아 작성했다. 문제는 코드가 매우 느리게 실행된다는 것입니다 (~ 8 FPS). 나는 어디에서 엉망진창 이었어?SDL2의 텍스처로 픽셀 렌더링 당 느린 픽셀

여기에 모든 픽셀이 느리게 될 것입니다에 대한 함수를 사용하여 화면에 그리기 내 코드

SDL_Texture *display; 
    SDL_Window *window; 
    SDL_Renderer *renderer; 
    int   x; 
    int   y; 
    int   a = 255; 
    int   b = 0; 

    window = SDL_CreateWindow(gl_title, SDL_WINDOWPOS_CENTERED, 
          SDL_WINDOWPOS_CENTERED, gl_width, gl_height, 0); 
    renderer = SDL_CreateRenderer(window, 0, SDL_RENDERER_ACCELERATED | 
              SDL_RENDERER_TARGETTEXTURE | 
              SDL_RENDERER_PRESENTVSYNC); 
    display = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, 
           SDL_TEXTUREACCESS_TARGET, gl_width, gl_height); 
    while (true) 
    { 
     SDL_SetRenderTarget(renderer, display); 
     SDL_SetRenderDrawColor(renderer, a, b, 0, 255); 
     for (x = 0; x < gl_width; ++x) 
     { 
      for (y = 0; y < gl_height; ++y) 
      { 
       SDL_RenderDrawPoint(renderer, x, y); 
      } 
     } 
     a = a == 255 ? 0 : 255; 
     b = b == 255 ? 0 : 255; 
     SDL_SetRenderTarget(renderer, NULL); 
     SDL_RenderCopy(renderer, display, NULL, NULL); 
     SDL_RenderPresent(renderer); 
    } 

답변

1

입니다. 수동 루프의 픽셀을 작성하고 때마다 함수를 호출의 비용을 피하거나 수행 SDL 제공하는 기능 중 하나를 사용할 수 있습니다 당신을 위해 :

SDL_RenderFillRect

SDL_RenderDrawLines

SDL_RenderDrawPoints

SDL_RenderDrawRect

+0

화면의 모든 픽셀이 변경되므로 이러한 기능을 사용하는 것은 좋지 않습니다. 내가 찾은 해결책은 SDL_Surface를 사용하여 픽셀을 직접 수정 한 다음 텍스처로 변환하고 표시하는 것입니다. –

+0

@BrendanRius 정말 느립니다. SDL_RenderFillRect()가 가장 빠른 방법입니다. – 2501

+0

픽셀 당 픽셀 렌더링의 경우에도? –

관련 문제