2016-11-19 8 views
-1

학교용 소프트웨어 래스터 라이저를 구현 중입니다. SDL에 픽셀이있는 버퍼를 전달하고 해당 형식 (RGB 당 픽셀 당 24bp)을 지정하고 싶습니다. 그러면 SDL이이를 화면에 렌더링합니다.바이트 배열을 SDL의 화면에 blit

내가 SDL_Surface를 사용하여 시도했지만 그것은 다음과 같은 실패 이후에만 헤더 이미지 나 데이터로 작업 할 것 같다 :

unsigned char pixels[BYTES_PER_PIXEL * SCREEN_WIDTH * SCREEN_HEIGHT]; 
    // ... all pixels are filled with white color 

    imageSurface = SDL_CreateRGBSurfaceFrom(pixels, 
     SCREEN_WIDTH, 
     SCREEN_HEIGHT, 
     sizeof(unsigned char) * BYTES_PER_PIXEL,  // depth 
     SCREEN_WIDTH * BYTES_PER_PIXEL,    // pitch (row length * BPP) 
     0x000000ff,         // red mask 
     0x0000ff00,         // green mask 
     0x00ff0000,         // blue mask 
     0);           // alpha mask 

오류는 다음과 같습니다 SDL_CreateRGBSurfaceFrom 실패 : 알 수없는 픽셀 형식을. SDL에서 가장 빠른 방법은 무엇입니까? 또한 그 방법과 전체 화면 쿼드 위에 렌더링 할 OpenGL 텍스처에 대한 드로잉간에 속도 차이가 있습니까?

답변

1

SDL_CreateRGBSurfaceFromdepth 매개 변수는 the depth of the surface in bits입니다. sizeof(unsigned char) * BYTES_PER_PIXEL은 3입니다 (BYTES_PER_PIXEL이 3이라고 가정 할 때 24 bpp라고 말한 것처럼). 1 바이트의 비트 수를 곱하십시오.

두 번째 부분은 그렇습니다. CPU와 GPU 하드웨어 및 GL 드라이버를 포함하여 많은 것들에 달려 있습니다. 가장 좋은 테스트 방법은 두 버전 모두를 작성하는 것입니다. 그러나 화면에 단일 쿼드를 그리는 것이 비싼 오프닝이 아니기 때문에 큰 개선을 보게 될 가능성은 희박합니다. 래스터 라이저의 다른 부분은 더 많이 소비해야합니다.