다음을 통해 공유


EGL 코드와 DXGI 및 Direct3D 비교

중요 API

DXGI(DirectX Graphics Interface) 및 일부 Direct3D API는 EGL과 동일한 역할을 합니다. 이 항목은 EGL의 관점에서 DXGI 및 Direct3D 11을 이해하는 데 도움이 됩니다.

EGL과 같은 DXGI 및 Direct3D는 그래픽 리소스를 구성하고, 셰이더가 그릴 렌더링 컨텍스트를 가져오며, 결과를 창에 표시하는 메서드를 제공합니다. 그러나 DXGI 및 Direct3D에는 훨씬 더 많은 옵션이 있으며 EGL에서 포팅할 때 올바르게 설정하려면 더 많은 작업이 필요합니다.

참고 이 지침은 Khronos Group의 EGL 1.4용 개방형 사양을 기반으로 하며, 이 사양은 Khronos 기본 플랫폼 그래픽 인터페이스(EGL 버전 1.4 - 2011년 4월 6일)[PDF]에서 살펴볼 수 있습니다. 다른 플랫폼 및 개발 언어와 관련된 구문의 차이점은 이 지침에서 다루지 않습니다.

 

DXGI와 Direct3D는 어떻게 비교하나요?

EGL이 DXGI 및 Direct3D보다 뛰어난 점은 창 화면에 그리기를 시작하는 것이 비교적 간단하다는 것입니다. 이는 OpenGL ES 2.0 그리고 EGL이 여러 플랫폼 공급자에 의해 구현되는 사양인 반면 DXGI 및 Direct3D는 하드웨어 공급업체 드라이버가 준수해야 하는 단일 참조이기 때문입니다. 즉, Microsoft는 특정 공급업체에서 제공하는 기능 하위 집합에 집중하거나 공급업체별 설치 명령을 더 간단한 API로 결합하는 대신 가능한 한 가장 광범위한 공급업체 기능 집합을 사용하도록 설정하는 API 집합을 구현해야 합니다. 반면, Direct3D는 매우 광범위한 그래픽 하드웨어 플랫폼 및 기능 수준을 포괄하는 단일 API 세트를 제공하며, 플랫폼 활용 경험이 있는 개발자들이 보다 더 유연하게 작업할 수 있게 합니다.

EGL과 마찬가지로 DXGI 및 Direct3D는 다음 동작에 대한 API를 제공합니다.

  • 프레임 버퍼(DXGI에서 '스왑 체인'이라고 함)를 가져오고 읽고 써야 합니다.
  • 프레임 버퍼를 UI 창과 연결합니다.
  • 그릴 렌더링 컨텍스트를 가져오고 구성합니다.
  • 특정 렌더링 컨텍스트에 대한 그래픽 파이프라인으로 명령을 실행합니다.
  • 셰이더 리소스를 생성하고 관리하고 렌더링 콘텐츠와 연결합니다.
  • 텍스처 등 특정 렌더링 대상으로 렌더링
  • 그래픽 리소스로 렌더링 결과를 사용하여 창의 디스플레이 화면을 업데이트합니다.

그래픽 파이프라인을 구성하기 위한 기본 Direct3D 프로세스를 보려면 Microsoft Visual Studio 2015에서 DirectX 11 앱(유니버설 Windows) 템플릿을 확인합니다. 기본 렌더링 클래스는 Direct3D 11 그래픽 인프라를 설정하고 기본 리소스를 구성할 뿐만 아니라 화면 회전 등의 UWP(유니버설 Windows 플랫폼) 앱 기능을 지원하기 위한 좋은 기준을 제공합니다.

EGL에는 Direct3D 11에 비해 API가 거의 없으며 플랫폼에 특정한 명명 및 전문 용어에 익숙하지 않은 경우 후자를 탐색하는 것이 어려울 수 있습니다. 다음은 지향을 파악하는 데 도움이 되는 간단한 개요입니다.

