2013-08-14 1 views
1

저는 C++에서 SDL과 OpenGL입니다. MVSC++에서는 그게 중요합니다.OpenGL 컨텍스트에서 SDL과 블 리킹

다음은 내가하려는 일입니다. 이미지 파일을 가져 와서 SDL_Surface *로로드하고 싶습니다. 그 부분은 내려갔습니다. 마지막 부분은 SDL_Surface *를 가져 와서 OpenGL 텍스처를 만드는 것입니다. 그 부분도 제가 일하고 있습니다.

중간 부분에 문제가 있습니다. 원본 SDL_Surface *를 가져 와서 크기가 2의 거듭 제곱 인 새롭고 빈 표면을 만들고 싶습니다. 그런 다음 원래 표면을이 새 표면에 블릿합니다. 그것은 단지 나에게 검은 색을 줬다. blit이 발생하지 않았거나 OpenGL이 결과로 생성 된 표면에서 텍스처를 생성 할 수 없다고 생각됩니다.

다음은 실제로 문제가되는 코드입니다. 그리고이 부분을 건너 뛰면 잘 작동하지만 2의 거듭 제곱 인 텍스처 만 사용할 수 있습니다. 내 독서에서

SDL_Surface* padImage(SDL_Surface* image) { 
    if (!image) { 
     return NULL; 
    } 

    int width = gfx::powerOfTwo(image->w); 
    int height = gfx::powerOfTwo(image->h); 

    SDL_Surface* padded = SDL_CreateRGBSurface(image->flags, 
     width, 
     height, 
     image->format->BitsPerPixel, 
     image->format->Rmask, 
     image->format->Gmask, 
     image->format->Bmask, 
     image->format->Amask); 

    if (!padded) { 
     return NULL; 
    } 

    SDL_BlitSurface(image, NULL, padded, NULL); 

    return padded; 
}; 

, 나는) (SDL_BlitSurface를 사용하는 것은 더 노 사용하지 OpenGL을 것을 이해하게했습니다. 그래서 나는 하나의 SDL_Surface *를 OpenGL 컨텍스트에서 다른 블럭으로 적절하게 블리트하는 법을 알고 싶습니다.

비선형 차원의 표면에서 텍스처를 생성하기 위해 OpenGL 함수를 사용할 수 있지만,보기 흉하고 흐릿한 텍스처를 만듭니다.

+0

사용중인 SDL 버전 : 2 또는 1.2? 'SDL_BlitSurface'의 반환 값을 확인하여 작동 여부를 확인 했습니까? 그리고 당신은'SDL_BlitScaled'을 원하지 않습니까? – yzt

+0

2의 거듭 제곱 크기의 이미지를 만드는 데 모든 노력이 필요한 이유는 무엇입니까? OpenGL-2 이후 임의의 크기의 이미지가 텍스처를 지원합니다. – datenwolf

+0

잘 찍어. 모든 OpenGL 지식은 이전의 튜토리얼을 기반으로하고 있으며, OpenGL-2에 대해 충분히 읽지 않았거나 충분히 실험하지 못했습니다. –

답변

0

Welp, 나는 그 중 아무 것도 할 필요가 없었습니다. datenwolf가 지적했듯이, 2 차원 이미지의 힘은 필요하지 않습니다. 한면을 다른면에 블 리딩하는 것과 같은 작업을 수행해야한다면 대신 프레임 버퍼 객체와 텍스처로 처리 할 것입니다.

관련 문제