Cairo Graphics API(GTK + 2.24.10バンドルに含まれています)を呼び出し、Direct3D 9 API(DirectX SDK 2009年3月)を使用する必要があります。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