먼저 Direct3D 인터페이스 매핑에 대한 기본 EGL 개체를 검토합니다.

EGL 추상화 유사한 Direct3D 표현
EGLDisplay Direct3D(UWP 앱의 경우)에서 디스플레이 핸들은 Windows::UI::CoreWindow API(또는 HWND를 노출하는 ICoreWindowInterop 인터페이스)를 통해 가져옵니다. 어댑터 및 하드웨어 구성은 각각 IDXGIAdapterIDXGIDevice1 COM 인터페이스로 설정됩니다.
EGLSurface Direct3D에서는 IDXGIFactory2(IDXGISwapChain1(디스플레이 버퍼)와 같은 DXGI 리소스를 획득하는 데 사용되는 팩터리 패턴 구현)을 비롯한 특정 DXGI 인터페이스에 의해 버퍼 및 기타 창 리소스(표시 또는 오프스크린)가 만들어지고 구성됩니다. 그래픽 디바이스 및 해당 리소스를 나타내는 ID3D11Device1D3D11Device::CreateDevice를 사용하여 획득됩니다. 렌더링 대상의 경우 ID3D11RenderTargetView 인터페이스를 사용합니다.
EGLContext Direct3D에서는 ID3D11DeviceContext1 인터페이스를 사용하여 그래픽 파이프라인에 명령을 구성하고 실행합니다.
EGLConfig Direct3D 11에서는 ID3D11Device1 인터페이스의 메서드를 사용하여 버퍼, 텍스처, 스텐실, 셰이더와 같은 그래픽 리소스를 생성하고 구성합니다.

 

이제 UWP 앱에 대한 DXGI 및 Direct3D에서 간단한 그래픽 디스플레이, 리소스, 컨텍스트를 설정하는 가장 기본적인 프로세스는 다음과 같습니다.

  1. CoreWindow::GetForCurrentThread를 호출하여 앱의 핵심 UI 스레드에 대한 CoreWindow 개체에 대한 핸들을 가져옵니다.
  2. UWP 앱의 경우 IDXGIFactory2::CreateSwapChainForCoreWindow를 사용하여 IDXGIAdapter2에서 스왑 체인을 획득하고 1단계에서 얻은 CoreWindow 참조를 전달합니다. 그 대가로 IDXGISwapChain1 인스턴스를 가져옵니다. 렌더러 개체 및 렌더링 스레드로 범위를 지정합니다.
  3. D3D11Device::CreateDevice 메서드를 호출하여 ID3D11Device1ID3D11DeviceContext1 인스턴스를 가져옵니다. 렌더러 개체로 범위도 지정합니다.
  4. 렌더러의 ID3D11Device1 개체에서 메서드를 사용하여 셰이더, 질감, 기타 리소스를 생성합니다.
  5. 렌더러의 ID3D11DeviceContext1 개체에서 메서드를 사용하여 버퍼를 정의하고, 셰이더를 실행하며, 파이프라인 단계를 관리합니다.
  6. 파이프라인이 실행되고 프레임이 백 버퍼에 그려지면 IDXGISwapChain1::Present1을 사용하여 화면에 표시합니다.

이 프로세스를 자세히 검토하려면 DirectX 그래픽으로 시작하기를 검토하세요. 이 문서의 나머지 부분에는 기본 그래픽 파이프라인 설정 및 관리를 위한 수많은 일반 단계가 설명되어 있습니다.

참고 Windows 데스크톱 앱에는 D3D11Device::CreateDeviceAndSwapChain과 같은 Direct3D 스왑 체인을 가져오기 위한 다른 API가 있으며 CoreWindow 개체를 사용하지 않습니다.

 

표시할 창 확보

이 예제에서 eglGetDisplay는 Microsoft Windows 플랫폼과 관련된 창 리소스에 대한 HWND를 전달합니다. Apple의 iOS(Cocoa) 및 Google의 Android와 같은 다른 플랫폼은 창 리소스에 대한 핸들이나 참조가 다르며 호출 구문이 다를 수 있습니다. 디스플레이를 가져온 후에는 디스플레이를 초기화하고, 기본 구성을 설정하며, 그릴 수 있는 백 버퍼를 사용하여 표면을 생성합니다.

디스플레이를 확보하고 EGL을 사용하여 구성합니다.

// Obtain an EGL display object.
EGLDisplay display = eglGetDisplay(GetDC(hWnd));
if (display == EGL_NO_DISPLAY)
{
  return EGL_FALSE;
}

// Initialize the display
if (!eglInitialize(display, &majorVersion, &minorVersion))
{
  return EGL_FALSE;
}

// Obtain the display configs
if (!eglGetConfigs(display, NULL, 0, &numConfigs))
{
  return EGL_FALSE;
}

// Choose the display config
if (!eglChooseConfig(display, attribList, &config, 1, &numConfigs))
{
  return EGL_FALSE;
}

// Create a surface
surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType)hWnd, NULL);
if (surface == EGL_NO_SURFACE)
{
  return EGL_FALSE;
}

Direct3D에서 UWP 앱의 기본 창은 CoreWindow 개체로 표현되며, Direct3D에 대해 생성한 '뷰 공급자'의 초기화 프로세스의 일부로 CoreWindow::GetForCurrentThread를 호출하여 앱 개체에서 가져올 수 있습니다. (Direct3D-XAML interop를 사용하는 경우 XAML 프레임워크의 뷰 공급자를 사용합니다.) Direct3D 뷰 공급자를 만드는 프로세스는 보기를 표시하도록 앱을 설정하는 방법에 대해 설명합니다.

Direct3D용 CoreWindow를 확보합니다.

CoreWindow::GetForCurrentThread();

CoreWindow 참조를 가져오면 기본 개체의 실행 메서드를 실행하고 창 이벤트 처리를 시작하는 창을 활성화해야 합니다. 그런 다음 DXGI_SWAP_CHAIN_DESC1 구성을 기반으로 스왑 체인 리소스를 만들기 위해 IDXGIFactory2 개체를 가져올 수 있도록, ID3D11Device1ID3D11DeviceContext1을 만들고 사용하여 기본 IDXGIDevice1IDXGIAdapter를 가져옵니다.

Direct3D용 CoreWindow에서 DXGI 스왑 체인 구성 및 설정

// Called when the CoreWindow object is created (or re-created).
void SimpleDirect3DApp::SetWindow(CoreWindow^ window)
{
  // Register event handlers with the CoreWindow object.
  // ...

  // Obtain your ID3D11Device1 and ID3D11DeviceContext1 objects
  // In this example, m_d3dDevice contains the scoped ID3D11Device1 object
  // ...

  ComPtr<IDXGIDevice1>  dxgiDevice;
  // Get the underlying DXGI device of the Direct3D device.
  m_d3dDevice.As(&dxgiDevice);

  ComPtr<IDXGIAdapter> dxgiAdapter;
  dxgiDevice->GetAdapter(&dxgiAdapter);

  ComPtr<IDXGIFactory2> dxgiFactory;
  dxgiAdapter->GetParent(
    __uuidof(IDXGIFactory2), 
    &dxgiFactory);

  DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
  swapChainDesc.Width = static_cast<UINT>(m_d3dRenderTargetSize.Width); // Match the size of the window.
  swapChainDesc.Height = static_cast<UINT>(m_d3dRenderTargetSize.Height);
  swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format.
  swapChainDesc.Stereo = false;
  swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
  swapChainDesc.SampleDesc.Quality = 0;
  swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
  swapChainDesc.BufferCount = 2; // Use double-buffering to minimize latency.
  swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All UWP apps must use this SwapEffect.
  swapChainDesc.Flags = 0;

  // ...

  Windows::UI::Core::CoreWindow^ window = m_window.Get();
  dxgiFactory->CreateSwapChainForCoreWindow(
    m_d3dDevice.Get(),
    reinterpret_cast<IUnknown*>(window),
    &swapChainDesc,
    nullptr, // Allow on all displays.
    &m_swapChainCoreWindow);
}

