Commit 7cf81bac authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

d3drm: Implement SetAppData/GetAppData for a viewport.

parent 8cbb680b
......@@ -25,6 +25,11 @@
#include "dxfile.h"
struct d3drm_device;
struct d3drm_object
{
LONG ref;
DWORD appdata;
};
HRESULT d3drm_device_create(struct d3drm_device **out) DECLSPEC_HIDDEN;
IDirect3DRMDevice *IDirect3DRMDevice_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN;
......
......@@ -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);
......
......@@ -31,9 +31,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
struct d3drm_viewport
{
struct d3drm_object obj;
IDirect3DRMViewport IDirect3DRMViewport_iface;
IDirect3DRMViewport2 IDirect3DRMViewport2_iface;
LONG ref;
D3DVALUE back;
D3DVALUE front;
D3DVALUE field;
......@@ -79,7 +79,7 @@ static HRESULT WINAPI d3drm_viewport1_QueryInterface(IDirect3DRMViewport *iface,
static ULONG WINAPI d3drm_viewport1_AddRef(IDirect3DRMViewport *iface)
{
struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
ULONG refcount = InterlockedIncrement(&viewport->ref);
ULONG refcount = InterlockedIncrement(&viewport->obj.ref);
TRACE("%p increasing refcount to %u.\n", iface, refcount);
......@@ -89,7 +89,7 @@ static ULONG WINAPI d3drm_viewport1_AddRef(IDirect3DRMViewport *iface)
static ULONG WINAPI d3drm_viewport1_Release(IDirect3DRMViewport *iface)
{
struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface);
ULONG refcount = InterlockedDecrement(&viewport->ref);
ULONG refcount = InterlockedDecrement(&viewport->obj.ref);
TRACE("%p decreasing refcount to %u.\n", iface, refcount);
......@@ -125,16 +125,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 +482,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->obj.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->obj.appdata;
}
static HRESULT WINAPI d3drm_viewport2_SetName(IDirect3DRMViewport2 *iface, const char *name)
......@@ -819,7 +828,7 @@ HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown **out)
object->IDirect3DRMViewport_iface.lpVtbl = &d3drm_viewport1_vtbl;
object->IDirect3DRMViewport2_iface.lpVtbl = &d3drm_viewport2_vtbl;
object->ref = 1;
object->obj.ref = 1;
if (IsEqualGUID(riid, &IID_IDirect3DRMViewport2))
*out = (IUnknown *)&object->IDirect3DRMViewport2_iface;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment