표면과 질감의 차이 (SDL / 일반)


84

누구든지 질감과 표면의 차이점을 간단한 말로 설명해 줄 수 있습니까? 나는 그것이 SDL2as SDL_Surface및 에서 사용되는 것을 보았다 SDL_Texture. SDL_Texture생성은부터 SDL_Surface차례로에서 화상 / 비트 맵으로부터 생성된다. 둘 다 픽셀 모음입니다. 그러나 나는 그들 사이의 주요 차이점을 보지 못합니다 (GPU로 무언가를해야합니까?)

나는 그것을 구글로 시도했지만 내가 찾은 모든 설명은 컴퓨터 그래픽에 대해 더 깊이 파고 들지 않고는 이해하기에는 너무 복잡했습니다.


7
여기에 내 대답을 살펴보십시오 : stackoverflow.com/questions/21007329/what-is-a-sdl-renderer/... 그것은 설명 할 것입니다 SDL_TextureSDL_Surface뿐만 아니라 SDL_Renderer. 일반적으로, SDL_Texture렌더링에 사용되는 것입니다,하지만 당신은 사용하여 질감 정보를로드 할 때 SDL_Image또는 SDL_ttf, 당신은 같은 데이터를 얻을 것이다SDL_Surface
olevegard

@olevegard 그 대답은 거의 복사 붙여 넣기입니다. 저는 약간의 지식이있는 대답을 정말로 원합니다.

3
그럼 당신이 가정으로, SDL_Surface반면 픽셀의 단지 모음 SDL_Texture입니다 an efficient, driver-specific representation of pixel data그것이 GPU에서 사용할 수있는 의미 wiki.libsdl.org/SDL_Texture은 . 질문에 대한 답이 되었습니까? 당신은 정말 더 이해하기 위해 컴퓨터 그래픽에 깊이 파고해야
olevegard

2
@olevegard 당신이 대답에 그것을 쓰지 않았다는 것이 유감입니다. 여기에 기회가 있습니다.

답변:


86

기본적으로 "GPU로 뭔가를해야합니까?" 맞다.

SDL_Surface소프트웨어 렌더링에 사용됩니다 . 소프트웨어 렌더링을 사용하면 saloomi2012가 올바르게 인식 했듯이 일반 RAM을 사용하여 이미지 데이터를 저장하고 있습니다. 따라서 대부분의 경우 표면과 관련된 데이터 버퍼에 직접 액세스하여 콘텐츠를 수정할 수 있습니다. 즉, CPU를 사용하므로 소프트웨어 이름이됩니다.

SDL_Texture반면에 하드웨어 렌더링에 사용되며 텍스처는 VRAM에 저장되며 .NET과 같이 직접 액세스 할 수 없습니다 SDL_Surface. 렌더링 작업은 내부적으로 OpenGL 또는 DirectX (Windows에서만 사용 가능) API를 사용하여 GPU에 의해 가속화되며, 이는 차례로 비디오 하드웨어를 사용하므로 하드웨어 렌더링 이름입니다.

하드웨어 렌더링은 소프트웨어 렌더링보다 훨씬 빠르며 항상 기본 옵션으로 간주되어야합니다.


4
하드웨어 가속을 사용할 수있는 경우 SDL_Surface를 사용하면 어떤 이점이 있습니까? 예를 들어 작은 렌더링 작업의 경우 하드웨어로가는 오버 헤드가 너무 큽니까?
Timmos 2015

3
@Timmos 하드웨어 렌더링은 항상 소프트웨어보다 빠릅니다. 그러나 소프트웨어 표면에는 한 가지 장점이 있습니다. CPU 액세스 가능한 주 메모리에 저장되므로 데이터를 직접 쓸 수 있습니다. 예를 들어 비디오 게임에서 절차 적으로 생성 된 콘텐츠와 같이 실시간으로 텍스처를 생성하려는 경우 유용 할 수 있습니다. (마음은, 그러나, 절차 세대의 요즘 많은 종류는 쉐이더를 사용하여 GPU에서 수행 할 수 있습니다.)
cemper93

1
@Timmos 당신은 표면 작업, 생성, 완전한 읽기 쓰기 제어를 완전히 제어 할 수 있습니다. 제 말은 제어가 표면이 제공하는 것입니다. GPU 제조업체는 GPU에 대한 직접 액세스를 허용하지 않기 때문에 OpenGL 및 이러한 API는 GPU와 함께 작동해야합니다. 따라서 사람들이 OpenGL 또는 DX의 비 효율성 또는 해당 API가하는 멍청한 일에 대해 불평하는 경우가 종종 있습니다. 더 빠르거나 더 효율적인 것을 작성할 수는 있지만 GPU에 액세스 할 수 없기 때문에 그렇게 할 수 없습니다.
Trevor Hart

SDL_FillRect더 빠른 이유 는 SDL_RenderFillRect무엇입니까? Q : stackoverflow.com/q/65450100/4632019
Eugen Konkov


2

이에 대한 자세한 정보는 다음과 같습니다.

https://thenumbat.github.io/cpp-course/sdl2/05/05.html

지난 강의에서 언급했듯이 텍스처는 표면과 동등한 GPU 렌더링입니다. 따라서 텍스처는 SDL_CreateTextureFromSurface () 함수를 사용하여 거의 항상 표면에서 생성됩니다. 이 함수는 사용자가 예상 한대로 수행합니다. 매개 변수는 렌더링 컨텍스트와 텍스처를 생성 할 표면입니다. 다른 생성 함수와 마찬가지로 실패시 NULL을 반환합니다.

도움이 되었기를 바랍니다.


2

표면은 RAM을 사용하고 텍스처는 표면보다 빠른 비디오 카드를 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.