프레임을 표시하기 위해 준비한 후 IDXGISwapChain1::Present1 메서드를 호출합니다.

Direct3D 11에서는 EGLSurface와 동일한 추상화가 없습니다. (IDXGISurface1이 있지만 다르게 사용됩니다.) 가장 가까운 개념적 근사치는 셰이더 파이프라인이 그릴 백 버퍼로 텍스처(ID3D11Texture2D)를 할당하는 데 사용하는 ID3D11RenderTargetView개체입니다.

Direct3D 11에서 스왑 체인에 대한 백 버퍼 설정

ComPtr<ID3D11RenderTargetView>    m_d3dRenderTargetViewWin; // scoped to renderer object

// ...

ComPtr<ID3D11Texture2D> backBuffer2;
    
m_swapChainCoreWindow->GetBuffer(0, IID_PPV_ARGS(&backBuffer2));

m_d3dDevice->CreateRenderTargetView(
  backBuffer2.Get(),
  nullptr,
    &m_d3dRenderTargetViewWin);

창을 생성하거나 크기를 변경할 때마다 이 코드를 호출하는 것이 좋습니다. 렌더링하는 동안 꼭짓점 버퍼 또는 셰이더와 같은 다른 하위 리소스를 설정하기 전에 ID3D11DeviceContext1::OMSetRenderTargets를 사용하여 렌더링 대상 뷰를 설정합니다.

// Set the render target for the draw operation.
m_d3dContext->OMSetRenderTargets(
        1,
        d3dRenderTargetView.GetAddressOf(),
        nullptr);

렌더링 컨텍스트 생성

EGL 1.4에서 '표시'는 창 리소스 집합을 나타냅니다. 일반적으로 표시 개체에 특성 집합을 제공하고 그 대가로 표면을 가져오면 디스플레이에 대한 'surface'를 구성합니다. 해당 컨텍스트를 생성하고 표면 및 디스플레이에 바인딩하여 표면의 내용을 표시하기 위한 컨텍스트를 생성합니다.

호출 흐름은 일반적으로 다음과 유사합니다.

  • 디스플레이 또는 창 리소스에 대한 핸들을 사용하여 eglGetDisplay를 호출하고 표시 개체를 확보합니다.
  • eglInitialize로 디스플레이를 초기화합니다.
  • 사용 가능한 디스플레이 구성을 확보하고 eglGetConfigs 및 eglChooseConfig를 사용하여 선택합니다.
  • eglCreateWindowSurface를 사용하여 창 화면을 생성합니다.
  • eglCreateContext를 사용하여 그리기 위한 표시 컨텍스트를 생성합니다.
  • eglMakeCurrent를 사용하여 디스플레이 컨텍스트를 디스플레이 및 표면에 바인딩합니다.

이전 섹션에서는 EGLDisplay 및 EGLSurface를 생성했으며, 이제 EGLDisplay를 사용하여 컨텍스트를 생성하고 구성된 EGLSurface를 사용하여 해당 컨텍스트를 디스플레이와 연결하여 출력을 매개 변수화했습니다.

EGL 1.4를 사용하여 렌더링 컨텍스트 확보하기

// Configure your EGLDisplay and obtain an EGLSurface here ...
// ...

// Create a drawing context from the EGLDisplay
context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs);
if (context == EGL_NO_CONTEXT)
{
  return EGL_FALSE;
}   
   
// Make the context current
if (!eglMakeCurrent(display, surface, surface, context))
{
  return EGL_FALSE;
}

