Direct3D에는 surface라는 용어가 나온다. MSDN에서는 그 뒤에 (Direct3D 9)이라고 표기 되어 있는 것으로 봐서는 DX9때부터 쭉 사용되어 오던 개념인것 같다.

Surface는 디스플레이 메모리의 선형 공간으로 보여주고 보통 디스플레이 카드의 디스플레이 메모리에 상주한다. 하지만 surface는 시스템 메모리에도 존재할 수 있다.

Surface는 IDirect3DSurface9 인터페이스에 의해서 관리된다.

  • Front buffer. 그래픽 어댑터에 의해 해석되고 모니터에 표시된 메모리 상의 직사각형 영역. Direct3D 응용 프로그램에서는 front buffer에 직접적으로 쓰기 작업을 하지 않아야 한다.
  • Back buffer. 응용 프로그램에서 직접적으로 쓰기 작업을 하는 메모리 상의 직사각형 영역. 이 back buffer는 모니터 상에 직접적으로 표시되지 않아야 한다.
  • Surface 뒤집기(교환). Back buffer에서 front buffer로 이동하는 절차.
  • Swap chain. Front buffer에 연속적으로 보여질 수 있는 하나 이상의 back buffer의  집단.

 

Surface 얻어오기

아래의 메서드 중 하나를 호출하여 surface 생성한다.

  • CreateDepthStencilSurface
  • CreateOffscreenPlainSurface
  • CreateRenderTarget

Surface format은 surface memory 내의 각 필셀의 데이터를 어떻게 해석할지를 결정한다. Direct3D는 surface format를 설명하는 D3DSURFACE_DESC 구조체의 D3DFORMAT을 사용한다. GetDesc() 메서드를 호출하는 것으로 현재 사용되는 surface의 format을 찾아올 수 있다.

Surface가 생성되었을 때 , 아래의 메서드 중 하나를 호출하여 포인터를 얻어올 수 있다.

  • GetCubeMapSurface
  • GetBackBuffer
  • GetDepthStencilBuffer
  • GetFrontBuffer
  • GetRenderTarget
  • GetBackBuffer
  • GetSurfaceLevel

IDirect3DSurface9 인터페이스는 UpdateSurface() 메서드를 통해서 간접적으로 메모리에 접근할 수 있다. 이 메서드는 한 IDirect3DSurface9 인터페이스로 부터 다른 IDirect3DSurface9 인터페이스에 픽셀의 사각형 영역을 복사할 수 있도록 허용한다. 이 surface 인터페이스도 직접적으로 디스플레이 메모리에 접근할 수 있는 메서드를 가지고 있다. 예를 들어 LockRect 메서드를 이용하여 디스플레이 메모리의 사각형 영역을 잠글 수 있다. surface의 잠긴 사각형 영역에 대한 작업이 완료된 이우에는 UnlockRect를 호출해주는 것이 중요하다.

 

위의 내용은 DX9 버전에서 정의되어 있는 Surface에 대한 내용이고 포프님의 간단하고 명료하신 설명에 따르면

"그냥 텍스처인데 텍스처에는 밉맵이 있어서 여러장의 크기가 다른 이미지들이 한 텍스처에 포함되므로 각각의 크기가 다른 이미지들을 서피스(표면) 이라 합니다."

"즉 서피스 = 이미지 한장. 이미지들 여러개가 모인것(밉맵, 큐브맵, 3디 이미지) = 텍스처"

유영천 님께서는

"Surface 개념 자체는 모든 DX버전에 다 해당됩니다. 그냥 이미지를 담을 수 있는 버퍼는 몽땅 다 Surface입니다. DDraw시절에도 Surface가 있었고 DX12에 와서도 Surface가 있습니다. 포프님 설명이 가장 정확합니다."

라고 설명해주셨다.

 

 

 

[유니티 어필리에이트 프로그램]

아래의 링크를 통해 에셋을 구매하시거나 유니티를 구독하시면 수익의 일부가 베르에게 수수료로 지급되어 채널의 운영에 도움이 됩니다.

 

에셋스토어

여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.

assetstore.unity.com

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Create 2D & 3D Experiences With Unity's Game Engine | Unity Pro - Unity Store

Unity Pro software is a real-time 3D platform for teams who want to design cross-platform, 2D, 3D, VR, AR & mobile experiences with a full suite of advanced tools.

store.unity.com

[투네이션]

 

-

 

toon.at

[Patreon]

 

WER's GAME DEVELOP CHANNEL님이 Game making class videos 창작 중 | Patreon

WER's GAME DEVELOP CHANNEL의 후원자가 되어보세요. 아티스트와 크리에이터를 위한 세계 최대의 멤버십 플랫폼에서 멤버십 전용 콘텐츠와 체험을 즐길 수 있습니다.

www.patreon.com

[디스코드 채널]

 

Join the 베르의 게임 개발 채널 Discord Server!

Check out the 베르의 게임 개발 채널 community on Discord - hang out with 399 other members and enjoy free voice and text chat.

discord.com

 

반응형

+ Recent posts