Direct3D 9 API (DirectX SDK 2009 년 3 월)를 사용하면서 Cairo Graphics API (GTK + 2.24.10 번들에 포함)를 호출해야합니다.IDirect3D9 :: CreateDevice는 GTK + 2 카이로 렌더링을 방지합니다.
다음과 같이 나는 기본 카이로 함수 호출을 테스트하려면
:#include <cairo\cairo.h>
...
cairo_surface_t *surface;
cairo_t *cr;
cairo_status_t status;
surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 390, 60);
status = cairo_surface_status(surface);
cr = cairo_create(surface);
status = cairo_status(cr);
cairo_set_source_rgba(cr, 0, 0, 0, 1);
status = cairo_status(cr);
cairo_rectangle(cr, 175, 10, 40, 40);
status = cairo_status(cr);
cairo_fill(cr);
status = cairo_status(cr);
cairo_surface_flush(surface);
status = cairo_surface_write_to_png(surface, "c:\\cairo_test.png");
cairo_destroy(cr);
cairo_surface_destroy(surface);
...
카이로 API 호출 IDirect3D9 :: CreateDevice를를 호출하기 전에 만들어진 경우 다음 .PNG가 출력됩니다
:
은 IDirect3D9 :: CreateDevice를에 전화를 한 후, 같은 카이로 API 호출은 빈 .PNG를 만들
IDirect3D9 :: 다음과 같이 CreateDevice를 호출 매개 변수화되어
개체 매개 변수는 다음과 같은 멤버 변수를 포함Direct3DCreate9(D3D_SDK_VERSION)->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, WindowHandle, D3DCREATE_HARDWARE_VERTEXPROCESSING, &PresentParameters, &PDevice);
:
이WindowHandle 0x001b07f8 {unused=13111204 } HWND__ *
unused 13111204 int
PresentParameters {BackBufferWidth=0 BackBufferHeight=0 BackBufferFormat=D3DFMT_UNKNOWN (0) ...} _D3DPRESENT_PARAMETERS_
BackBufferWidth 0 unsigned int
BackBufferHeight 0 unsigned int
BackBufferFormat D3DFMT_UNKNOWN (0) _D3DFORMAT
BackBufferCount 1 unsigned int
MultiSampleType D3DMULTISAMPLE_NONE (0) _D3DMULTISAMPLE_TYPE
MultiSampleQuality 0 unsigned long
SwapEffect D3DSWAPEFFECT_DISCARD (1) _D3DSWAPEFFECT
+ hDeviceWindow 0x001b07f8 {unused=13111204 } HWND__ *
Windowed 1 int
EnableAutoDepthStencil 0 int
AutoDepthStencilFormat D3DFMT_UNKNOWN (0) _D3DFORMAT
Flags 1 unsigned long
FullScreen_RefreshRateInHz 0 unsigned int
PresentationInterval 0 unsigned int
PDevice 0x00000000 <NULL> IDirect3DDevice9 *
+ IUnknown <struct at NULL> IUnknown
질문은 :
-
을
- 어떻게 코드가 오류없이 컴파일하고 런타임에 오류 상태를 반환하지는 않지만 Cairo API 호출의 동작은 크게 다릅니다.
- IDirect3D9 :: CreateDevice 호출을 매개 변수화하여이를 방지하거나 이후 함수 호출로 Cairo API의 예상되는 동작을 복구하는 방법이 있습니까?
특히 기존의 Direct3D 9 API를 사용해야하는 이유는 무엇입니까? [MSDN] (https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx) 및 [이 게시물] (https://blogs.msdn.microsoft.com/)을 참조하십시오. chuckw/2012/11/26/visual-studio-2012-update-1 /) wrt 레거시 DirectX SDK. –
@ChuckWalbourn 사용중인 플랫폼 도구 세트는 v140_xp (VS 2015)입니다. 레거시 D3D9 API는 Windows XP 운영 체제를 실행하는 클라이언트를 대상으로이 프로젝트에서 항상 사용되었습니다. 위에 나열된 API간에 알려진 비 호환성이 있습니까? – Jeff
@ChuckWalbourn 코드 기반으로 만들어진 수많은 D3DX 호출이 있습니다. 이것이 독립 실행 형 라이브러리가 사용되는 이유입니다. "DirectX SDK는 어디에 있습니까?"(https://msdn.microsoft.com/en-us/library/windows/desktop/ee663275) .aspx) – Jeff