Direct3D 11의 렌더링 컨텍스트는 어댑터를 나타내고 버퍼 및 셰이더와 같은 Direct3D 리소스를 생성할 수 있는 ID3D11Device1 개체와 그래픽 파이프라인을 관리하고 셰이더를 실행할 수 있는 ID3D11DeviceContext1 개체로 표시됩니다.

Direct3D 기능 수준에 유의하세요! 이는 DirectX 9.1에서 DirectX 11까지 이전 Direct3D 하드웨어 플랫폼을 지원하는 데 사용됩니다. 태블릿과 같은 저전력 그래픽 하드웨어를 사용하는 수많은 플랫폼이 DirectX 9.1 기능에만 액세스할 수 있으며 이전 지원 그래픽 하드웨어는 9.1에서 11 버전까지만 사용할 수 있습니다.

DXGI 및 Direct3D로 렌더링 컨텍스트 생성하기


// ... 

UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
ComPtr<IDXGIDevice> dxgiDevice;

D3D_FEATURE_LEVEL featureLevels[] = 
{
        D3D_FEATURE_LEVEL_11_1,
        D3D_FEATURE_LEVEL_11_0,
        D3D_FEATURE_LEVEL_10_1,
        D3D_FEATURE_LEVEL_10_0,
        D3D_FEATURE_LEVEL_9_3,
        D3D_FEATURE_LEVEL_9_2,
        D3D_FEATURE_LEVEL_9_1
};

// Create the Direct3D 11 API device object and a corresponding context.
ComPtr<ID3D11Device> device;
ComPtr<ID3D11DeviceContext> d3dContext;

D3D11CreateDevice(
  nullptr, // Specify nullptr to use the default adapter.
  D3D_DRIVER_TYPE_HARDWARE,
  nullptr,
  creationFlags, // Set debug and Direct2D compatibility flags.
  featureLevels, // List of feature levels this app can support.
  ARRAYSIZE(featureLevels),
  D3D11_SDK_VERSION, // Always set this to D3D11_SDK_VERSION for UWP apps.
  &device, // Returns the Direct3D device created.
  &m_featureLevel, // Returns feature level of device created.
  &d3dContext // Returns the device immediate context.
);

텍스처 또는 pixmap 리소스에 그리기

OpenGL ES 2.0을 사용하여 텍스처로 그리려면 픽셀 버퍼 또는 PBuffer를 구성합니다. EGLSurface를 구성하고 생성한 후에는 렌더링 컨텍스트를 제공하고 셰이더 파이프라인을 실행하여 텍스처에 그릴 수 있습니다.

OpenGL ES 2.0으로 픽셀 버퍼에 그리기

// Create a pixel buffer surface to draw into
EGLConfig pBufConfig;
EGLint totalpBufAttrs;

const EGLint pBufConfigAttrs[] =
{
    // Configure the pBuffer here...
};
 
eglChooseConfig(eglDsplay, pBufConfigAttrs, &pBufConfig, 1, &totalpBufAttrs);
EGLSurface pBuffer = eglCreatePbufferSurface(eglDisplay, pBufConfig, EGL_TEXTURE_RGBA); 

Direct3D 11에서 ID3D11Texture2D 리소스를 만들고 렌더링 대상으로 생성합니다. D3D11_RENDER_TARGET_VIEW_DESC를 사용하여 렌더링 대상을 구성합니다. 이 렌더링 대상을 사용하여 ID3D11DeviceContext::Draw 메서드(또는 디바이스 컨텍스트에 대한 유사한 그리기* 작업)를 호출하면 결과가 텍스처로 그려집니다.

Direct3D 11로 질감으로 그리기

ComPtr<ID3D11Texture2D> renderTarget1;

D3D11_RENDER_TARGET_VIEW_DESC renderTargetDesc = {0};
// Configure renderTargetDesc here ...

m_d3dDevice->CreateRenderTargetView(
  renderTarget1.Get(),
  nullptr,
  &m_d3dRenderTargetViewWin);

// Later, in your render loop...

