먼저 일반적인 상황 ... DLL을 통해로드 된 타사 라이브러리가 HWND로 렌더링됩니다. 그것은 단순한 2D 렌더링이며 D3D를 직접 볼 수있는 방식으로 사용하지 않습니다. DLL에 대한 종속성 워크는 D3DKMTCreateDevice
과 같은 D3DKMT 함수를 많이 나타내지 만 일반 D3D 호출은 IDirect3D9::CreateDevice
과 같지 않습니다. IDirect3D9::CreateDevice
으로 전화하면 제 3 자 렌더링이 엉망이됩니다. 그것은 불평하지 않지만 단순히 모든 것을 검은 색 직사각형으로 만듭니다. 내 자신의 렌더링 잘 작동합니다.D3D9를 초기화하면 타사 라이브러리가 작동을 멈 춥니 다.
제 3 자 DLL은 wxWidgets wxWebConnect 라이브러리에 래핑 된 FireFox (하드웨어 가속 기능이있는 2.0이 아님)의 핵심 인 Mozilla XULRunner 1.9.x입니다. wxWC는 XUL DLL을로드하고 웹 브라우저 GUI 구성 요소를 제공합니다.
내가 여기 WX & wxWebConnect를 사용하여 작동하는 응용 프로그램이 컴파일 된 EXE 및 코드 : 여기 http://www.kirix.com/forums/viewtopic.php?f=25&t=911#p2605
는 약간 wxWidgets에 결합하지만 읽기 힘든 만들 충분하지 않아, 내 실제 코드 - 나는 HWND가 임의의 창에서 얻을 단순히 D3D를 초기화 만에 렌더링 결코합니다 :
void MyFrame::OnD3DButton(wxCommandEvent &event)
{
static bool initialized = false;
static LPDIRECT3D9 mpD3D = NULL;
static LPDIRECT3DDEVICE9 mpD3DDevice=NULL;
if(!initialized)
{
wxButton *button=wxDynamicCast(event.GetEventObject(), wxButton);
HWND mHWnd = (HWND)button->GetHandle();
mpD3D = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS md3dpp;
ZeroMemory(&md3dpp, sizeof(D3DPRESENT_PARAMETERS));
md3dpp.Windowed = true;
md3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
// triple buffer if VSync is on
md3dpp.BackBufferCount = 1;
md3dpp.EnableAutoDepthStencil = 0;
md3dpp.hDeviceWindow = mHWnd;
md3dpp.BackBufferWidth = 0;
md3dpp.BackBufferHeight = 0;
md3dpp.FullScreen_RefreshRateInHz = 0;
md3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
md3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
md3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
md3dpp.MultiSampleQuality = 0;
HRESULT hr = mpD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,mHWnd,
D3DCREATE_MULTITHREADED|D3DCREATE_MIXED_VERTEXPROCESSING,&md3dpp,&mpD3DDevice);
if(FAILED(hr))
wxMessageBox(wxString("mpD3D->CreateDevice() FAILED"));
else
{
wxMessageBox(wxString("mpD3D->CreateDevice() SUCCEEDED"));
initialized = true;
}
}
}
이것은 대부분 문제 일 수 있습니다. 그 고통의 고통. – Goz
오 세상에, 나는 이것을 단지 목록에서 벗어나서 시도해 보았습니다! 나는 지구상에서 웹 렌더링 엔진을 망칠 이유가 없다는 것을 알지 못합니다. 이제이 정보로 무엇을해야합니까? –
이유는 부동 소수점 산술을 사용하는 모든 것을 망칠 것이기 때문입니다. – erikkallen