[PATCH] d3drm: Implement SetAppData/GetAppData for a viewport
Nikolay Sivov
nsivov at codeweavers.com
Tue Mar 1 06:24:12 CST 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
For https://bugs.winehq.org/show_bug.cgi?id=22039
dlls/d3drm/tests/d3drm.c | 23 ++++++++++++++++++++++-
dlls/d3drm/viewport.c | 26 ++++++++++++++++++--------
2 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 4a1c180..16f0913 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -1220,10 +1220,11 @@ static void test_Viewport(void)
IDirect3DRMDevice *device;
IDirect3DRMFrame *frame;
IDirect3DRMViewport *viewport;
+ IDirect3DRMViewport2 *viewport2;
GUID driver;
HWND window;
RECT rc;
- DWORD size;
+ DWORD size, data;
CHAR cname[64] = {0};
window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, 0, 0, 0, 0);
@@ -1261,6 +1262,26 @@ static void test_Viewport(void)
ok(size == sizeof("Viewport"), "wrong size: %u\n", size);
ok(!strcmp(cname, "Viewport"), "Expected cname to be \"Viewport\", but got \"%s\"\n", cname);
+ /* AppData */
+ hr = IDirect3DRMViewport_SetAppData(viewport, 0);
+ ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
+
+ hr = IDirect3DRMViewport_SetAppData(viewport, 0);
+ ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
+
+ hr = IDirect3DRMViewport_SetAppData(viewport, 1);
+ ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
+
+ hr = IDirect3DRMViewport_SetAppData(viewport, 1);
+ ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
+
+ hr = IDirect3DRMViewport_QueryInterface(viewport, &IID_IDirect3DRMViewport2, (void**)&viewport2);
+ ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
+
+ data = IDirect3DRMViewport2_GetAppData(viewport2);
+ ok(data == 1, "got %x\n", data);
+ IDirect3DRMViewport2_Release(viewport2);
+
IDirect3DRMViewport_Release(viewport);
IDirect3DRMFrame_Release(frame);
IDirect3DRMDevice_Release(device);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 58de085..b0d249c 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -38,6 +38,7 @@ struct d3drm_viewport
D3DVALUE front;
D3DVALUE field;
D3DRMPROJECTIONTYPE projection;
+ DWORD appdata;
};
static inline struct d3drm_viewport *impl_from_IDirect3DRMViewport(IDirect3DRMViewport *iface)
@@ -125,16 +126,20 @@ static HRESULT WINAPI d3drm_viewport1_DeleteDestroyCallback(IDirect3DRMViewport
static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, DWORD data)
{
- FIXME("iface %p, data %#x stub!\n", iface, data);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %#x\n", iface, data);
+
+ return IDirect3DRMViewport2_SetAppData(&viewport->IDirect3DRMViewport2_iface, data);
}
static DWORD WINAPI d3drm_viewport1_GetAppData(IDirect3DRMViewport *iface)
{
- FIXME("iface %p.\n", iface);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
+
+ TRACE("iface %p.\n", iface);
- return 0;
+ return IDirect3DRMViewport2_GetAppData(&viewport->IDirect3DRMViewport2_iface);
}
static HRESULT WINAPI d3drm_viewport1_SetName(IDirect3DRMViewport *iface, const char *name)
@@ -478,16 +483,21 @@ static HRESULT WINAPI d3drm_viewport2_DeleteDestroyCallback(IDirect3DRMViewport2
static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, DWORD data)
{
- FIXME("iface %p, data %#x stub!\n", iface, data);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
- return E_NOTIMPL;
+ TRACE("iface %p, data %#x\n", iface, data);
+
+ viewport->appdata = data;
+ return S_OK;
}
static DWORD WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface)
{
- FIXME("iface %p stub!\n", iface);
+ struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface);
+
+ TRACE("iface %p\n", iface);
- return 0;
+ return viewport->appdata;
}
static HRESULT WINAPI d3drm_viewport2_SetName(IDirect3DRMViewport2 *iface, const char *name)
--
2.7.0
More information about the wine-patches
mailing list