// Set the render target for the draw operation.
m_d3dContext->OMSetRenderTargets(
        1,
        d3dRenderTargetView.GetAddressOf(),
        nullptr);

ID3D11ShaderResourceView와 연결된 경우 이 텍스처를 셰이더에 전달할 수 있습니다.

화면으로 그리기

EGLContext를 사용하여 버퍼를 구성하고 데이터를 업데이트한 후에는 바인딩된 셰이더를 실행하고 glDrawElements를 사용하여 그 결과를 백 버퍼에 그립니다. eglSwapBuffers를 호출하여 백 버퍼를 표시합니다.

GL ES 2.0 열기: 화면에 그리기.

glDrawElements(GL_TRIANGLES, renderer->numIndices, GL_UNSIGNED_INT, 0);

eglSwapBuffers(drawContext->eglDisplay, drawContext->eglSurface);

Direct3D 11에서는 버퍼를 구성하고 IDXGISwapChain::Present1을 사용하여 셰이더를 바인딩합니다. 그런 다음 ID3D11DeviceContext1::Draw* 메서드 중 하나를 호출하여 셰이더를 실행하고 스왑 체인의 백 버퍼로 구성되어 있는 렌더링 대상에 결과를 그립니다. 그런 다음 IDXGISwapChain::Present1을 호출하여 백 버퍼를 표시합니다.

Direct3D 11: 화면에 그리기.


m_d3dContext->DrawIndexed(
        m_indexCount,
        0,
        0);

// ...

m_swapChainCoreWindow->Present1(1, 0, &parameters);

그래픽 리소스 릴리스

EGL에서는 eglTerminate에 EGLDisplay를 전달하여 창 리소스를 해제합니다.

EGL 1.4로 디스플레이 종료

EGLBoolean eglTerminate(eglDisplay);

UWP 앱에서는 CoreWindow::Close를 사용하여 CoreWindow를 닫을 수 있지만 보조 UI 창에만 사용할 수 있습니다. 기본 UI 스레드와 연결된 CoreWindow를 닫을 수 없으며, 대신 운영 체제에서 만료됩니다. 그러나 보조 CoreWindow를 닫으면 CoreWindow::Closed 이벤트가 발생합니다.

EGL에서 Direct3D 11로의 API 참조 매핑

EGL API 유사한 Direct3D 11 API 또는 동작
eglBindAPI 해당 없음.
eglBindTexImage ID3D11Device::CreateTexture2D를 호출하여 2D 텍스처를 설정합니다.
eglChooseConfig Direct3D는 기본 프레임 버퍼 구성 집합을 제공하지 않습니다. 스왑 체인의 구성
eglCopyBuffers 버퍼 데이터를 복사하려면 ID3D11DeviceContext::CopyStructureCount를 호출합니다. 리소스를 복사하려면 ID3DDeviceCOntext::CopyResource를 호출합니다.
eglCreateContext Direct3D 디바이스에 대한 핸들과 기본 Direct3D 직접 컨텍스트(ID3D11DeviceContext1 개체)를 모두 반환하는 D3D11CreateDevice를 호출하여 Direct3D 디바이스 컨텍스트를 만듭니다. 반환된 ID3D11Device1 개체에서 ID3D11Device2::CreateDeferredContext를 호출하여 Direct3D 지연 컨텍스트를 생성할 수도 있습니다.
eglCreatePbufferFromClientBuffer 모든 버퍼는 ID3D11Texture2D와 같은 Direct3D 하위 리소스로 읽고 기록됩니다. ID3D11DeviceContext1:CopyResource와 같은 메서드를 사용하여 호환되는 다른 하위 리소스 형식으로 복사합니다.
eglCreatePbufferSurface 스왑 체인이 없는 Direct3D 디바이스를 생성하려면 정적 D3D11CreateDevice 메서드를 호출합니다. Direct3D 렌더링 대상 보기의 경우 ID3D11Device::CreateRenderTargetView를 호출합니다.
eglCreatePixmapSurface 스왑 체인이 없는 Direct3D 디바이스를 생성하려면 정적 D3D11CreateDevice 메서드를 호출합니다. Direct3D 렌더링 대상 보기의 경우 ID3D11Device::CreateRenderTargetView를 호출합니다.
eglCreateWindowSurface IDXGISwapChain1(디스플레이 버퍼용) 및 ID3D11Device1(그래픽 디바이스 및 해당 리소스에 대한 가상 인터페이스)을 설정합니다. ID3D11Device1을 사용하여 IDXGISwapChain1에 제공하는 프레임 버퍼를 만드는 데 사용할 수 있는 ID3D11RenderTargetView를 정의합니다.
eglDestroyContext 해당 없음. ID3D11DeviceContext::DiscardView1을 사용하여 렌더링 대상 보기를 제거합니다. 부모 ID3D11DeviceContext1을 닫으려면 인스턴스를 null로 설정하고 플랫폼이 리소스를 회수할 때까지 대기합니다. 디바이스 컨텍스트를 직접 삭제할 수 없습니다.
eglDestroySurface 해당 없음. 그래픽 리소스는 플랫폼에서 UWP 앱의 CoreWindow를 닫을 때 지워집니다.
eglGetCurrentDisplay CoreWindow::GetForCurrentThread를 호출하여 현재 기본 앱 창에 대한 참조를 가져옵니다.
eglGetCurrentSurface 이는 현재 ID3D11RenderTargetView입니다. 일반적으로 렌더러 개체로 범위가 지정됩니다.
eglGetError 오류는 DirectX 인터페이스의 메서드 대부분에서 반환되는 HRESULT로 가져옵니다. 메서드가 HRESULT를 반환하지 않으면 GetLastError를 호출합니다. 시스템 오류를 HRESULT 값으로 변환하려면 HRESULT_FROM_WIN32 매크로를 사용합니다.
eglInitialize CoreWindow::GetForCurrentThread를 호출하여 현재 기본 앱 창에 대한 참조를 가져옵니다.
eglMakeCurrent ID3D11DeviceContext1::OMSetRenderTargets를 사용하여 현재 컨텍스트에서 그리기 위한 렌더링 대상을 설정합니다.
eglQueryContext 해당 없음. 그러나 ID3D11Device1 인스턴스 및 일부 구성 데이터에서 렌더링 대상을 가져올 수 있습니다. (사용 가능한 메서드 목록에 대한 링크를 참조하세요.)
eglQuerySurface 해당 없음. 그러나 ID3D11Device1 인스턴스의 메서드에서 뷰포트 및 현재 그래픽 하드웨어에 대한 데이터를 가져올 수 있습니다. (사용 가능한 메서드 목록에 대한 링크를 참조하세요.)
eglReleaseTexImage 해당 없음.
eglReleaseThread 일반 GPU 다중 스레딩의 경우 다중 스레딩을 읽습니다.
eglSurfaceAttrib D3D11_RENDER_TARGET_VIEW_DESC를 사용하여 Direct3D 렌더링 대상 뷰를 구성합니다.
eglSwapBuffers IDXGISwapChain1::Present1을 사용합니다.
eglSwapInterval IDXGISwapChain1을 참조하세요.
eglTerminate 그래픽 파이프라인의 출력을 표시하는 데 사용되는 CoreWindow는 운영 체제에서 관리됩니다.
eglWaitClient 공유 화면에서는 IDXGIKeyedMutex를 사용합니다. 일반 GPU 다중 스레딩의 경우 다중 스레딩을 읽습니다.
eglWaitGL 공유 화면에서는 IDXGIKeyedMutex를 사용합니다. 일반 GPU 다중 스레딩의 경우 다중 스레딩을 읽습니다.
eglWaitNative 공유 화면에서는 IDXGIKeyedMutex를 사용합니다. 일반 GPU 다중 스레딩의 경우 다중 스레딩을 읽습니다.