diff --git a/reactos/dll/directx/wine/d3drm/d3drm.c b/reactos/dll/directx/wine/d3drm/d3drm.c index 5e5d1ccf409..d1656a93b8d 100644 --- a/reactos/dll/directx/wine/d3drm/d3drm.c +++ b/reactos/dll/directx/wine/d3drm/d3drm.c @@ -40,6 +40,45 @@ static const char* get_IID_string(const GUID* guid) return "?"; } +static HRESULT d3drm_create_texture_object(void **object, IDirect3DRM *d3drm) +{ + struct d3drm_texture *texture; + HRESULT hr; + + if (FAILED(hr = d3drm_texture_create(&texture, d3drm))) + return hr; + + *object = &texture->IDirect3DRMTexture_iface; + + return hr; +} + +static HRESULT d3drm_create_device_object(void **object, IDirect3DRM *d3drm) +{ + struct d3drm_device *device; + HRESULT hr; + + if (FAILED(hr = d3drm_device_create(&device, d3drm))) + return hr; + + *object = &device->IDirect3DRMDevice_iface; + + return hr; +} + +static HRESULT d3drm_create_viewport_object(void **object, IDirect3DRM *d3drm) +{ + struct d3drm_viewport *viewport; + HRESULT hr; + + if (FAILED(hr = d3drm_viewport_create(&viewport, d3drm))) + return hr; + + *object = &viewport->IDirect3DRMViewport_iface; + + return hr; +} + struct d3drm { IDirect3DRM IDirect3DRM_iface; @@ -139,9 +178,17 @@ static HRESULT WINAPI d3drm1_CreateObject(IDirect3DRM *iface, static HRESULT WINAPI d3drm1_CreateFrame(IDirect3DRM *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame **frame) { + struct d3drm_frame *object; + HRESULT hr; + TRACE("iface %p, parent_frame %p, frame %p.\n", iface, parent_frame, frame); - return Direct3DRMFrame_create(&IID_IDirect3DRMFrame, (IUnknown *)parent_frame, (IUnknown **)frame); + if (FAILED(hr = d3drm_frame_create(&object, (IUnknown *)parent_frame, iface))) + return hr; + + *frame = &object->IDirect3DRMFrame_iface; + + return D3DRM_OK; } static HRESULT WINAPI d3drm1_CreateMesh(IDirect3DRM *iface, IDirect3DRMMesh **mesh) @@ -241,13 +288,13 @@ static HRESULT WINAPI d3drm1_CreateDevice(IDirect3DRM *iface, { struct d3drm_device *object; HRESULT hr; + FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device); - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, iface))) return hr; - *device = IDirect3DRMDevice_from_impl(object); + *device = &object->IDirect3DRMDevice_iface; return D3DRM_OK; } @@ -255,7 +302,6 @@ static HRESULT WINAPI d3drm1_CreateDevice(IDirect3DRM *iface, static HRESULT WINAPI d3drm1_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer, IDirect3DRMDevice **device) { - struct d3drm *d3drm = impl_from_IDirect3DRM(iface); struct d3drm_device *object; HRESULT hr; @@ -269,13 +315,11 @@ static HRESULT WINAPI d3drm1_CreateDeviceFromSurface(IDirect3DRM *iface, GUID *g if (!backbuffer || !ddraw) return D3DRMERR_BADDEVICE; - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, iface))) return hr; - hr = d3drm_device_init(object, 1, &d3drm->IDirect3DRM_iface, ddraw, backbuffer, TRUE); - if (SUCCEEDED(hr)) - *device = IDirect3DRMDevice_from_impl(object); + if (SUCCEEDED(hr = d3drm_device_init(object, 1, ddraw, backbuffer, TRUE))) + *device = &object->IDirect3DRMDevice_iface; else d3drm_device_destroy(object); @@ -293,20 +337,16 @@ static HRESULT WINAPI d3drm1_CreateDeviceFromD3D(IDirect3DRM *iface, if (!device) return D3DRMERR_BADVALUE; *device = NULL; - if (!d3d || !d3d_device) - return D3DRMERR_BADVALUE; - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, iface))) return hr; - hr = d3drm_device_set_ddraw_device_d3d(object, iface, d3d, d3d_device); - if (FAILED(hr)) + if (FAILED(hr = IDirect3DRMDevice_InitFromD3D(&object->IDirect3DRMDevice_iface, d3d, d3d_device))) { d3drm_device_destroy(object); return hr; } - *device = IDirect3DRMDevice_from_impl(object); + *device = &object->IDirect3DRMDevice_iface; return D3DRM_OK; } @@ -334,8 +374,7 @@ static HRESULT WINAPI d3drm1_CreateDeviceFromClipper(IDirect3DRM *iface, if (FAILED(hr)) return hr; - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, iface))) { IDirectDraw_Release(ddraw); return hr; @@ -349,13 +388,13 @@ static HRESULT WINAPI d3drm1_CreateDeviceFromClipper(IDirect3DRM *iface, return hr; } - hr = d3drm_device_init(object, 1, iface, ddraw, render_target, TRUE); + hr = d3drm_device_init(object, 1, ddraw, render_target, TRUE); IDirectDraw_Release(ddraw); IDirectDrawSurface_Release(render_target); if (FAILED(hr)) d3drm_device_destroy(object); else - *device = IDirect3DRMDevice_from_impl(object); + *device = &object->IDirect3DRMDevice_iface; return hr; } @@ -381,10 +420,39 @@ static HRESULT WINAPI d3drm1_CreateShadow(IDirect3DRM *iface, IDirect3DRMVisual static HRESULT WINAPI d3drm1_CreateViewport(IDirect3DRM *iface, IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) { - FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n", + struct d3drm *d3drm = impl_from_IDirect3DRM(iface); + IDirect3DRMDevice3 *device3; + IDirect3DRMFrame3 *camera3; + IDirect3DRMViewport2 *viewport2; + HRESULT hr; + + TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n", iface, device, camera, x, y, width, height, viewport); - return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport); + if (!device || !camera) + return D3DRMERR_BADOBJECT; + if (!viewport) + return D3DRMERR_BADVALUE; + + if (FAILED(hr = IDirect3DRMDevice_QueryInterface(device, &IID_IDirect3DRMDevice3, (void **)&device3))) + return hr; + + if (FAILED(hr = IDirect3DRMFrame_QueryInterface(camera, &IID_IDirect3DRMFrame3, (void **)&camera3))) + { + IDirect3DRMDevice3_Release(device3); + return hr; + } + + hr = IDirect3DRM3_CreateViewport(&d3drm->IDirect3DRM3_iface, device3, camera3, x, y, width, height, &viewport2); + IDirect3DRMDevice3_Release(device3); + IDirect3DRMFrame3_Release(camera3); + if (FAILED(hr)) + return hr; + + hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport); + IDirect3DRMViewport2_Release(viewport2); + + return hr; } static HRESULT WINAPI d3drm1_CreateWrap(IDirect3DRM *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame, @@ -613,9 +681,18 @@ static HRESULT WINAPI d3drm2_CreateObject(IDirect3DRM2 *iface, static HRESULT WINAPI d3drm2_CreateFrame(IDirect3DRM2 *iface, IDirect3DRMFrame *parent_frame, IDirect3DRMFrame2 **frame) { + struct d3drm *d3drm = impl_from_IDirect3DRM2(iface); + struct d3drm_frame *object; + HRESULT hr; + TRACE("iface %p, parent_frame %p, frame %p.\n", iface, parent_frame, frame); - return Direct3DRMFrame_create(&IID_IDirect3DRMFrame2, (IUnknown*)parent_frame, (IUnknown**)frame); + if (FAILED(hr = d3drm_frame_create(&object, (IUnknown *)parent_frame, &d3drm->IDirect3DRM_iface))) + return hr; + + *frame = &object->IDirect3DRMFrame2_iface; + + return D3DRM_OK; } static HRESULT WINAPI d3drm2_CreateMesh(IDirect3DRM2 *iface, IDirect3DRMMesh **mesh) @@ -713,15 +790,16 @@ static HRESULT WINAPI d3drm2_CreateMaterial(IDirect3DRM2 *iface, static HRESULT WINAPI d3drm2_CreateDevice(IDirect3DRM2 *iface, DWORD width, DWORD height, IDirect3DRMDevice2 **device) { + struct d3drm *d3drm = impl_from_IDirect3DRM2(iface); struct d3drm_device *object; HRESULT hr; + FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device); - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, &d3drm->IDirect3DRM_iface))) return hr; - *device = IDirect3DRMDevice2_from_impl(object); + *device = &object->IDirect3DRMDevice2_iface; return D3DRM_OK; } @@ -752,38 +830,22 @@ static HRESULT WINAPI d3drm2_CreateDeviceFromD3D(IDirect3DRM2 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice2 **device) { struct d3drm *d3drm = impl_from_IDirect3DRM2(iface); - IDirect3D *d3d1; - IDirect3DDevice *d3d_device1; - IDirect3DRMDevice *device1; + IDirect3DRMDevice3 *device3; HRESULT hr; + TRACE("iface %p, d3d %p, d3d_device %p, device %p.\n", iface, d3d, d3d_device, device); if (!device) return D3DRMERR_BADVALUE; *device = NULL; - if (!d3d || !d3d_device) - return D3DRMERR_BADVALUE; - hr = IDirect3D2_QueryInterface(d3d, &IID_IDirect3D, (void **)&d3d1); + hr = IDirect3DRM3_CreateDeviceFromD3D(&d3drm->IDirect3DRM3_iface, d3d, d3d_device, &device3); if (FAILED(hr)) return hr; - hr = IDirect3DDevice2_QueryInterface(d3d_device, &IID_IDirect3DDevice, (void **)&d3d_device1); - if (FAILED(hr)) - { - IDirect3D_Release(d3d1); - return hr; - } - - hr = IDirect3DRM_CreateDeviceFromD3D(&d3drm->IDirect3DRM_iface, d3d1, d3d_device1, &device1); - IDirect3D_Release(d3d1); - IDirect3DDevice_Release(d3d_device1); - if (FAILED(hr)) - return hr; - - hr = IDirect3DRMDevice_QueryInterface(device1, &IID_IDirect3DRMDevice2, (void **)device); - IDirect3DRMDevice_Release(device1); + hr = IDirect3DRMDevice3_QueryInterface(device3, &IID_IDirect3DRMDevice2, (void **)device); + IDirect3DRMDevice3_Release(device3); return hr; } @@ -833,10 +895,39 @@ static HRESULT WINAPI d3drm2_CreateShadow(IDirect3DRM2 *iface, IDirect3DRMVisual static HRESULT WINAPI d3drm2_CreateViewport(IDirect3DRM2 *iface, IDirect3DRMDevice *device, IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport **viewport) { - FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n", - iface, device, camera, x, y, width, height, viewport); + struct d3drm *d3drm = impl_from_IDirect3DRM2(iface); + IDirect3DRMDevice3 *device3; + IDirect3DRMFrame3 *camera3; + IDirect3DRMViewport2 *viewport2; + HRESULT hr; - return Direct3DRMViewport_create(&IID_IDirect3DRMViewport, (IUnknown **)viewport); + TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n", + iface, device, camera, x, y, width, height, viewport); + + if (!device || !camera) + return D3DRMERR_BADOBJECT; + if (!viewport) + return D3DRMERR_BADVALUE; + + if (FAILED(hr = IDirect3DRMDevice_QueryInterface(device, &IID_IDirect3DRMDevice3, (void **)&device3))) + return hr; + + if (FAILED(hr = IDirect3DRMFrame_QueryInterface(camera, &IID_IDirect3DRMFrame3, (void **)&camera3))) + { + IDirect3DRMDevice3_Release(device3); + return hr; + } + + hr = IDirect3DRM3_CreateViewport(&d3drm->IDirect3DRM3_iface, device3, camera3, x, y, width, height, &viewport2); + IDirect3DRMDevice3_Release(device3); + IDirect3DRMFrame3_Release(camera3); + if (FAILED(hr)) + return hr; + + hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMViewport, (void **)viewport); + IDirect3DRMViewport2_Release(viewport2); + + return hr; } static HRESULT WINAPI d3drm2_CreateWrap(IDirect3DRM2 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame *frame, @@ -1067,8 +1158,21 @@ static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface, { struct d3drm *d3drm = impl_from_IDirect3DRM3(iface); IUnknown *object; + unsigned int i; HRESULT hr; + static const struct + { + const CLSID *clsid; + HRESULT (*create_object)(void **object, IDirect3DRM *d3drm); + } + object_table[] = + { + {&CLSID_CDirect3DRMTexture, d3drm_create_texture_object}, + {&CLSID_CDirect3DRMDevice, d3drm_create_device_object}, + {&CLSID_CDirect3DRMViewport, d3drm_create_viewport_object}, + }; + TRACE("iface %p, clsid %s, outer %p, iid %s, out %p.\n", iface, debugstr_guid(clsid), outer, debugstr_guid(iid), out); @@ -1088,17 +1192,19 @@ static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface, return E_NOTIMPL; } - if (IsEqualGUID(clsid, &CLSID_CDirect3DRMTexture)) + for (i = 0; i < ARRAY_SIZE(object_table); ++i) { - struct d3drm_texture *texture; - if (FAILED(hr = d3drm_texture_create(&texture, &d3drm->IDirect3DRM_iface))) + if (IsEqualGUID(clsid, object_table[i].clsid)) { - *out = NULL; - return hr; + if (FAILED(hr = object_table[i].create_object((void **)&object, &d3drm->IDirect3DRM_iface))) + { + *out = NULL; + return hr; + } + break; } - object = (IUnknown *)&texture->IDirect3DRMTexture3_iface; } - else + if (i == ARRAY_SIZE(object_table)) { FIXME("%s not implemented. Returning CLASSFACTORY_E_FIRST.\n", debugstr_guid(clsid)); *out = NULL; @@ -1115,9 +1221,18 @@ static HRESULT WINAPI d3drm3_CreateObject(IDirect3DRM3 *iface, static HRESULT WINAPI d3drm3_CreateFrame(IDirect3DRM3 *iface, IDirect3DRMFrame3 *parent, IDirect3DRMFrame3 **frame) { + struct d3drm *d3drm = impl_from_IDirect3DRM3(iface); + struct d3drm_frame *object; + HRESULT hr; + TRACE("iface %p, parent %p, frame %p.\n", iface, parent, frame); - return Direct3DRMFrame_create(&IID_IDirect3DRMFrame3, (IUnknown *)parent, (IUnknown **)frame); + if (FAILED(hr = d3drm_frame_create(&object, (IUnknown *)parent, &d3drm->IDirect3DRM_iface))) + return hr; + + *frame = &object->IDirect3DRMFrame3_iface; + + return D3DRM_OK; } static HRESULT WINAPI d3drm3_CreateMesh(IDirect3DRM3 *iface, IDirect3DRMMesh **mesh) @@ -1231,15 +1346,16 @@ static HRESULT WINAPI d3drm3_CreateMaterial(IDirect3DRM3 *iface, static HRESULT WINAPI d3drm3_CreateDevice(IDirect3DRM3 *iface, DWORD width, DWORD height, IDirect3DRMDevice3 **device) { + struct d3drm *d3drm = impl_from_IDirect3DRM3(iface); struct d3drm_device *object; HRESULT hr; + FIXME("iface %p, width %u, height %u, device %p partial stub!\n", iface, width, height, device); - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, &d3drm->IDirect3DRM_iface))) return hr; - *device = IDirect3DRMDevice3_from_impl(object); + *device = &object->IDirect3DRMDevice3_iface; return D3DRM_OK; } @@ -1262,15 +1378,13 @@ static HRESULT WINAPI d3drm3_CreateDeviceFromSurface(IDirect3DRM3 *iface, GUID * if (!backbuffer || !ddraw) return D3DRMERR_BADDEVICE; - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, &d3drm->IDirect3DRM_iface))) return hr; use_z_surface = !(flags & D3DRMDEVICE_NOZBUFFER); - hr = d3drm_device_init(object, 3, &d3drm->IDirect3DRM_iface, ddraw, backbuffer, use_z_surface); - if (SUCCEEDED(hr)) - *device = IDirect3DRMDevice3_from_impl(object); + if (SUCCEEDED(hr = d3drm_device_init(object, 3, ddraw, backbuffer, use_z_surface))) + *device = &object->IDirect3DRMDevice3_iface; else d3drm_device_destroy(object); @@ -1281,39 +1395,27 @@ static HRESULT WINAPI d3drm3_CreateDeviceFromD3D(IDirect3DRM3 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device, IDirect3DRMDevice3 **device) { struct d3drm *d3drm = impl_from_IDirect3DRM3(iface); - IDirect3D *d3d1; - IDirect3DDevice *d3d_device1; - IDirect3DRMDevice *device1; + struct d3drm_device *object; HRESULT hr; + TRACE("iface %p, d3d %p, d3d_device %p, device %p.\n", iface, d3d, d3d_device, device); if (!device) return D3DRMERR_BADVALUE; *device = NULL; - if (!d3d || !d3d_device) - return D3DRMERR_BADVALUE; - hr = IDirect3D2_QueryInterface(d3d, &IID_IDirect3D, (void **)&d3d1); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, &d3drm->IDirect3DRM_iface))) return hr; - hr = IDirect3DDevice2_QueryInterface(d3d_device, &IID_IDirect3DDevice, (void **)&d3d_device1); - if (FAILED(hr)) + + if (FAILED(hr = IDirect3DRMDevice3_InitFromD3D2(&object->IDirect3DRMDevice3_iface, d3d, d3d_device))) { - IDirect3D_Release(d3d1); + d3drm_device_destroy(object); return hr; } + *device = &object->IDirect3DRMDevice3_iface; - hr = IDirect3DRM_CreateDeviceFromD3D(&d3drm->IDirect3DRM_iface, d3d1, d3d_device1, &device1); - IDirect3D_Release(d3d1); - IDirect3DDevice_Release(d3d_device1); - if (FAILED(hr)) - return hr; - - hr = IDirect3DRMDevice_QueryInterface(device1, &IID_IDirect3DRMDevice3, (void **)device); - IDirect3DRMDevice_Release(device1); - - return hr; + return D3DRM_OK; } static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface, @@ -1340,8 +1442,7 @@ static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface, if (FAILED(hr)) return hr; - hr = d3drm_device_create(&object); - if (FAILED(hr)) + if (FAILED(hr = d3drm_device_create(&object, &d3drm->IDirect3DRM_iface))) { IDirectDraw_Release(ddraw); return hr; @@ -1355,13 +1456,13 @@ static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface, return hr; } - hr = d3drm_device_init(object, 3, &d3drm->IDirect3DRM_iface, ddraw, render_target, TRUE); + hr = d3drm_device_init(object, 3, ddraw, render_target, TRUE); IDirectDraw_Release(ddraw); IDirectDrawSurface_Release(render_target); if (FAILED(hr)) d3drm_device_destroy(object); else - *device = IDirect3DRMDevice3_from_impl(object); + *device = &object->IDirect3DRMDevice3_iface; return hr; } @@ -1386,10 +1487,31 @@ static HRESULT WINAPI d3drm3_CreateTextureFromSurface(IDirect3DRM3 *iface, static HRESULT WINAPI d3drm3_CreateViewport(IDirect3DRM3 *iface, IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height, IDirect3DRMViewport2 **viewport) { - FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p partial stub!\n", + struct d3drm *d3drm = impl_from_IDirect3DRM3(iface); + struct d3drm_viewport *object; + HRESULT hr; + + TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u, viewport %p.\n", iface, device, camera, x, y, width, height, viewport); - return Direct3DRMViewport_create(&IID_IDirect3DRMViewport2, (IUnknown **)viewport); + if (!device || !camera) + return D3DRMERR_BADOBJECT; + if (!viewport) + return D3DRMERR_BADVALUE; + + if (FAILED(hr = d3drm_viewport_create(&object, &d3drm->IDirect3DRM_iface))) + return hr; + + *viewport = &object->IDirect3DRMViewport2_iface; + + if (FAILED(hr = IDirect3DRMViewport2_Init(*viewport, device, camera, x, y, width, height))) + { + IDirect3DRMViewport2_Release(*viewport); + *viewport = NULL; + return D3DRMERR_BADVALUE; + } + + return D3DRM_OK; } static HRESULT WINAPI d3drm3_CreateWrap(IDirect3DRM3 *iface, D3DRMWRAPTYPE type, IDirect3DRMFrame3 *frame, diff --git a/reactos/dll/directx/wine/d3drm/d3drm_private.h b/reactos/dll/directx/wine/d3drm/d3drm_private.h index 6cdff637d86..908424daf8a 100644 --- a/reactos/dll/directx/wine/d3drm/d3drm_private.h +++ b/reactos/dll/directx/wine/d3drm/d3drm_private.h @@ -28,19 +28,25 @@ #define COBJMACROS #define NONAMELESSUNION +#include + #include #include #include #include #include +#include #include #include WINE_DEFAULT_DEBUG_CHANNEL(d3drm); -#include "wine/list.h" +#include + +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) +#endif -struct d3drm_device; struct d3drm_object { LONG ref; @@ -58,37 +64,89 @@ struct d3drm_texture D3DRMIMAGE *image; }; +struct d3drm_frame +{ + IDirect3DRMFrame IDirect3DRMFrame_iface; + IDirect3DRMFrame2 IDirect3DRMFrame2_iface; + IDirect3DRMFrame3 IDirect3DRMFrame3_iface; + IDirect3DRM *d3drm; + LONG ref; + struct d3drm_frame *parent; + ULONG nb_children; + ULONG children_capacity; + IDirect3DRMFrame3 **children; + ULONG nb_visuals; + ULONG visuals_capacity; + IDirect3DRMVisual **visuals; + ULONG nb_lights; + ULONG lights_capacity; + IDirect3DRMLight **lights; + D3DRMMATRIX4D transform; + D3DCOLOR scenebackground; +}; + +struct d3drm_viewport +{ + struct d3drm_object obj; + struct d3drm_device *device; + IDirect3DRMFrame *camera; + IDirect3DRMViewport IDirect3DRMViewport_iface; + IDirect3DRMViewport2 IDirect3DRMViewport2_iface; + IDirect3DViewport *d3d_viewport; + IDirect3DMaterial *material; + IDirect3DRM *d3drm; + D3DVALUE back; + D3DVALUE front; + D3DVALUE field; + D3DRMPROJECTIONTYPE projection; +}; + +struct d3drm_device +{ + struct d3drm_object obj; + IDirect3DRMDevice IDirect3DRMDevice_iface; + IDirect3DRMDevice2 IDirect3DRMDevice2_iface; + IDirect3DRMDevice3 IDirect3DRMDevice3_iface; + IDirect3DRMWinDevice IDirect3DRMWinDevice_iface; + IDirect3DRM *d3drm; + IDirectDraw *ddraw; + IDirectDrawSurface *primary_surface, *render_target; + IDirectDrawClipper *clipper; + IDirect3DDevice *device; + BOOL dither; + D3DRMRENDERQUALITY quality; + DWORD rendermode; + DWORD height; + DWORD width; +}; + +HRESULT d3drm_device_create(struct d3drm_device **device, IDirect3DRM *d3drm) DECLSPEC_HIDDEN; +HRESULT d3drm_device_create_surfaces_from_clipper(struct d3drm_device *object, IDirectDraw *ddraw, + IDirectDrawClipper *clipper, int width, int height, IDirectDrawSurface **surface) DECLSPEC_HIDDEN; +void d3drm_device_destroy(struct d3drm_device *device) DECLSPEC_HIDDEN; +HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirectDraw *ddraw, + IDirectDrawSurface *surface, BOOL create_z_surface) DECLSPEC_HIDDEN; + void d3drm_object_init(struct d3drm_object *object) DECLSPEC_HIDDEN; HRESULT d3drm_object_add_destroy_callback(struct d3drm_object *object, D3DRMOBJECTCALLBACK cb, void *ctx) DECLSPEC_HIDDEN; HRESULT d3drm_object_delete_destroy_callback(struct d3drm_object *object, D3DRMOBJECTCALLBACK cb, void *ctx) DECLSPEC_HIDDEN; void d3drm_object_cleanup(IDirect3DRMObject *iface, struct d3drm_object *object) DECLSPEC_HIDDEN; -HRESULT d3drm_device_create(struct d3drm_device **out) DECLSPEC_HIDDEN; +struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame(IDirect3DRMFrame *iface) DECLSPEC_HIDDEN; +struct d3drm_device *unsafe_impl_from_IDirect3DRMDevice3(IDirect3DRMDevice3 *iface) DECLSPEC_HIDDEN; + HRESULT d3drm_texture_create(struct d3drm_texture **texture, IDirect3DRM *d3drm) DECLSPEC_HIDDEN; -IDirect3DRMDevice *IDirect3DRMDevice_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN; -IDirect3DRMDevice2 *IDirect3DRMDevice2_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN; -IDirect3DRMDevice3 *IDirect3DRMDevice3_from_impl(struct d3drm_device *device) DECLSPEC_HIDDEN; +HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, IDirect3DRM *d3drm) DECLSPEC_HIDDEN; +HRESULT d3drm_viewport_create(struct d3drm_viewport **viewport, IDirect3DRM *d3drm) DECLSPEC_HIDDEN; HRESULT Direct3DRMFace_create(REFIID riid, IUnknown** ret_iface) DECLSPEC_HIDDEN; -HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown* parent_frame, IUnknown** ret_iface) DECLSPEC_HIDDEN; HRESULT Direct3DRMLight_create(IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMesh_create(IDirect3DRMMesh** obj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMeshBuilder_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN; -HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN; HRESULT Direct3DRMMaterial_create(IDirect3DRMMaterial2** ret_iface) DECLSPEC_HIDDEN; HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *data, D3DRMLOADTEXTURECALLBACK load_texture_proc, void *arg) DECLSPEC_HIDDEN; -void d3drm_device_destroy(struct d3drm_device *device) DECLSPEC_HIDDEN; - -HRESULT d3drm_device_create_surfaces_from_clipper(struct d3drm_device *object, IDirectDraw *ddraw, IDirectDrawClipper *clipper, int width, int height, - IDirectDrawSurface **surface) DECLSPEC_HIDDEN; - -HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirect3DRM *d3drm, IDirectDraw *ddraw, IDirectDrawSurface *surface, - BOOL create_z_surface) DECLSPEC_HIDDEN; - -HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, IDirect3DRM *d3drm, IDirect3D *d3d, IDirect3DDevice *d3d_device) DECLSPEC_HIDDEN; - struct d3drm_file_header { WORD major; diff --git a/reactos/dll/directx/wine/d3drm/device.c b/reactos/dll/directx/wine/d3drm/device.c index 692440b146e..dd49345abb6 100644 --- a/reactos/dll/directx/wine/d3drm/device.c +++ b/reactos/dll/directx/wine/d3drm/device.c @@ -20,27 +20,6 @@ #include "d3drm_private.h" -#include - -struct d3drm_device -{ - IDirect3DRMDevice IDirect3DRMDevice_iface; - IDirect3DRMDevice2 IDirect3DRMDevice2_iface; - IDirect3DRMDevice3 IDirect3DRMDevice3_iface; - IDirect3DRMWinDevice IDirect3DRMWinDevice_iface; - IDirect3DRM *d3drm; - IDirectDraw *ddraw; - IDirectDrawSurface *primary_surface, *render_target; - IDirectDrawClipper *clipper; - IDirect3DDevice *device; - LONG ref; - BOOL dither; - D3DRMRENDERQUALITY quality; - DWORD rendermode; - DWORD height; - DWORD width; -}; - static inline struct d3drm_device *impl_from_IDirect3DRMDevice(IDirect3DRMDevice *iface) { return CONTAINING_RECORD(iface, struct d3drm_device, IDirect3DRMDevice_iface); @@ -56,23 +35,9 @@ static inline struct d3drm_device *impl_from_IDirect3DRMDevice3(IDirect3DRMDevic return CONTAINING_RECORD(iface, struct d3drm_device, IDirect3DRMDevice3_iface); } -IDirect3DRMDevice *IDirect3DRMDevice_from_impl(struct d3drm_device *device) -{ - return &device->IDirect3DRMDevice_iface; -} - -IDirect3DRMDevice2 *IDirect3DRMDevice2_from_impl(struct d3drm_device *device) -{ - return &device->IDirect3DRMDevice2_iface; -} - -IDirect3DRMDevice3 *IDirect3DRMDevice3_from_impl(struct d3drm_device *device) -{ - return &device->IDirect3DRMDevice3_iface; -} - void d3drm_device_destroy(struct d3drm_device *device) { + d3drm_object_cleanup((IDirect3DRMObject *)&device->IDirect3DRMDevice_iface, &device->obj); if (device->device) { TRACE("Releasing attached ddraw interfaces.\n"); @@ -150,7 +115,7 @@ HRESULT d3drm_device_create_surfaces_from_clipper(struct d3drm_device *object, I return D3DRM_OK; } -HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirect3DRM *d3drm, IDirectDraw *ddraw, IDirectDrawSurface *surface, +HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirectDraw *ddraw, IDirectDrawSurface *surface, BOOL create_z_surface) { DDSCAPS caps = { DDSCAPS_ZBUFFER }; @@ -163,8 +128,7 @@ HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirect3DRM device->ddraw = ddraw; IDirectDraw_AddRef(ddraw); - device->d3drm = d3drm; - IDirect3DRM_AddRef(d3drm); + IDirect3DRM_AddRef(device->d3drm); device->render_target = surface; IDirectDrawSurface_AddRef(surface); @@ -228,778 +192,73 @@ HRESULT d3drm_device_init(struct d3drm_device *device, UINT version, IDirect3DRM } } device->device = device1; + device->width = desc.dwWidth; + device->height = desc.dwHeight; return hr; } -HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, IDirect3DRM *d3drm, IDirect3D *d3d, IDirect3DDevice *d3d_device) +static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, IDirect3D *d3d, IDirect3DDevice *d3d_device) { - device->d3drm = d3drm; - IDirect3DRM_AddRef(d3drm); - device->device = d3d_device; + IDirectDraw *ddraw; + IDirectDrawSurface *surface; + IDirect3DDevice2 *d3d_device2; + DDSURFACEDESC desc; + HRESULT hr; + + /* AddRef these interfaces beforehand for the intentional leak on reinitialization. */ + if (FAILED(hr = IDirect3D_QueryInterface(d3d, &IID_IDirectDraw, (void **)&ddraw))) + return hr; + IDirect3DRM_AddRef(device->d3drm); IDirect3DDevice_AddRef(d3d_device); - return IDirect3D_QueryInterface(d3d, &IID_IDirectDraw, (void **)&device->ddraw); + if (device->ddraw) + return D3DRMERR_BADOBJECT; + + /* Fetch render target and get width/height from there */ + if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirectDrawSurface, (void **)&surface))) + { + if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirect3DDevice2, (void **)&d3d_device2))) + return hr; + hr = IDirect3DDevice2_GetRenderTarget(d3d_device2, &surface); + IDirect3DDevice2_Release(d3d_device2); + if (FAILED(hr)) + return hr; + } + + desc.dwSize = sizeof(desc); + hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc); + IDirectDrawSurface_Release(surface); + if (FAILED(hr)) + return hr; + + device->ddraw = ddraw; + device->width = desc.dwWidth; + device->height = desc.dwHeight; + device->device = d3d_device; + + return hr; } -static HRESULT WINAPI d3drm_device1_QueryInterface(IDirect3DRMDevice *iface, REFIID riid, void **out) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - - return IDirect3DRMDevice3_QueryInterface(&device->IDirect3DRMDevice3_iface, riid, out); -} - -static ULONG WINAPI d3drm_device1_AddRef(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_AddRef(&device->IDirect3DRMDevice3_iface); -} - -static ULONG WINAPI d3drm_device1_Release(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_Release(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device1_Clone(IDirect3DRMDevice *iface, - IUnknown *outer, REFIID iid, void **out) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, outer %p, iid %s, out %p.\n", iface, outer, debugstr_guid(iid), out); - - return IDirect3DRMDevice3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); -} - -static HRESULT WINAPI d3drm_device1_AddDestroyCallback(IDirect3DRMDevice *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device1_DeleteDestroyCallback(IDirect3DRMDevice *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device1_SetAppData(IDirect3DRMDevice *iface, DWORD data) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, data %#x.\n", iface, data); - - return IDirect3DRMDevice3_SetAppData(&device->IDirect3DRMDevice3_iface, data); -} - -static DWORD WINAPI d3drm_device1_GetAppData(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetAppData(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device1_SetName(IDirect3DRMDevice *iface, const char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); - - return IDirect3DRMDevice3_SetName(&device->IDirect3DRMDevice3_iface, name); -} - -static HRESULT WINAPI d3drm_device1_GetName(IDirect3DRMDevice *iface, DWORD *size, char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMDevice3_GetName(&device->IDirect3DRMDevice3_iface, size, name); -} - -static HRESULT WINAPI d3drm_device1_GetClassName(IDirect3DRMDevice *iface, DWORD *size, char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMDevice3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); -} - -static HRESULT WINAPI d3drm_device1_Init(IDirect3DRMDevice *iface, ULONG width, ULONG height) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, width %u, height %u.\n", iface, width, height); - - return IDirect3DRMDevice3_Init(&device->IDirect3DRMDevice3_iface, width, height); -} - -static HRESULT WINAPI d3drm_device1_InitFromD3D(IDirect3DRMDevice *iface, - IDirect3D *d3d, IDirect3DDevice *d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); - - return IDirect3DRMDevice3_InitFromD3D(&device->IDirect3DRMDevice3_iface, d3d, d3d_device); -} - -static HRESULT WINAPI d3drm_device1_InitFromClipper(IDirect3DRMDevice *iface, - IDirectDrawClipper *clipper, GUID *guid, int width, int height) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, clipper %p, guid %s, width %d, height %d.\n", - iface, clipper, debugstr_guid(guid), width, height); - - return IDirect3DRMDevice3_InitFromClipper(&device->IDirect3DRMDevice3_iface, - clipper, guid, width, height); -} - -static HRESULT WINAPI d3drm_device1_Update(IDirect3DRMDevice *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_device1_AddUpdateCallback(IDirect3DRMDevice *iface, - D3DRMUPDATECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device1_DeleteUpdateCallback(IDirect3DRMDevice *iface, - D3DRMUPDATECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device1_SetBufferCount(IDirect3DRMDevice *iface, DWORD count) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, count %u.\n", iface, count); - - return IDirect3DRMDevice3_SetBufferCount(&device->IDirect3DRMDevice3_iface, count); -} - -static DWORD WINAPI d3drm_device1_GetBufferCount(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetBufferCount(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device1_SetDither(IDirect3DRMDevice *iface, BOOL enable) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, enabled %#x.\n", iface, enable); - - return IDirect3DRMDevice3_SetDither(&device->IDirect3DRMDevice3_iface, enable); -} - -static HRESULT WINAPI d3drm_device1_SetShades(IDirect3DRMDevice *iface, DWORD count) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, count %u.\n", iface, count); - - return IDirect3DRMDevice3_SetShades(&device->IDirect3DRMDevice3_iface, count); -} - -static HRESULT WINAPI d3drm_device1_SetQuality(IDirect3DRMDevice *iface, D3DRMRENDERQUALITY quality) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, quality %u.\n", iface, quality); - - return IDirect3DRMDevice3_SetQuality(&device->IDirect3DRMDevice3_iface, quality); -} - -static HRESULT WINAPI d3drm_device1_SetTextureQuality(IDirect3DRMDevice *iface, D3DRMTEXTUREQUALITY quality) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, quality %u.\n", iface, quality); - - return IDirect3DRMDevice3_SetTextureQuality(&device->IDirect3DRMDevice3_iface, quality); -} - -static HRESULT WINAPI d3drm_device1_GetViewports(IDirect3DRMDevice *iface, IDirect3DRMViewportArray **array) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, array %p.\n", iface, array); - - return IDirect3DRMDevice3_GetViewports(&device->IDirect3DRMDevice3_iface, array); -} - -static BOOL WINAPI d3drm_device1_GetDither(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetDither(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device1_GetShades(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetShades(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device1_GetHeight(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetHeight(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device1_GetWidth(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetWidth(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device1_GetTrianglesDrawn(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetTrianglesDrawn(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device1_GetWireframeOptions(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetWireframeOptions(&device->IDirect3DRMDevice3_iface); -} - -static D3DRMRENDERQUALITY WINAPI d3drm_device1_GetQuality(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetQuality(&device->IDirect3DRMDevice3_iface); -} - -static D3DCOLORMODEL WINAPI d3drm_device1_GetColorModel(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p stub!\n", iface); - - return IDirect3DRMDevice3_GetColorModel(&device->IDirect3DRMDevice3_iface); -} - -static D3DRMTEXTUREQUALITY WINAPI d3drm_device1_GetTextureQuality(IDirect3DRMDevice *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetTextureQuality(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device1_GetDirect3DDevice(IDirect3DRMDevice *iface, IDirect3DDevice **d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); - - TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); - - return IDirect3DRMDevice3_GetDirect3DDevice(&device->IDirect3DRMDevice3_iface, d3d_device); -} - -static const struct IDirect3DRMDeviceVtbl d3drm_device1_vtbl = -{ - d3drm_device1_QueryInterface, - d3drm_device1_AddRef, - d3drm_device1_Release, - d3drm_device1_Clone, - d3drm_device1_AddDestroyCallback, - d3drm_device1_DeleteDestroyCallback, - d3drm_device1_SetAppData, - d3drm_device1_GetAppData, - d3drm_device1_SetName, - d3drm_device1_GetName, - d3drm_device1_GetClassName, - d3drm_device1_Init, - d3drm_device1_InitFromD3D, - d3drm_device1_InitFromClipper, - d3drm_device1_Update, - d3drm_device1_AddUpdateCallback, - d3drm_device1_DeleteUpdateCallback, - d3drm_device1_SetBufferCount, - d3drm_device1_GetBufferCount, - d3drm_device1_SetDither, - d3drm_device1_SetShades, - d3drm_device1_SetQuality, - d3drm_device1_SetTextureQuality, - d3drm_device1_GetViewports, - d3drm_device1_GetDither, - d3drm_device1_GetShades, - d3drm_device1_GetHeight, - d3drm_device1_GetWidth, - d3drm_device1_GetTrianglesDrawn, - d3drm_device1_GetWireframeOptions, - d3drm_device1_GetQuality, - d3drm_device1_GetColorModel, - d3drm_device1_GetTextureQuality, - d3drm_device1_GetDirect3DDevice, -}; - -static HRESULT WINAPI d3drm_device2_QueryInterface(IDirect3DRMDevice2 *iface, REFIID riid, void **out) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - - return IDirect3DRMDevice3_QueryInterface(&device->IDirect3DRMDevice3_iface, riid, out); -} - -static ULONG WINAPI d3drm_device2_AddRef(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_AddRef(&device->IDirect3DRMDevice3_iface); -} - -static ULONG WINAPI d3drm_device2_Release(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_Release(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device2_Clone(IDirect3DRMDevice2 *iface, - IUnknown *outer, REFIID iid, void **out) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, outer %p, iid %s, out %p\n", iface, outer, debugstr_guid(iid), out); - - return IDirect3DRMDevice3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); -} - -static HRESULT WINAPI d3drm_device2_AddDestroyCallback(IDirect3DRMDevice2 *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device2_DeleteDestroyCallback(IDirect3DRMDevice2 *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device2_SetAppData(IDirect3DRMDevice2 *iface, DWORD data) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, data %#x.\n", iface, data); - - return IDirect3DRMDevice3_SetAppData(&device->IDirect3DRMDevice3_iface, data); -} - -static DWORD WINAPI d3drm_device2_GetAppData(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetAppData(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device2_SetName(IDirect3DRMDevice2 *iface, const char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); - - return IDirect3DRMDevice3_SetName(&device->IDirect3DRMDevice3_iface, name); -} - -static HRESULT WINAPI d3drm_device2_GetName(IDirect3DRMDevice2 *iface, DWORD *size, char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMDevice3_GetName(&device->IDirect3DRMDevice3_iface, size, name); -} - -static HRESULT WINAPI d3drm_device2_GetClassName(IDirect3DRMDevice2 *iface, DWORD *size, char *name) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMDevice3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); -} - -static HRESULT WINAPI d3drm_device2_Init(IDirect3DRMDevice2 *iface, ULONG width, ULONG height) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, width %u, height %u.\n", iface, width, height); - - return IDirect3DRMDevice3_Init(&device->IDirect3DRMDevice3_iface, width, height); -} - -static HRESULT WINAPI d3drm_device2_InitFromD3D(IDirect3DRMDevice2 *iface, - IDirect3D *d3d, IDirect3DDevice *d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); - - return IDirect3DRMDevice3_InitFromD3D(&device->IDirect3DRMDevice3_iface, d3d, d3d_device); -} - -static HRESULT WINAPI d3drm_device2_InitFromClipper(IDirect3DRMDevice2 *iface, - IDirectDrawClipper *clipper, GUID *guid, int width, int height) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, clipper %p, guid %s, width %d, height %d.\n", - iface, clipper, debugstr_guid(guid), width, height); - - return IDirect3DRMDevice3_InitFromClipper(&device->IDirect3DRMDevice3_iface, - clipper, guid, width, height); -} - -static HRESULT WINAPI d3drm_device2_Update(IDirect3DRMDevice2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_device2_AddUpdateCallback(IDirect3DRMDevice2 *iface, - D3DRMUPDATECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device2_DeleteUpdateCallback(IDirect3DRMDevice2 *iface, - D3DRMUPDATECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_device2_SetBufferCount(IDirect3DRMDevice2 *iface, DWORD count) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, count %u.\n", iface, count); - - return IDirect3DRMDevice3_SetBufferCount(&device->IDirect3DRMDevice3_iface, count); -} - -static DWORD WINAPI d3drm_device2_GetBufferCount(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetBufferCount(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device2_SetDither(IDirect3DRMDevice2 *iface, BOOL enable) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, enabled %#x.\n", iface, enable); - - return IDirect3DRMDevice3_SetDither(&device->IDirect3DRMDevice3_iface, enable); -} - -static HRESULT WINAPI d3drm_device2_SetShades(IDirect3DRMDevice2 *iface, DWORD count) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, count %u.\n", iface, count); - - return IDirect3DRMDevice3_SetShades(&device->IDirect3DRMDevice3_iface, count); -} - -static HRESULT WINAPI d3drm_device2_SetQuality(IDirect3DRMDevice2 *iface, D3DRMRENDERQUALITY quality) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, quality %u.\n", iface, quality); - - return IDirect3DRMDevice3_SetQuality(&device->IDirect3DRMDevice3_iface, quality); -} - -static HRESULT WINAPI d3drm_device2_SetTextureQuality(IDirect3DRMDevice2 *iface, D3DRMTEXTUREQUALITY quality) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, quality %u.\n", iface, quality); - - return IDirect3DRMDevice3_SetTextureQuality(&device->IDirect3DRMDevice3_iface, quality); -} - -static HRESULT WINAPI d3drm_device2_GetViewports(IDirect3DRMDevice2 *iface, IDirect3DRMViewportArray **array) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, array %p.\n", iface, array); - - return IDirect3DRMDevice3_GetViewports(&device->IDirect3DRMDevice3_iface, array); -} - -static BOOL WINAPI d3drm_device2_GetDither(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetDither(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device2_GetShades(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetShades(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device2_GetHeight(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetHeight(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device2_GetWidth(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetWidth(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device2_GetTrianglesDrawn(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetTrianglesDrawn(&device->IDirect3DRMDevice3_iface); -} - -static DWORD WINAPI d3drm_device2_GetWireframeOptions(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetWireframeOptions(&device->IDirect3DRMDevice3_iface); -} - -static D3DRMRENDERQUALITY WINAPI d3drm_device2_GetQuality(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetQuality(&device->IDirect3DRMDevice3_iface); -} - -static D3DCOLORMODEL WINAPI d3drm_device2_GetColorModel(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetColorModel(&device->IDirect3DRMDevice3_iface); -} - -static D3DRMTEXTUREQUALITY WINAPI d3drm_device2_GetTextureQuality(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetTextureQuality(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device2_GetDirect3DDevice(IDirect3DRMDevice2 *iface, IDirect3DDevice **d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); - - return IDirect3DRMDevice3_GetDirect3DDevice(&device->IDirect3DRMDevice3_iface, d3d_device); -} - -static HRESULT WINAPI d3drm_device2_InitFromD3D2(IDirect3DRMDevice2 *iface, - IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); - - return IDirect3DRMDevice3_InitFromD3D2(&device->IDirect3DRMDevice3_iface, d3d, d3d_device); -} - -static HRESULT WINAPI d3drm_device2_InitFromSurface(IDirect3DRMDevice2 *iface, - GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, guid %s, ddraw %p, backbuffer %p.\n", - iface, debugstr_guid(guid), ddraw, backbuffer); - - return IDirect3DRMDevice3_InitFromSurface(&device->IDirect3DRMDevice3_iface, guid, ddraw, backbuffer); -} - -static HRESULT WINAPI d3drm_device2_SetRenderMode(IDirect3DRMDevice2 *iface, DWORD flags) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, flags %#x.\n", iface, flags); - - return IDirect3DRMDevice3_SetRenderMode(&device->IDirect3DRMDevice3_iface, flags); -} - -static DWORD WINAPI d3drm_device2_GetRenderMode(IDirect3DRMDevice2 *iface) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMDevice3_GetRenderMode(&device->IDirect3DRMDevice3_iface); -} - -static HRESULT WINAPI d3drm_device2_GetDirect3DDevice2(IDirect3DRMDevice2 *iface, IDirect3DDevice2 **d3d_device) -{ - struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); - - TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); - - return IDirect3DRMDevice3_GetDirect3DDevice2(&device->IDirect3DRMDevice3_iface, d3d_device); -} - -static const struct IDirect3DRMDevice2Vtbl d3drm_device2_vtbl = -{ - d3drm_device2_QueryInterface, - d3drm_device2_AddRef, - d3drm_device2_Release, - d3drm_device2_Clone, - d3drm_device2_AddDestroyCallback, - d3drm_device2_DeleteDestroyCallback, - d3drm_device2_SetAppData, - d3drm_device2_GetAppData, - d3drm_device2_SetName, - d3drm_device2_GetName, - d3drm_device2_GetClassName, - d3drm_device2_Init, - d3drm_device2_InitFromD3D, - d3drm_device2_InitFromClipper, - d3drm_device2_Update, - d3drm_device2_AddUpdateCallback, - d3drm_device2_DeleteUpdateCallback, - d3drm_device2_SetBufferCount, - d3drm_device2_GetBufferCount, - d3drm_device2_SetDither, - d3drm_device2_SetShades, - d3drm_device2_SetQuality, - d3drm_device2_SetTextureQuality, - d3drm_device2_GetViewports, - d3drm_device2_GetDither, - d3drm_device2_GetShades, - d3drm_device2_GetHeight, - d3drm_device2_GetWidth, - d3drm_device2_GetTrianglesDrawn, - d3drm_device2_GetWireframeOptions, - d3drm_device2_GetQuality, - d3drm_device2_GetColorModel, - d3drm_device2_GetTextureQuality, - d3drm_device2_GetDirect3DDevice, - d3drm_device2_InitFromD3D2, - d3drm_device2_InitFromSurface, - d3drm_device2_SetRenderMode, - d3drm_device2_GetRenderMode, - d3drm_device2_GetDirect3DDevice2, -}; - static HRESULT WINAPI d3drm_device3_QueryInterface(IDirect3DRMDevice3 *iface, REFIID riid, void **out) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - if (IsEqualGUID(riid, &IID_IDirect3DRMDevice3) + if (IsEqualGUID(riid, &IID_IDirect3DRMDevice) || IsEqualGUID(riid, &IID_IDirect3DRMObject) || IsEqualGUID(riid, &IID_IUnknown)) { - *out = &device->IDirect3DRMDevice3_iface; + *out = &device->IDirect3DRMDevice_iface; } else if (IsEqualGUID(riid, &IID_IDirect3DRMDevice2)) { *out = &device->IDirect3DRMDevice2_iface; } - else if (IsEqualGUID(riid, &IID_IDirect3DRMDevice)) + else if (IsEqualGUID(riid, &IID_IDirect3DRMDevice3)) { - *out = &device->IDirect3DRMDevice_iface; + *out = &device->IDirect3DRMDevice3_iface; } else if (IsEqualGUID(riid, &IID_IDirect3DRMWinDevice)) { @@ -1016,20 +275,56 @@ static HRESULT WINAPI d3drm_device3_QueryInterface(IDirect3DRMDevice3 *iface, RE return S_OK; } +static HRESULT WINAPI d3drm_device2_QueryInterface(IDirect3DRMDevice2 *iface, REFIID riid, void **out) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); + + return d3drm_device3_QueryInterface(&device->IDirect3DRMDevice3_iface, riid, out); +} + +static HRESULT WINAPI d3drm_device1_QueryInterface(IDirect3DRMDevice *iface, REFIID riid, void **out) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); + + return d3drm_device3_QueryInterface(&device->IDirect3DRMDevice3_iface, riid, out); +} + static ULONG WINAPI d3drm_device3_AddRef(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); - ULONG refcount = InterlockedIncrement(&device->ref); + ULONG refcount = InterlockedIncrement(&device->obj.ref); TRACE("%p increasing refcount to %u.\n", iface, refcount); return refcount; } +static ULONG WINAPI d3drm_device2_AddRef(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_AddRef(&device->IDirect3DRMDevice3_iface); +} + +static ULONG WINAPI d3drm_device1_AddRef(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_AddRef(&device->IDirect3DRMDevice3_iface); +} + static ULONG WINAPI d3drm_device3_Release(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); - ULONG refcount = InterlockedDecrement(&device->ref); + ULONG refcount = InterlockedDecrement(&device->obj.ref); TRACE("%p decreasing refcount to %u.\n", iface, refcount); @@ -1039,6 +334,24 @@ static ULONG WINAPI d3drm_device3_Release(IDirect3DRMDevice3 *iface) return refcount; } +static ULONG WINAPI d3drm_device2_Release(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_Release(&device->IDirect3DRMDevice3_iface); +} + +static ULONG WINAPI d3drm_device1_Release(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_Release(&device->IDirect3DRMDevice3_iface); +} + static HRESULT WINAPI d3drm_device3_Clone(IDirect3DRMDevice3 *iface, IUnknown *outer, REFIID iid, void **out) { @@ -1047,20 +360,84 @@ static HRESULT WINAPI d3drm_device3_Clone(IDirect3DRMDevice3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_Clone(IDirect3DRMDevice2 *iface, + IUnknown *outer, REFIID iid, void **out) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, outer %p, iid %s, out %p\n", iface, outer, debugstr_guid(iid), out); + + return d3drm_device3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); +} + +static HRESULT WINAPI d3drm_device1_Clone(IDirect3DRMDevice *iface, + IUnknown *outer, REFIID iid, void **out) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, outer %p, iid %s, out %p.\n", iface, outer, debugstr_guid(iid), out); + + return d3drm_device3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); +} + static HRESULT WINAPI d3drm_device3_AddDestroyCallback(IDirect3DRMDevice3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx) { - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); - return E_NOTIMPL; + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_object_add_destroy_callback(&device->obj, cb, ctx); +} + +static HRESULT WINAPI d3drm_device2_AddDestroyCallback(IDirect3DRMDevice2 *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_device3_AddDestroyCallback(&device->IDirect3DRMDevice3_iface, cb, ctx); +} + +static HRESULT WINAPI d3drm_device1_AddDestroyCallback(IDirect3DRMDevice *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_device3_AddDestroyCallback(&device->IDirect3DRMDevice3_iface, cb, ctx); } static HRESULT WINAPI d3drm_device3_DeleteDestroyCallback(IDirect3DRMDevice3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx) { - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); - return E_NOTIMPL; + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_object_delete_destroy_callback(&device->obj, cb, ctx); +} + +static HRESULT WINAPI d3drm_device2_DeleteDestroyCallback(IDirect3DRMDevice2 *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_device3_DeleteDestroyCallback(&device->IDirect3DRMDevice3_iface, cb, ctx); +} + +static HRESULT WINAPI d3drm_device1_DeleteDestroyCallback(IDirect3DRMDevice *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, cb %p, ctx %p.\n", iface, cb, ctx); + + return d3drm_device3_DeleteDestroyCallback(&device->IDirect3DRMDevice3_iface, cb, ctx); } static HRESULT WINAPI d3drm_device3_SetAppData(IDirect3DRMDevice3 *iface, DWORD data) @@ -1070,6 +447,24 @@ static HRESULT WINAPI d3drm_device3_SetAppData(IDirect3DRMDevice3 *iface, DWORD return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_SetAppData(IDirect3DRMDevice2 *iface, DWORD data) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, data %#x.\n", iface, data); + + return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); +} + +static HRESULT WINAPI d3drm_device1_SetAppData(IDirect3DRMDevice *iface, DWORD data) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, data %#x.\n", iface, data); + + return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); +} + static DWORD WINAPI d3drm_device3_GetAppData(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1077,6 +472,24 @@ static DWORD WINAPI d3drm_device3_GetAppData(IDirect3DRMDevice3 *iface) return 0; } +static DWORD WINAPI d3drm_device2_GetAppData(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetAppData(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetAppData(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetAppData(&device->IDirect3DRMDevice3_iface); +} + static HRESULT WINAPI d3drm_device3_SetName(IDirect3DRMDevice3 *iface, const char *name) { FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); @@ -1084,6 +497,24 @@ static HRESULT WINAPI d3drm_device3_SetName(IDirect3DRMDevice3 *iface, const cha return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_SetName(IDirect3DRMDevice2 *iface, const char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); + + return d3drm_device3_SetName(&device->IDirect3DRMDevice3_iface, name); +} + +static HRESULT WINAPI d3drm_device1_SetName(IDirect3DRMDevice *iface, const char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); + + return d3drm_device3_SetName(&device->IDirect3DRMDevice3_iface, name); +} + static HRESULT WINAPI d3drm_device3_GetName(IDirect3DRMDevice3 *iface, DWORD *size, char *name) { FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); @@ -1091,6 +522,24 @@ static HRESULT WINAPI d3drm_device3_GetName(IDirect3DRMDevice3 *iface, DWORD *si return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_GetName(IDirect3DRMDevice2 *iface, DWORD *size, char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_device3_GetName(&device->IDirect3DRMDevice3_iface, size, name); +} + +static HRESULT WINAPI d3drm_device1_GetName(IDirect3DRMDevice *iface, DWORD *size, char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_device3_GetName(&device->IDirect3DRMDevice3_iface, size, name); +} + static HRESULT WINAPI d3drm_device3_GetClassName(IDirect3DRMDevice3 *iface, DWORD *size, char *name) { TRACE("iface %p, size %p, name %p.\n", iface, size, name); @@ -1104,6 +553,24 @@ static HRESULT WINAPI d3drm_device3_GetClassName(IDirect3DRMDevice3 *iface, DWOR return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_GetClassName(IDirect3DRMDevice2 *iface, DWORD *size, char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_device3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); +} + +static HRESULT WINAPI d3drm_device1_GetClassName(IDirect3DRMDevice *iface, DWORD *size, char *name) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_device3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); +} + static HRESULT WINAPI d3drm_device3_Init(IDirect3DRMDevice3 *iface, ULONG width, ULONG height) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1116,12 +583,56 @@ static HRESULT WINAPI d3drm_device3_Init(IDirect3DRMDevice3 *iface, ULONG width, return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_Init(IDirect3DRMDevice2 *iface, ULONG width, ULONG height) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, width %u, height %u.\n", iface, width, height); + + return d3drm_device3_Init(&device->IDirect3DRMDevice3_iface, width, height); +} + +static HRESULT WINAPI d3drm_device1_Init(IDirect3DRMDevice *iface, ULONG width, ULONG height) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, width %u, height %u.\n", iface, width, height); + + return d3drm_device3_Init(&device->IDirect3DRMDevice3_iface, width, height); +} + static HRESULT WINAPI d3drm_device3_InitFromD3D(IDirect3DRMDevice3 *iface, IDirect3D *d3d, IDirect3DDevice *d3d_device) { FIXME("iface %p, d3d %p, d3d_device %p stub!\n", iface, d3d, d3d_device); - return E_NOTIMPL; + if (!d3d || !d3d_device) + return D3DRMERR_BADVALUE; + + return E_NOINTERFACE; +} + +static HRESULT WINAPI d3drm_device2_InitFromD3D(IDirect3DRMDevice2 *iface, + IDirect3D *d3d, IDirect3DDevice *d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); + + return d3drm_device3_InitFromD3D(&device->IDirect3DRMDevice3_iface, d3d, d3d_device); +} + +static HRESULT WINAPI d3drm_device1_InitFromD3D(IDirect3DRMDevice *iface, + IDirect3D *d3d, IDirect3DDevice *d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); + + if (!d3d || !d3d_device) + return D3DRMERR_BADVALUE; + + return d3drm_device_set_ddraw_device_d3d(device, d3d, d3d_device); } static HRESULT WINAPI d3drm_device3_InitFromClipper(IDirect3DRMDevice3 *iface, @@ -1138,6 +649,30 @@ static HRESULT WINAPI d3drm_device3_InitFromClipper(IDirect3DRMDevice3 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_InitFromClipper(IDirect3DRMDevice2 *iface, + IDirectDrawClipper *clipper, GUID *guid, int width, int height) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, clipper %p, guid %s, width %d, height %d.\n", + iface, clipper, debugstr_guid(guid), width, height); + + return d3drm_device3_InitFromClipper(&device->IDirect3DRMDevice3_iface, + clipper, guid, width, height); +} + +static HRESULT WINAPI d3drm_device1_InitFromClipper(IDirect3DRMDevice *iface, + IDirectDrawClipper *clipper, GUID *guid, int width, int height) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, clipper %p, guid %s, width %d, height %d.\n", + iface, clipper, debugstr_guid(guid), width, height); + + return d3drm_device3_InitFromClipper(&device->IDirect3DRMDevice3_iface, + clipper, guid, width, height); +} + static HRESULT WINAPI d3drm_device3_Update(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1145,6 +680,20 @@ static HRESULT WINAPI d3drm_device3_Update(IDirect3DRMDevice3 *iface) return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_Update(IDirect3DRMDevice2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_device1_Update(IDirect3DRMDevice *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRM_OK; +} + static HRESULT WINAPI d3drm_device3_AddUpdateCallback(IDirect3DRMDevice3 *iface, D3DRMUPDATECALLBACK cb, void *ctx) { @@ -1153,6 +702,22 @@ static HRESULT WINAPI d3drm_device3_AddUpdateCallback(IDirect3DRMDevice3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_AddUpdateCallback(IDirect3DRMDevice2 *iface, + D3DRMUPDATECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_device1_AddUpdateCallback(IDirect3DRMDevice *iface, + D3DRMUPDATECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_device3_DeleteUpdateCallback(IDirect3DRMDevice3 *iface, D3DRMUPDATECALLBACK cb, void *ctx) { @@ -1161,6 +726,22 @@ static HRESULT WINAPI d3drm_device3_DeleteUpdateCallback(IDirect3DRMDevice3 *ifa return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_DeleteUpdateCallback(IDirect3DRMDevice2 *iface, + D3DRMUPDATECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_device1_DeleteUpdateCallback(IDirect3DRMDevice *iface, + D3DRMUPDATECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_device3_SetBufferCount(IDirect3DRMDevice3 *iface, DWORD count) { FIXME("iface %p, count %u stub!\n", iface, count); @@ -1168,6 +749,24 @@ static HRESULT WINAPI d3drm_device3_SetBufferCount(IDirect3DRMDevice3 *iface, DW return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_SetBufferCount(IDirect3DRMDevice2 *iface, DWORD count) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, count %u.\n", iface, count); + + return d3drm_device3_SetBufferCount(&device->IDirect3DRMDevice3_iface, count); +} + +static HRESULT WINAPI d3drm_device1_SetBufferCount(IDirect3DRMDevice *iface, DWORD count) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, count %u.\n", iface, count); + + return d3drm_device3_SetBufferCount(&device->IDirect3DRMDevice3_iface, count); +} + static DWORD WINAPI d3drm_device3_GetBufferCount(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1175,6 +774,24 @@ static DWORD WINAPI d3drm_device3_GetBufferCount(IDirect3DRMDevice3 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_device2_GetBufferCount(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetBufferCount(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetBufferCount(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetBufferCount(&device->IDirect3DRMDevice3_iface); +} + static HRESULT WINAPI d3drm_device3_SetDither(IDirect3DRMDevice3 *iface, BOOL enable) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1186,6 +803,24 @@ static HRESULT WINAPI d3drm_device3_SetDither(IDirect3DRMDevice3 *iface, BOOL en return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_SetDither(IDirect3DRMDevice2 *iface, BOOL enable) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, enabled %#x.\n", iface, enable); + + return d3drm_device3_SetDither(&device->IDirect3DRMDevice3_iface, enable); +} + +static HRESULT WINAPI d3drm_device1_SetDither(IDirect3DRMDevice *iface, BOOL enable) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, enabled %#x.\n", iface, enable); + + return d3drm_device3_SetDither(&device->IDirect3DRMDevice3_iface, enable); +} + static HRESULT WINAPI d3drm_device3_SetShades(IDirect3DRMDevice3 *iface, DWORD count) { FIXME("iface %p, count %u stub!\n", iface, count); @@ -1193,6 +828,24 @@ static HRESULT WINAPI d3drm_device3_SetShades(IDirect3DRMDevice3 *iface, DWORD c return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_SetShades(IDirect3DRMDevice2 *iface, DWORD count) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, count %u.\n", iface, count); + + return d3drm_device3_SetShades(&device->IDirect3DRMDevice3_iface, count); +} + +static HRESULT WINAPI d3drm_device1_SetShades(IDirect3DRMDevice *iface, DWORD count) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, count %u.\n", iface, count); + + return d3drm_device3_SetShades(&device->IDirect3DRMDevice3_iface, count); +} + static HRESULT WINAPI d3drm_device3_SetQuality(IDirect3DRMDevice3 *iface, D3DRMRENDERQUALITY quality) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1204,6 +857,24 @@ static HRESULT WINAPI d3drm_device3_SetQuality(IDirect3DRMDevice3 *iface, D3DRMR return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_SetQuality(IDirect3DRMDevice2 *iface, D3DRMRENDERQUALITY quality) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, quality %u.\n", iface, quality); + + return d3drm_device3_SetQuality(&device->IDirect3DRMDevice3_iface, quality); +} + +static HRESULT WINAPI d3drm_device1_SetQuality(IDirect3DRMDevice *iface, D3DRMRENDERQUALITY quality) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, quality %u.\n", iface, quality); + + return d3drm_device3_SetQuality(&device->IDirect3DRMDevice3_iface, quality); +} + static HRESULT WINAPI d3drm_device3_SetTextureQuality(IDirect3DRMDevice3 *iface, D3DRMTEXTUREQUALITY quality) { FIXME("iface %p, quality %u stub!\n", iface, quality); @@ -1211,6 +882,24 @@ static HRESULT WINAPI d3drm_device3_SetTextureQuality(IDirect3DRMDevice3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_SetTextureQuality(IDirect3DRMDevice2 *iface, D3DRMTEXTUREQUALITY quality) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, quality %u.\n", iface, quality); + + return d3drm_device3_SetTextureQuality(&device->IDirect3DRMDevice3_iface, quality); +} + +static HRESULT WINAPI d3drm_device1_SetTextureQuality(IDirect3DRMDevice *iface, D3DRMTEXTUREQUALITY quality) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, quality %u.\n", iface, quality); + + return d3drm_device3_SetTextureQuality(&device->IDirect3DRMDevice3_iface, quality); +} + static HRESULT WINAPI d3drm_device3_GetViewports(IDirect3DRMDevice3 *iface, IDirect3DRMViewportArray **array) { FIXME("iface %p, array %p stub!\n", iface, array); @@ -1218,6 +907,24 @@ static HRESULT WINAPI d3drm_device3_GetViewports(IDirect3DRMDevice3 *iface, IDir return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_GetViewports(IDirect3DRMDevice2 *iface, IDirect3DRMViewportArray **array) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, array %p.\n", iface, array); + + return d3drm_device3_GetViewports(&device->IDirect3DRMDevice3_iface, array); +} + +static HRESULT WINAPI d3drm_device1_GetViewports(IDirect3DRMDevice *iface, IDirect3DRMViewportArray **array) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, array %p.\n", iface, array); + + return d3drm_device3_GetViewports(&device->IDirect3DRMDevice3_iface, array); +} + static BOOL WINAPI d3drm_device3_GetDither(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1227,6 +934,24 @@ static BOOL WINAPI d3drm_device3_GetDither(IDirect3DRMDevice3 *iface) return device->dither; } +static BOOL WINAPI d3drm_device2_GetDither(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetDither(&device->IDirect3DRMDevice3_iface); +} + +static BOOL WINAPI d3drm_device1_GetDither(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetDither(&device->IDirect3DRMDevice3_iface); +} + static DWORD WINAPI d3drm_device3_GetShades(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1234,6 +959,24 @@ static DWORD WINAPI d3drm_device3_GetShades(IDirect3DRMDevice3 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_device2_GetShades(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetShades(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetShades(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetShades(&device->IDirect3DRMDevice3_iface); +} + static DWORD WINAPI d3drm_device3_GetHeight(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1243,6 +986,24 @@ static DWORD WINAPI d3drm_device3_GetHeight(IDirect3DRMDevice3 *iface) return device->height; } +static DWORD WINAPI d3drm_device2_GetHeight(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetHeight(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetHeight(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetHeight(&device->IDirect3DRMDevice3_iface); +} + static DWORD WINAPI d3drm_device3_GetWidth(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1252,6 +1013,24 @@ static DWORD WINAPI d3drm_device3_GetWidth(IDirect3DRMDevice3 *iface) return device->width; } +static DWORD WINAPI d3drm_device2_GetWidth(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetWidth(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetWidth(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetWidth(&device->IDirect3DRMDevice3_iface); +} + static DWORD WINAPI d3drm_device3_GetTrianglesDrawn(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1259,6 +1038,24 @@ static DWORD WINAPI d3drm_device3_GetTrianglesDrawn(IDirect3DRMDevice3 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_device2_GetTrianglesDrawn(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetTrianglesDrawn(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetTrianglesDrawn(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetTrianglesDrawn(&device->IDirect3DRMDevice3_iface); +} + static DWORD WINAPI d3drm_device3_GetWireframeOptions(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1266,6 +1063,24 @@ static DWORD WINAPI d3drm_device3_GetWireframeOptions(IDirect3DRMDevice3 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_device2_GetWireframeOptions(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetWireframeOptions(&device->IDirect3DRMDevice3_iface); +} + +static DWORD WINAPI d3drm_device1_GetWireframeOptions(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetWireframeOptions(&device->IDirect3DRMDevice3_iface); +} + static D3DRMRENDERQUALITY WINAPI d3drm_device3_GetQuality(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1275,6 +1090,24 @@ static D3DRMRENDERQUALITY WINAPI d3drm_device3_GetQuality(IDirect3DRMDevice3 *if return device->quality; } +static D3DRMRENDERQUALITY WINAPI d3drm_device2_GetQuality(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetQuality(&device->IDirect3DRMDevice3_iface); +} + +static D3DRMRENDERQUALITY WINAPI d3drm_device1_GetQuality(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetQuality(&device->IDirect3DRMDevice3_iface); +} + static D3DCOLORMODEL WINAPI d3drm_device3_GetColorModel(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1282,6 +1115,24 @@ static D3DCOLORMODEL WINAPI d3drm_device3_GetColorModel(IDirect3DRMDevice3 *ifac return E_NOTIMPL; } +static D3DCOLORMODEL WINAPI d3drm_device2_GetColorModel(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetColorModel(&device->IDirect3DRMDevice3_iface); +} + +static D3DCOLORMODEL WINAPI d3drm_device1_GetColorModel(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p stub!\n", iface); + + return d3drm_device3_GetColorModel(&device->IDirect3DRMDevice3_iface); +} + static D3DRMTEXTUREQUALITY WINAPI d3drm_device3_GetTextureQuality(IDirect3DRMDevice3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1289,6 +1140,24 @@ static D3DRMTEXTUREQUALITY WINAPI d3drm_device3_GetTextureQuality(IDirect3DRMDev return E_NOTIMPL; } +static D3DRMTEXTUREQUALITY WINAPI d3drm_device2_GetTextureQuality(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetTextureQuality(&device->IDirect3DRMDevice3_iface); +} + +static D3DRMTEXTUREQUALITY WINAPI d3drm_device1_GetTextureQuality(IDirect3DRMDevice *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetTextureQuality(&device->IDirect3DRMDevice3_iface); +} + static HRESULT WINAPI d3drm_device3_GetDirect3DDevice(IDirect3DRMDevice3 *iface, IDirect3DDevice **d3d_device) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1300,12 +1169,60 @@ static HRESULT WINAPI d3drm_device3_GetDirect3DDevice(IDirect3DRMDevice3 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_GetDirect3DDevice(IDirect3DRMDevice2 *iface, IDirect3DDevice **d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); + + return d3drm_device3_GetDirect3DDevice(&device->IDirect3DRMDevice3_iface, d3d_device); +} + +static HRESULT WINAPI d3drm_device1_GetDirect3DDevice(IDirect3DRMDevice *iface, IDirect3DDevice **d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice(iface); + + TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); + + return d3drm_device3_GetDirect3DDevice(&device->IDirect3DRMDevice3_iface, d3d_device); +} + static HRESULT WINAPI d3drm_device3_InitFromD3D2(IDirect3DRMDevice3 *iface, IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device) { - FIXME("iface %p, d3d %p, d3d_device %p stub!\n", iface, d3d, d3d_device); + struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); + IDirect3D *d3d1; + IDirect3DDevice *d3d_device1; + HRESULT hr; - return E_NOTIMPL; + TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); + + if (!d3d || !d3d_device) + return D3DRMERR_BADVALUE; + + if (FAILED(hr = IDirect3D2_QueryInterface(d3d, &IID_IDirect3D, (void **)&d3d1))) + return hr; + if (FAILED(hr = IDirect3DDevice2_QueryInterface(d3d_device, &IID_IDirect3DDevice, (void **)&d3d_device1))) + { + IDirect3D_Release(d3d1); + return hr; + } + + hr = d3drm_device_set_ddraw_device_d3d(device, d3d1, d3d_device1); + IDirect3D_Release(d3d1); + IDirect3DDevice_Release(d3d_device1); + + return hr; +} + +static HRESULT WINAPI d3drm_device2_InitFromD3D2(IDirect3DRMDevice2 *iface, + IDirect3D2 *d3d, IDirect3DDevice2 *d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, d3d %p, d3d_device %p.\n", iface, d3d, d3d_device); + + return d3drm_device3_InitFromD3D2(&device->IDirect3DRMDevice3_iface, d3d, d3d_device); } static HRESULT WINAPI d3drm_device3_InitFromSurface(IDirect3DRMDevice3 *iface, @@ -1317,6 +1234,17 @@ static HRESULT WINAPI d3drm_device3_InitFromSurface(IDirect3DRMDevice3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_device2_InitFromSurface(IDirect3DRMDevice2 *iface, + GUID *guid, IDirectDraw *ddraw, IDirectDrawSurface *backbuffer) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, guid %s, ddraw %p, backbuffer %p.\n", + iface, debugstr_guid(guid), ddraw, backbuffer); + + return d3drm_device3_InitFromSurface(&device->IDirect3DRMDevice3_iface, guid, ddraw, backbuffer); +} + static HRESULT WINAPI d3drm_device3_SetRenderMode(IDirect3DRMDevice3 *iface, DWORD flags) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1328,6 +1256,15 @@ static HRESULT WINAPI d3drm_device3_SetRenderMode(IDirect3DRMDevice3 *iface, DWO return D3DRM_OK; } +static HRESULT WINAPI d3drm_device2_SetRenderMode(IDirect3DRMDevice2 *iface, DWORD flags) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, flags %#x.\n", iface, flags); + + return d3drm_device3_SetRenderMode(&device->IDirect3DRMDevice3_iface, flags); +} + static DWORD WINAPI d3drm_device3_GetRenderMode(IDirect3DRMDevice3 *iface) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); @@ -1337,14 +1274,36 @@ static DWORD WINAPI d3drm_device3_GetRenderMode(IDirect3DRMDevice3 *iface) return device->rendermode; } +static DWORD WINAPI d3drm_device2_GetRenderMode(IDirect3DRMDevice2 *iface) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_device3_GetRenderMode(&device->IDirect3DRMDevice3_iface); +} + static HRESULT WINAPI d3drm_device3_GetDirect3DDevice2(IDirect3DRMDevice3 *iface, IDirect3DDevice2 **d3d_device) { struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface); TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); + if (FAILED(IDirect3DDevice_QueryInterface(device->device, &IID_IDirect3DDevice2, (void**)d3d_device))) + return D3DRMERR_BADOBJECT; + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_device2_GetDirect3DDevice2(IDirect3DRMDevice2 *iface, IDirect3DDevice2 **d3d_device) +{ + struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface); + + TRACE("iface %p, d3d_device %p.\n", iface, d3d_device); + IDirect3DDevice_QueryInterface(device->device, &IID_IDirect3DDevice2, (void**)d3d_device); + /* d3drm returns D3DRM_OK even if the call fails. */ return D3DRM_OK; } @@ -1438,6 +1397,87 @@ static const struct IDirect3DRMDevice3Vtbl d3drm_device3_vtbl = d3drm_device3_SetStateChangeOptions, }; +static const struct IDirect3DRMDevice2Vtbl d3drm_device2_vtbl = +{ + d3drm_device2_QueryInterface, + d3drm_device2_AddRef, + d3drm_device2_Release, + d3drm_device2_Clone, + d3drm_device2_AddDestroyCallback, + d3drm_device2_DeleteDestroyCallback, + d3drm_device2_SetAppData, + d3drm_device2_GetAppData, + d3drm_device2_SetName, + d3drm_device2_GetName, + d3drm_device2_GetClassName, + d3drm_device2_Init, + d3drm_device2_InitFromD3D, + d3drm_device2_InitFromClipper, + d3drm_device2_Update, + d3drm_device2_AddUpdateCallback, + d3drm_device2_DeleteUpdateCallback, + d3drm_device2_SetBufferCount, + d3drm_device2_GetBufferCount, + d3drm_device2_SetDither, + d3drm_device2_SetShades, + d3drm_device2_SetQuality, + d3drm_device2_SetTextureQuality, + d3drm_device2_GetViewports, + d3drm_device2_GetDither, + d3drm_device2_GetShades, + d3drm_device2_GetHeight, + d3drm_device2_GetWidth, + d3drm_device2_GetTrianglesDrawn, + d3drm_device2_GetWireframeOptions, + d3drm_device2_GetQuality, + d3drm_device2_GetColorModel, + d3drm_device2_GetTextureQuality, + d3drm_device2_GetDirect3DDevice, + d3drm_device2_InitFromD3D2, + d3drm_device2_InitFromSurface, + d3drm_device2_SetRenderMode, + d3drm_device2_GetRenderMode, + d3drm_device2_GetDirect3DDevice2, +}; + +static const struct IDirect3DRMDeviceVtbl d3drm_device1_vtbl = +{ + d3drm_device1_QueryInterface, + d3drm_device1_AddRef, + d3drm_device1_Release, + d3drm_device1_Clone, + d3drm_device1_AddDestroyCallback, + d3drm_device1_DeleteDestroyCallback, + d3drm_device1_SetAppData, + d3drm_device1_GetAppData, + d3drm_device1_SetName, + d3drm_device1_GetName, + d3drm_device1_GetClassName, + d3drm_device1_Init, + d3drm_device1_InitFromD3D, + d3drm_device1_InitFromClipper, + d3drm_device1_Update, + d3drm_device1_AddUpdateCallback, + d3drm_device1_DeleteUpdateCallback, + d3drm_device1_SetBufferCount, + d3drm_device1_GetBufferCount, + d3drm_device1_SetDither, + d3drm_device1_SetShades, + d3drm_device1_SetQuality, + d3drm_device1_SetTextureQuality, + d3drm_device1_GetViewports, + d3drm_device1_GetDither, + d3drm_device1_GetShades, + d3drm_device1_GetHeight, + d3drm_device1_GetWidth, + d3drm_device1_GetTrianglesDrawn, + d3drm_device1_GetWireframeOptions, + d3drm_device1_GetQuality, + d3drm_device1_GetColorModel, + d3drm_device1_GetTextureQuality, + d3drm_device1_GetDirect3DDevice, +}; + static HRESULT WINAPI d3drm_device_win_QueryInterface(IDirect3DRMWinDevice *iface, REFIID riid, void **out) { struct d3drm_device *device = impl_from_IDirect3DRMWinDevice(iface); @@ -1472,7 +1512,7 @@ static HRESULT WINAPI d3drm_device_win_Clone(IDirect3DRMWinDevice *iface, TRACE("iface %p, outer %p, iid %s, out %p\n", iface, outer, debugstr_guid(iid), out); - return IDirect3DRMDevice3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); + return d3drm_device3_Clone(&device->IDirect3DRMDevice3_iface, outer, iid, out); } static HRESULT WINAPI d3drm_device_win_AddDestroyCallback(IDirect3DRMWinDevice *iface, @@ -1497,7 +1537,7 @@ static HRESULT WINAPI d3drm_device_win_SetAppData(IDirect3DRMWinDevice *iface, D TRACE("iface %p, data %#x.\n", iface, data); - return IDirect3DRMDevice3_SetAppData(&device->IDirect3DRMDevice3_iface, data); + return d3drm_device3_SetAppData(&device->IDirect3DRMDevice3_iface, data); } static DWORD WINAPI d3drm_device_win_GetAppData(IDirect3DRMWinDevice *iface) @@ -1506,7 +1546,7 @@ static DWORD WINAPI d3drm_device_win_GetAppData(IDirect3DRMWinDevice *iface) TRACE("iface %p.\n", iface); - return IDirect3DRMDevice3_GetAppData(&device->IDirect3DRMDevice3_iface); + return d3drm_device3_GetAppData(&device->IDirect3DRMDevice3_iface); } static HRESULT WINAPI d3drm_device_win_SetName(IDirect3DRMWinDevice *iface, const char *name) @@ -1515,7 +1555,7 @@ static HRESULT WINAPI d3drm_device_win_SetName(IDirect3DRMWinDevice *iface, cons TRACE("iface %p, name %s.\n", iface, debugstr_a(name)); - return IDirect3DRMDevice3_SetName(&device->IDirect3DRMDevice3_iface, name); + return d3drm_device3_SetName(&device->IDirect3DRMDevice3_iface, name); } static HRESULT WINAPI d3drm_device_win_GetName(IDirect3DRMWinDevice *iface, DWORD *size, char *name) @@ -1524,7 +1564,7 @@ static HRESULT WINAPI d3drm_device_win_GetName(IDirect3DRMWinDevice *iface, DWOR TRACE("iface %p, size %p, name %p stub!\n", iface, size, name); - return IDirect3DRMDevice3_GetName(&device->IDirect3DRMDevice3_iface, size, name); + return d3drm_device3_GetName(&device->IDirect3DRMDevice3_iface, size, name); } static HRESULT WINAPI d3drm_device_win_GetClassName(IDirect3DRMWinDevice *iface, DWORD *size, char *name) @@ -1533,7 +1573,7 @@ static HRESULT WINAPI d3drm_device_win_GetClassName(IDirect3DRMWinDevice *iface, TRACE("iface %p, size %p, name %p.\n", iface, size, name); - return IDirect3DRMDevice3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); + return d3drm_device3_GetClassName(&device->IDirect3DRMDevice3_iface, size, name); } static HRESULT WINAPI d3drm_device_win_HandlePaint(IDirect3DRMWinDevice *iface, HDC dc) @@ -1567,11 +1607,20 @@ static const struct IDirect3DRMWinDeviceVtbl d3drm_device_win_vtbl = d3drm_device_win_HandleActivate, }; -HRESULT d3drm_device_create(struct d3drm_device **out) +struct d3drm_device *unsafe_impl_from_IDirect3DRMDevice3(IDirect3DRMDevice3 *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3drm_device3_vtbl); + + return impl_from_IDirect3DRMDevice3(iface); +} + +HRESULT d3drm_device_create(struct d3drm_device **device, IDirect3DRM *d3drm) { struct d3drm_device *object; - TRACE("out %p.\n", out); + TRACE("device %p, d3drm %p.\n", device, d3drm); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY; @@ -1580,9 +1629,10 @@ HRESULT d3drm_device_create(struct d3drm_device **out) object->IDirect3DRMDevice2_iface.lpVtbl = &d3drm_device2_vtbl; object->IDirect3DRMDevice3_iface.lpVtbl = &d3drm_device3_vtbl; object->IDirect3DRMWinDevice_iface.lpVtbl = &d3drm_device_win_vtbl; - object->ref = 1; + object->d3drm = d3drm; + d3drm_object_init(&object->obj); - *out = object; + *device = object; return D3DRM_OK; } diff --git a/reactos/dll/directx/wine/d3drm/frame.c b/reactos/dll/directx/wine/d3drm/frame.c index bff49abac01..37a6fc1458f 100644 --- a/reactos/dll/directx/wine/d3drm/frame.c +++ b/reactos/dll/directx/wine/d3drm/frame.c @@ -21,8 +21,6 @@ #include "d3drm_private.h" -#include - static D3DRMMATRIX4D identity = { { 1.0f, 0.0f, 0.0f, 0.0f }, { 0.0f, 1.0f, 0.0f, 0.0f }, @@ -30,25 +28,6 @@ static D3DRMMATRIX4D identity = { { 0.0f, 0.0f, 0.0f, 1.0f } }; -struct d3drm_frame -{ - IDirect3DRMFrame2 IDirect3DRMFrame2_iface; - IDirect3DRMFrame3 IDirect3DRMFrame3_iface; - LONG ref; - struct d3drm_frame *parent; - ULONG nb_children; - ULONG children_capacity; - IDirect3DRMFrame3** children; - ULONG nb_visuals; - ULONG visuals_capacity; - IDirect3DRMVisual** visuals; - ULONG nb_lights; - ULONG lights_capacity; - IDirect3DRMLight** lights; - D3DRMMATRIX4D transform; - D3DCOLOR scenebackground; -}; - struct d3drm_frame_array { IDirect3DRMFrameArray IDirect3DRMFrameArray_iface; @@ -73,6 +52,11 @@ struct d3drm_light_array IDirect3DRMLight **lights; }; +static inline struct d3drm_frame *impl_from_IDirect3DRMFrame(IDirect3DRMFrame *iface) +{ + return CONTAINING_RECORD(iface, struct d3drm_frame, IDirect3DRMFrame_iface); +} + static inline struct d3drm_frame *impl_from_IDirect3DRMFrame2(IDirect3DRMFrame2 *iface) { return CONTAINING_RECORD(iface, struct d3drm_frame, IDirect3DRMFrame2_iface); @@ -456,737 +440,20 @@ static struct d3drm_light_array *d3drm_light_array_create(unsigned int light_cou return array; } -static HRESULT WINAPI d3drm_frame2_QueryInterface(IDirect3DRMFrame2 *iface, REFIID riid, void **out) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - - return IDirect3DRMFrame3_QueryInterface(&frame->IDirect3DRMFrame3_iface, riid, out); -} - -static ULONG WINAPI d3drm_frame2_AddRef(IDirect3DRMFrame2 *iface) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMFrame3_AddRef(&frame->IDirect3DRMFrame3_iface); -} - -static ULONG WINAPI d3drm_frame2_Release(IDirect3DRMFrame2 *iface) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMFrame3_Release(&frame->IDirect3DRMFrame3_iface); -} - -static HRESULT WINAPI d3drm_frame2_Clone(IDirect3DRMFrame2 *iface, - IUnknown *outer, REFIID iid, void **out) -{ - FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddDestroyCallback(IDirect3DRMFrame2 *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_DeleteDestroyCallback(IDirect3DRMFrame2 *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetAppData(IDirect3DRMFrame2 *iface, DWORD data) -{ - FIXME("iface %p, data %#x stub!\n", iface, data); - - return E_NOTIMPL; -} - -static DWORD WINAPI d3drm_frame2_GetAppData(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return 0; -} - -static HRESULT WINAPI d3drm_frame2_SetName(IDirect3DRMFrame2 *iface, const char *name) -{ - FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetName(IDirect3DRMFrame2 *iface, DWORD *size, char *name) -{ - FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetClassName(IDirect3DRMFrame2 *iface, DWORD *size, char *name) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMFrame3_GetClassName(&frame->IDirect3DRMFrame3_iface, size, name); -} - -static HRESULT WINAPI d3drm_frame2_AddChild(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *child) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - IDirect3DRMFrame3 *child3; - HRESULT hr; - - TRACE("iface %p, child %p.\n", iface, child); - - if (!child) - return D3DRMERR_BADOBJECT; - hr = IDirect3DRMFrame_QueryInterface(child, &IID_IDirect3DRMFrame3, (void **)&child3); - if (hr != S_OK) - return D3DRMERR_BADOBJECT; - IDirect3DRMFrame_Release(child); - - return IDirect3DRMFrame3_AddChild(&frame->IDirect3DRMFrame3_iface, child3); -} - -static HRESULT WINAPI d3drm_frame2_AddLight(IDirect3DRMFrame2 *iface, IDirect3DRMLight *light) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, light %p.\n", iface, light); - - return IDirect3DRMFrame3_AddLight(&frame->IDirect3DRMFrame3_iface, light); -} - -static HRESULT WINAPI d3drm_frame2_AddMoveCallback(IDirect3DRMFrame2 *iface, - D3DRMFRAMEMOVECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddTransform(IDirect3DRMFrame2 *iface, D3DRMCOMBINETYPE type, D3DRMMATRIX4D matrix) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, type %#x, matrix %p.\n", iface, type, matrix); - - return IDirect3DRMFrame3_AddTransform(&frame->IDirect3DRMFrame3_iface, type, matrix); -} - -static HRESULT WINAPI d3drm_frame2_AddTranslation(IDirect3DRMFrame2 *iface, - D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z) -{ - FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e stub!\n", iface, type, x, y, z); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddScale(IDirect3DRMFrame2 *iface, - D3DRMCOMBINETYPE type, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) -{ - FIXME("iface %p, type %#x, sx %.8e, sy %.8e, sz %.8e stub!\n", iface, type, sx, sy, sz); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddRotation(IDirect3DRMFrame2 *iface, - D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) -{ - FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", iface, type, x, y, z, theta); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddVisual(IDirect3DRMFrame2 *iface, IDirect3DRMVisual *visual) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, visual %p.\n", iface, visual); - - return IDirect3DRMFrame3_AddVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); -} - -static HRESULT WINAPI d3drm_frame2_GetChildren(IDirect3DRMFrame2 *iface, IDirect3DRMFrameArray **children) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, children %p.\n", iface, children); - - return IDirect3DRMFrame3_GetChildren(&frame->IDirect3DRMFrame3_iface, children); -} - -static D3DCOLOR WINAPI d3drm_frame2_GetColor(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return 0; -} - -static HRESULT WINAPI d3drm_frame2_GetLights(IDirect3DRMFrame2 *iface, IDirect3DRMLightArray **lights) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, lights %p.\n", iface, lights); - - return IDirect3DRMFrame3_GetLights(&frame->IDirect3DRMFrame3_iface, lights); -} - -static D3DRMMATERIALMODE WINAPI d3drm_frame2_GetMaterialMode(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRMMATERIAL_FROMPARENT; -} - -static HRESULT WINAPI d3drm_frame2_GetParent(IDirect3DRMFrame2 *iface, IDirect3DRMFrame **parent) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, parent %p.\n", iface, parent); - - if (!parent) - return D3DRMERR_BADVALUE; - - if (frame->parent) - { - *parent = (IDirect3DRMFrame *)&frame->parent->IDirect3DRMFrame2_iface; - IDirect3DRMFrame_AddRef(*parent); - } - else - { - *parent = NULL; - } - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_frame2_GetPosition(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVECTOR *position) -{ - FIXME("iface %p, reference %p, position %p stub!\n", iface, reference, position); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetRotation(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *theta) -{ - FIXME("iface %p, reference %p, axis %p, theta %p stub!\n", iface, reference, axis, theta); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetScene(IDirect3DRMFrame2 *iface, IDirect3DRMFrame **scene) -{ - FIXME("iface %p, scene %p stub!\n", iface, scene); - - return E_NOTIMPL; -} - -static D3DRMSORTMODE WINAPI d3drm_frame2_GetSortMode(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRMSORT_FROMPARENT; -} - -static HRESULT WINAPI d3drm_frame2_GetTexture(IDirect3DRMFrame2 *iface, IDirect3DRMTexture **texture) -{ - FIXME("iface %p, texture %p stub!\n", iface, texture); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetTransform(IDirect3DRMFrame2 *iface, D3DRMMATRIX4D matrix) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, matrix %p.\n", iface, matrix); - - memcpy(matrix, frame->transform, sizeof(D3DRMMATRIX4D)); - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_frame2_GetVelocity(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVECTOR *velocity, BOOL with_rotation) -{ - FIXME("iface %p, reference %p, velocity %p, with_rotation %#x stub!\n", - iface, reference, velocity, with_rotation); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetOrientation(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) -{ - FIXME("iface %p, reference %p, dir %p, up %p stub!\n", iface, reference, dir, up); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetVisuals(IDirect3DRMFrame2 *iface, IDirect3DRMVisualArray **visuals) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - struct d3drm_visual_array *array; - - TRACE("iface %p, visuals %p.\n", iface, visuals); - - if (!visuals) - return D3DRMERR_BADVALUE; - - if (!(array = d3drm_visual_array_create(frame->nb_visuals, frame->visuals))) - return E_OUTOFMEMORY; - - *visuals = &array->IDirect3DRMVisualArray_iface; - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_frame2_GetTextureTopology(IDirect3DRMFrame2 *iface, BOOL *wrap_u, BOOL *wrap_v) -{ - FIXME("iface %p, wrap_u %p, wrap_v %p stub!\n", iface, wrap_u, wrap_v); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_InverseTransform(IDirect3DRMFrame2 *iface, D3DVECTOR *d, D3DVECTOR *s) -{ - FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_Load(IDirect3DRMFrame2 *iface, void *filename, - void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) -{ - FIXME("iface %p, filename %p, name %p, flags %#x, cb %p, ctx %p stub!\n", - iface, filename, name, flags, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_LookAt(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *target, - IDirect3DRMFrame *reference, D3DRMFRAMECONSTRAINT constraint) -{ - FIXME("iface %p, target %p, reference %p, constraint %#x stub!\n", iface, target, reference, constraint); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_Move(IDirect3DRMFrame2 *iface, D3DVALUE delta) -{ - FIXME("iface %p, delta %.8e stub!\n", iface, delta); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_DeleteChild(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *child) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - IDirect3DRMFrame3 *child3; - HRESULT hr; - - TRACE("iface %p, child %p.\n", iface, child); - - if (!child) - return D3DRMERR_BADOBJECT; - if (FAILED(hr = IDirect3DRMFrame_QueryInterface(child, &IID_IDirect3DRMFrame3, (void **)&child3))) - return D3DRMERR_BADOBJECT; - IDirect3DRMFrame_Release(child); - - return IDirect3DRMFrame3_DeleteChild(&frame->IDirect3DRMFrame3_iface, child3); -} - -static HRESULT WINAPI d3drm_frame2_DeleteLight(IDirect3DRMFrame2 *iface, IDirect3DRMLight *light) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, light %p.\n", iface, light); - - return IDirect3DRMFrame3_DeleteLight(&frame->IDirect3DRMFrame3_iface, light); -} - -static HRESULT WINAPI d3drm_frame2_DeleteMoveCallback(IDirect3DRMFrame2 *iface, - D3DRMFRAMEMOVECALLBACK cb, void *ctx) -{ - FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_DeleteVisual(IDirect3DRMFrame2 *iface, IDirect3DRMVisual *visual) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, visual %p.\n", iface, visual); - - return IDirect3DRMFrame3_DeleteVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); -} - -static D3DCOLOR WINAPI d3drm_frame2_GetSceneBackground(IDirect3DRMFrame2 *iface) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMFrame3_GetSceneBackground(&frame->IDirect3DRMFrame3_iface); -} - -static HRESULT WINAPI d3drm_frame2_GetSceneBackgroundDepth(IDirect3DRMFrame2 *iface, - IDirectDrawSurface **surface) -{ - FIXME("iface %p, surface %p stub!\n", iface, surface); - - return E_NOTIMPL; -} - -static D3DCOLOR WINAPI d3drm_frame2_GetSceneFogColor(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return 0; -} - -static BOOL WINAPI d3drm_frame2_GetSceneFogEnable(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return FALSE; -} - -static D3DRMFOGMODE WINAPI d3drm_frame2_GetSceneFogMode(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRMFOG_LINEAR; -} - -static HRESULT WINAPI d3drm_frame2_GetSceneFogParams(IDirect3DRMFrame2 *iface, - D3DVALUE *start, D3DVALUE *end, D3DVALUE *density) -{ - FIXME("iface %p, start %p, end %p, density %p stub!\n", iface, start, end, density); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneBackground(IDirect3DRMFrame2 *iface, D3DCOLOR color) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, color 0x%08x.\n", iface, color); - - return IDirect3DRMFrame3_SetSceneBackground(&frame->IDirect3DRMFrame3_iface, color); -} - -static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundRGB(IDirect3DRMFrame2 *iface, - D3DVALUE red, D3DVALUE green, D3DVALUE blue) -{ - struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); - - TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue); - - return IDirect3DRMFrame3_SetSceneBackgroundRGB(&frame->IDirect3DRMFrame3_iface, red, green, blue); -} - -static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundDepth(IDirect3DRMFrame2 *iface, IDirectDrawSurface *surface) -{ - FIXME("iface %p, surface %p stub!\n", iface, surface); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundImage(IDirect3DRMFrame2 *iface, IDirect3DRMTexture *texture) -{ - FIXME("iface %p, texture %p stub!\n", iface, texture); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneFogEnable(IDirect3DRMFrame2 *iface, BOOL enable) -{ - FIXME("iface %p, enable %#x stub!\n", iface, enable); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneFogColor(IDirect3DRMFrame2 *iface, D3DCOLOR color) -{ - FIXME("iface %p, color 0x%08x stub!\n", iface, color); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneFogMode(IDirect3DRMFrame2 *iface, D3DRMFOGMODE mode) -{ - FIXME("iface %p, mode %#x stub!\n", iface, mode); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSceneFogParams(IDirect3DRMFrame2 *iface, - D3DVALUE start, D3DVALUE end, D3DVALUE density) -{ - FIXME("iface %p, start %.8e, end %.8e, density %.8e stub!\n", iface, start, end, density); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetColor(IDirect3DRMFrame2 *iface, D3DCOLOR color) -{ - FIXME("iface %p, color 0x%08x stub!\n", iface, color); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetColorRGB(IDirect3DRMFrame2 *iface, - D3DVALUE red, D3DVALUE green, D3DVALUE blue) -{ - FIXME("iface %p, red %.8e, green %.8e, blue %.8e stub!\n", iface, red, green, blue); - - return E_NOTIMPL; -} - -static D3DRMZBUFFERMODE WINAPI d3drm_frame2_GetZbufferMode(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return D3DRMZBUFFER_FROMPARENT; -} - -static HRESULT WINAPI d3drm_frame2_SetMaterialMode(IDirect3DRMFrame2 *iface, D3DRMMATERIALMODE mode) -{ - FIXME("iface %p, mode %#x stub!\n", iface, mode); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetOrientation(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *reference, - D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) -{ - FIXME("iface %p, reference %p, dx %.8e, dy %.8e, dz %.8e, ux %.8e, uy %.8e, uz %.8e stub!\n", - iface, reference, dx, dy, dz, ux, uy, uz); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetPosition(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) -{ - FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e stub!\n", iface, reference, x, y, z); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetRotation(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) -{ - FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", - iface, reference, x, y, z, theta); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetSortMode(IDirect3DRMFrame2 *iface, D3DRMSORTMODE mode) -{ - FIXME("iface %p, mode %#x stub!\n", iface, mode); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetTexture(IDirect3DRMFrame2 *iface, IDirect3DRMTexture *texture) -{ - FIXME("iface %p, texture %p stub!\n", iface, texture); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetTextureTopology(IDirect3DRMFrame2 *iface, BOOL wrap_u, BOOL wrap_v) -{ - FIXME("iface %p, wrap_u %#x, wrap_v %#x stub!\n", iface, wrap_u, wrap_v); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetVelocity(IDirect3DRMFrame2 *iface, - IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) -{ - FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, with_rotation %#x stub!\n", - iface, reference, x, y, z, with_rotation); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_SetZbufferMode(IDirect3DRMFrame2 *iface, D3DRMZBUFFERMODE mode) -{ - FIXME("iface %p, mode %#x stub!\n", iface, mode); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_Transform(IDirect3DRMFrame2 *iface, D3DVECTOR *d, D3DVECTOR *s) -{ - FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_AddMoveCallback2(IDirect3DRMFrame2 *iface, - D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) -{ - FIXME("iface %p, cb %p, ctx %p, flags %#x stub!\n", iface, cb, ctx, flags); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetBox(IDirect3DRMFrame2 *iface, D3DRMBOX *box) -{ - FIXME("iface %p, box %p stub!\n", iface, box); - - return E_NOTIMPL; -} - -static BOOL WINAPI d3drm_frame2_GetBoxEnable(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return FALSE; -} - -static HRESULT WINAPI d3drm_frame2_GetAxes(IDirect3DRMFrame2 *iface, D3DVECTOR *dir, D3DVECTOR *up) -{ - FIXME("iface %p, dir %p, up %p stub!\n", iface, dir, up); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_frame2_GetMaterial(IDirect3DRMFrame2 *iface, IDirect3DRMMaterial **material) -{ - FIXME("iface %p, material %p stub!\n", iface, material); - - return E_NOTIMPL; -} - -static BOOL WINAPI d3drm_frame2_GetInheritAxes(IDirect3DRMFrame2 *iface) -{ - FIXME("iface %p stub!\n", iface); - - return FALSE; -} - -static HRESULT WINAPI d3drm_frame2_GetHierarchyBox(IDirect3DRMFrame2 *iface, D3DRMBOX *box) -{ - FIXME("iface %p, box %p stub!\n", iface, box); - - return E_NOTIMPL; -} - -static const struct IDirect3DRMFrame2Vtbl d3drm_frame2_vtbl = -{ - d3drm_frame2_QueryInterface, - d3drm_frame2_AddRef, - d3drm_frame2_Release, - d3drm_frame2_Clone, - d3drm_frame2_AddDestroyCallback, - d3drm_frame2_DeleteDestroyCallback, - d3drm_frame2_SetAppData, - d3drm_frame2_GetAppData, - d3drm_frame2_SetName, - d3drm_frame2_GetName, - d3drm_frame2_GetClassName, - d3drm_frame2_AddChild, - d3drm_frame2_AddLight, - d3drm_frame2_AddMoveCallback, - d3drm_frame2_AddTransform, - d3drm_frame2_AddTranslation, - d3drm_frame2_AddScale, - d3drm_frame2_AddRotation, - d3drm_frame2_AddVisual, - d3drm_frame2_GetChildren, - d3drm_frame2_GetColor, - d3drm_frame2_GetLights, - d3drm_frame2_GetMaterialMode, - d3drm_frame2_GetParent, - d3drm_frame2_GetPosition, - d3drm_frame2_GetRotation, - d3drm_frame2_GetScene, - d3drm_frame2_GetSortMode, - d3drm_frame2_GetTexture, - d3drm_frame2_GetTransform, - d3drm_frame2_GetVelocity, - d3drm_frame2_GetOrientation, - d3drm_frame2_GetVisuals, - d3drm_frame2_GetTextureTopology, - d3drm_frame2_InverseTransform, - d3drm_frame2_Load, - d3drm_frame2_LookAt, - d3drm_frame2_Move, - d3drm_frame2_DeleteChild, - d3drm_frame2_DeleteLight, - d3drm_frame2_DeleteMoveCallback, - d3drm_frame2_DeleteVisual, - d3drm_frame2_GetSceneBackground, - d3drm_frame2_GetSceneBackgroundDepth, - d3drm_frame2_GetSceneFogColor, - d3drm_frame2_GetSceneFogEnable, - d3drm_frame2_GetSceneFogMode, - d3drm_frame2_GetSceneFogParams, - d3drm_frame2_SetSceneBackground, - d3drm_frame2_SetSceneBackgroundRGB, - d3drm_frame2_SetSceneBackgroundDepth, - d3drm_frame2_SetSceneBackgroundImage, - d3drm_frame2_SetSceneFogEnable, - d3drm_frame2_SetSceneFogColor, - d3drm_frame2_SetSceneFogMode, - d3drm_frame2_SetSceneFogParams, - d3drm_frame2_SetColor, - d3drm_frame2_SetColorRGB, - d3drm_frame2_GetZbufferMode, - d3drm_frame2_SetMaterialMode, - d3drm_frame2_SetOrientation, - d3drm_frame2_SetPosition, - d3drm_frame2_SetRotation, - d3drm_frame2_SetSortMode, - d3drm_frame2_SetTexture, - d3drm_frame2_SetTextureTopology, - d3drm_frame2_SetVelocity, - d3drm_frame2_SetZbufferMode, - d3drm_frame2_Transform, - d3drm_frame2_AddMoveCallback2, - d3drm_frame2_GetBox, - d3drm_frame2_GetBoxEnable, - d3drm_frame2_GetAxes, - d3drm_frame2_GetMaterial, - d3drm_frame2_GetInheritAxes, - d3drm_frame2_GetHierarchyBox, -}; - static HRESULT WINAPI d3drm_frame3_QueryInterface(IDirect3DRMFrame3 *iface, REFIID riid, void **out) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - if (IsEqualGUID(riid, &IID_IDirect3DRMFrame2) - || IsEqualGUID(riid, &IID_IDirect3DRMFrame) + if (IsEqualGUID(riid, &IID_IDirect3DRMFrame) || IsEqualGUID(riid, &IID_IDirect3DRMObject) || IsEqualGUID(riid, &IID_IDirect3DRMVisual) || IsEqualGUID(riid, &IID_IUnknown)) + { + *out = &frame->IDirect3DRMFrame_iface; + } + else if (IsEqualGUID(riid, &IID_IDirect3DRMFrame2)) { *out = &frame->IDirect3DRMFrame2_iface; } @@ -1205,6 +472,24 @@ static HRESULT WINAPI d3drm_frame3_QueryInterface(IDirect3DRMFrame3 *iface, REFI return S_OK; } +static HRESULT WINAPI d3drm_frame2_QueryInterface(IDirect3DRMFrame2 *iface, REFIID riid, void **out) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); + + return d3drm_frame3_QueryInterface(&frame->IDirect3DRMFrame3_iface, riid, out); +} + +static HRESULT WINAPI d3drm_frame1_QueryInterface(IDirect3DRMFrame *iface, REFIID riid, void **out) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); + + return d3drm_frame3_QueryInterface(&frame->IDirect3DRMFrame3_iface, riid, out); +} + static ULONG WINAPI d3drm_frame3_AddRef(IDirect3DRMFrame3 *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1215,6 +500,24 @@ static ULONG WINAPI d3drm_frame3_AddRef(IDirect3DRMFrame3 *iface) return refcount; } +static ULONG WINAPI d3drm_frame2_AddRef(IDirect3DRMFrame2 *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_AddRef(&frame->IDirect3DRMFrame3_iface); +} + +static ULONG WINAPI d3drm_frame1_AddRef(IDirect3DRMFrame *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_AddRef(&frame->IDirect3DRMFrame3_iface); +} + static ULONG WINAPI d3drm_frame3_Release(IDirect3DRMFrame3 *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1246,6 +549,24 @@ static ULONG WINAPI d3drm_frame3_Release(IDirect3DRMFrame3 *iface) return refcount; } +static ULONG WINAPI d3drm_frame2_Release(IDirect3DRMFrame2 *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_Release(&frame->IDirect3DRMFrame3_iface); +} + +static ULONG WINAPI d3drm_frame1_Release(IDirect3DRMFrame *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_Release(&frame->IDirect3DRMFrame3_iface); +} + static HRESULT WINAPI d3drm_frame3_Clone(IDirect3DRMFrame3 *iface, IUnknown *outer, REFIID iid, void **out) { @@ -1254,6 +575,22 @@ static HRESULT WINAPI d3drm_frame3_Clone(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_Clone(IDirect3DRMFrame2 *iface, + IUnknown *outer, REFIID iid, void **out) +{ + FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_Clone(IDirect3DRMFrame *iface, + IUnknown *outer, REFIID iid, void **out) +{ + FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_AddDestroyCallback(IDirect3DRMFrame3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx) { @@ -1262,6 +599,22 @@ static HRESULT WINAPI d3drm_frame3_AddDestroyCallback(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_AddDestroyCallback(IDirect3DRMFrame2 *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_AddDestroyCallback(IDirect3DRMFrame *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_DeleteDestroyCallback(IDirect3DRMFrame3 *iface, D3DRMOBJECTCALLBACK cb, void *ctx) { @@ -1270,6 +623,22 @@ static HRESULT WINAPI d3drm_frame3_DeleteDestroyCallback(IDirect3DRMFrame3 *ifac return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_DeleteDestroyCallback(IDirect3DRMFrame2 *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_DeleteDestroyCallback(IDirect3DRMFrame *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetAppData(IDirect3DRMFrame3 *iface, DWORD data) { FIXME("iface %p, data %#x stub!\n", iface, data); @@ -1277,6 +646,20 @@ static HRESULT WINAPI d3drm_frame3_SetAppData(IDirect3DRMFrame3 *iface, DWORD da return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetAppData(IDirect3DRMFrame2 *iface, DWORD data) +{ + FIXME("iface %p, data %#x stub!\n", iface, data); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetAppData(IDirect3DRMFrame *iface, DWORD data) +{ + FIXME("iface %p, data %#x stub!\n", iface, data); + + return E_NOTIMPL; +} + static DWORD WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1284,6 +667,20 @@ static DWORD WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface) return 0; } +static DWORD WINAPI d3drm_frame2_GetAppData(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + +static DWORD WINAPI d3drm_frame1_GetAppData(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + static HRESULT WINAPI d3drm_frame3_SetName(IDirect3DRMFrame3 *iface, const char *name) { FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); @@ -1291,6 +688,20 @@ static HRESULT WINAPI d3drm_frame3_SetName(IDirect3DRMFrame3 *iface, const char return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetName(IDirect3DRMFrame2 *iface, const char *name) +{ + FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetName(IDirect3DRMFrame *iface, const char *name) +{ + FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetName(IDirect3DRMFrame3 *iface, DWORD *size, char *name) { FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); @@ -1298,6 +709,20 @@ static HRESULT WINAPI d3drm_frame3_GetName(IDirect3DRMFrame3 *iface, DWORD *size return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetName(IDirect3DRMFrame2 *iface, DWORD *size, char *name) +{ + FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetName(IDirect3DRMFrame *iface, DWORD *size, char *name) +{ + FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetClassName(IDirect3DRMFrame3 *iface, DWORD *size, char *name) { TRACE("iface %p, size %p, name %p.\n", iface, size, name); @@ -1311,6 +736,24 @@ static HRESULT WINAPI d3drm_frame3_GetClassName(IDirect3DRMFrame3 *iface, DWORD return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_GetClassName(IDirect3DRMFrame2 *iface, DWORD *size, char *name) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_frame3_GetClassName(&frame->IDirect3DRMFrame3_iface, size, name); +} + +static HRESULT WINAPI d3drm_frame1_GetClassName(IDirect3DRMFrame *iface, DWORD *size, char *name) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_frame3_GetClassName(&frame->IDirect3DRMFrame3_iface, size, name); +} + static HRESULT WINAPI d3drm_frame3_AddChild(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *child) { struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface); @@ -1367,6 +810,37 @@ static HRESULT WINAPI d3drm_frame3_AddChild(IDirect3DRMFrame3 *iface, IDirect3DR return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_AddChild(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *child) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + IDirect3DRMFrame3 *child3; + HRESULT hr; + + TRACE("iface %p, child %p.\n", iface, child); + + if (!child) + return D3DRMERR_BADOBJECT; + hr = IDirect3DRMFrame_QueryInterface(child, &IID_IDirect3DRMFrame3, (void **)&child3); + if (hr != S_OK) + return D3DRMERR_BADOBJECT; + IDirect3DRMFrame_Release(child); + + return d3drm_frame3_AddChild(&frame->IDirect3DRMFrame3_iface, child3); +} + +static HRESULT WINAPI d3drm_frame1_AddChild(IDirect3DRMFrame *iface, IDirect3DRMFrame *child) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + struct d3drm_frame *child_frame = unsafe_impl_from_IDirect3DRMFrame(child); + + TRACE("iface %p, child %p.\n", iface, child); + + if (!child_frame) + return D3DRMERR_BADOBJECT; + + return d3drm_frame3_AddChild(&frame->IDirect3DRMFrame3_iface, &child_frame->IDirect3DRMFrame3_iface); +} + static HRESULT WINAPI d3drm_frame3_AddLight(IDirect3DRMFrame3 *iface, IDirect3DRMLight *light) { struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface); @@ -1411,6 +885,24 @@ static HRESULT WINAPI d3drm_frame3_AddLight(IDirect3DRMFrame3 *iface, IDirect3DR return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_AddLight(IDirect3DRMFrame2 *iface, IDirect3DRMLight *light) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, light %p.\n", iface, light); + + return d3drm_frame3_AddLight(&frame->IDirect3DRMFrame3_iface, light); +} + +static HRESULT WINAPI d3drm_frame1_AddLight(IDirect3DRMFrame *iface, IDirect3DRMLight *light) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, light %p.\n", iface, light); + + return d3drm_frame3_AddLight(&frame->IDirect3DRMFrame3_iface, light); +} + static HRESULT WINAPI d3drm_frame3_AddMoveCallback(IDirect3DRMFrame3 *iface, D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags) { @@ -1419,6 +911,22 @@ static HRESULT WINAPI d3drm_frame3_AddMoveCallback(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_AddMoveCallback(IDirect3DRMFrame2 *iface, + D3DRMFRAMEMOVECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_AddMoveCallback(IDirect3DRMFrame *iface, + D3DRMFRAMEMOVECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_AddTransform(IDirect3DRMFrame3 *iface, D3DRMCOMBINETYPE type, D3DRMMATRIX4D matrix) { @@ -1448,6 +956,26 @@ static HRESULT WINAPI d3drm_frame3_AddTransform(IDirect3DRMFrame3 *iface, return S_OK; } +static HRESULT WINAPI d3drm_frame2_AddTransform(IDirect3DRMFrame2 *iface, + D3DRMCOMBINETYPE type, D3DRMMATRIX4D matrix) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, type %#x, matrix %p.\n", iface, type, matrix); + + return d3drm_frame3_AddTransform(&frame->IDirect3DRMFrame3_iface, type, matrix); +} + +static HRESULT WINAPI d3drm_frame1_AddTransform(IDirect3DRMFrame *iface, + D3DRMCOMBINETYPE type, D3DRMMATRIX4D matrix) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, type %#x, matrix %p.\n", iface, type, matrix); + + return d3drm_frame3_AddTransform(&frame->IDirect3DRMFrame3_iface, type, matrix); +} + static HRESULT WINAPI d3drm_frame3_AddTranslation(IDirect3DRMFrame3 *iface, D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z) { @@ -1456,6 +984,22 @@ static HRESULT WINAPI d3drm_frame3_AddTranslation(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_AddTranslation(IDirect3DRMFrame2 *iface, + D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z) +{ + FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e stub!\n", iface, type, x, y, z); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_AddTranslation(IDirect3DRMFrame *iface, + D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z) +{ + FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e stub!\n", iface, type, x, y, z); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_AddScale(IDirect3DRMFrame3 *iface, D3DRMCOMBINETYPE type, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) { @@ -1464,6 +1008,22 @@ static HRESULT WINAPI d3drm_frame3_AddScale(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_AddScale(IDirect3DRMFrame2 *iface, + D3DRMCOMBINETYPE type, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) +{ + FIXME("iface %p, type %#x, sx %.8e, sy %.8e, sz %.8e stub!\n", iface, type, sx, sy, sz); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_AddScale(IDirect3DRMFrame *iface, + D3DRMCOMBINETYPE type, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz) +{ + FIXME("iface %p, type %#x, sx %.8e, sy %.8e, sz %.8e stub!\n", iface, type, sx, sy, sz); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_AddRotation(IDirect3DRMFrame3 *iface, D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) { @@ -1473,6 +1033,22 @@ static HRESULT WINAPI d3drm_frame3_AddRotation(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_AddRotation(IDirect3DRMFrame2 *iface, + D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) +{ + FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", iface, type, x, y, z, theta); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_AddRotation(IDirect3DRMFrame *iface, + D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) +{ + FIXME("iface %p, type %#x, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", iface, type, x, y, z, theta); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_AddVisual(IDirect3DRMFrame3 *iface, IUnknown *visual) { struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface); @@ -1517,6 +1093,24 @@ static HRESULT WINAPI d3drm_frame3_AddVisual(IDirect3DRMFrame3 *iface, IUnknown return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_AddVisual(IDirect3DRMFrame2 *iface, IDirect3DRMVisual *visual) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, visual %p.\n", iface, visual); + + return d3drm_frame3_AddVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); +} + +static HRESULT WINAPI d3drm_frame1_AddVisual(IDirect3DRMFrame *iface, IDirect3DRMVisual *visual) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, visual %p.\n", iface, visual); + + return d3drm_frame3_AddVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); +} + static HRESULT WINAPI d3drm_frame3_GetChildren(IDirect3DRMFrame3 *iface, IDirect3DRMFrameArray **children) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1535,6 +1129,24 @@ static HRESULT WINAPI d3drm_frame3_GetChildren(IDirect3DRMFrame3 *iface, IDirect return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_GetChildren(IDirect3DRMFrame2 *iface, IDirect3DRMFrameArray **children) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, children %p.\n", iface, children); + + return d3drm_frame3_GetChildren(&frame->IDirect3DRMFrame3_iface, children); +} + +static HRESULT WINAPI d3drm_frame1_GetChildren(IDirect3DRMFrame *iface, IDirect3DRMFrameArray **children) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, children %p.\n", iface, children); + + return d3drm_frame3_GetChildren(&frame->IDirect3DRMFrame3_iface, children); +} + static D3DCOLOR WINAPI d3drm_frame3_GetColor(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1542,6 +1154,20 @@ static D3DCOLOR WINAPI d3drm_frame3_GetColor(IDirect3DRMFrame3 *iface) return 0; } +static D3DCOLOR WINAPI d3drm_frame2_GetColor(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + +static D3DCOLOR WINAPI d3drm_frame1_GetColor(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + static HRESULT WINAPI d3drm_frame3_GetLights(IDirect3DRMFrame3 *iface, IDirect3DRMLightArray **lights) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1560,6 +1186,24 @@ static HRESULT WINAPI d3drm_frame3_GetLights(IDirect3DRMFrame3 *iface, IDirect3D return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_GetLights(IDirect3DRMFrame2 *iface, IDirect3DRMLightArray **lights) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, lights %p.\n", iface, lights); + + return d3drm_frame3_GetLights(&frame->IDirect3DRMFrame3_iface, lights); +} + +static HRESULT WINAPI d3drm_frame1_GetLights(IDirect3DRMFrame *iface, IDirect3DRMLightArray **lights) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, lights %p.\n", iface, lights); + + return d3drm_frame3_GetLights(&frame->IDirect3DRMFrame3_iface, lights); +} + static D3DRMMATERIALMODE WINAPI d3drm_frame3_GetMaterialMode(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1567,6 +1211,20 @@ static D3DRMMATERIALMODE WINAPI d3drm_frame3_GetMaterialMode(IDirect3DRMFrame3 * return D3DRMMATERIAL_FROMPARENT; } +static D3DRMMATERIALMODE WINAPI d3drm_frame2_GetMaterialMode(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMMATERIAL_FROMPARENT; +} + +static D3DRMMATERIALMODE WINAPI d3drm_frame1_GetMaterialMode(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMMATERIAL_FROMPARENT; +} + static HRESULT WINAPI d3drm_frame3_GetParent(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 **parent) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1589,6 +1247,37 @@ static HRESULT WINAPI d3drm_frame3_GetParent(IDirect3DRMFrame3 *iface, IDirect3D return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_GetParent(IDirect3DRMFrame2 *iface, IDirect3DRMFrame **parent) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, parent %p.\n", iface, parent); + + if (!parent) + return D3DRMERR_BADVALUE; + + if (frame->parent) + { + *parent = &frame->parent->IDirect3DRMFrame_iface; + IDirect3DRMFrame_AddRef(*parent); + } + else + { + *parent = NULL; + } + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_frame1_GetParent(IDirect3DRMFrame *iface, IDirect3DRMFrame **parent) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, parent %p.\n", iface, parent); + + return d3drm_frame2_GetParent(&frame->IDirect3DRMFrame2_iface, parent); +} + static HRESULT WINAPI d3drm_frame3_GetPosition(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVECTOR *position) { @@ -1597,6 +1286,23 @@ static HRESULT WINAPI d3drm_frame3_GetPosition(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetPosition(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVECTOR *position) +{ + FIXME("iface %p, reference %p, position %p stub!\n", iface, reference, position); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetPosition(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVECTOR *position) +{ + FIXME("iface %p, reference %p, position %p stub!\n", iface, reference, position); + + return E_NOTIMPL; +} + + static HRESULT WINAPI d3drm_frame3_GetRotation(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *theta) { @@ -1605,6 +1311,22 @@ static HRESULT WINAPI d3drm_frame3_GetRotation(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetRotation(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *theta) +{ + FIXME("iface %p, reference %p, axis %p, theta %p stub!\n", iface, reference, axis, theta); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetRotation(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVECTOR *axis, D3DVALUE *theta) +{ + FIXME("iface %p, reference %p, axis %p, theta %p stub!\n", iface, reference, axis, theta); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetScene(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 **scene) { FIXME("iface %p, scene %p stub!\n", iface, scene); @@ -1612,6 +1334,20 @@ static HRESULT WINAPI d3drm_frame3_GetScene(IDirect3DRMFrame3 *iface, IDirect3DR return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetScene(IDirect3DRMFrame2 *iface, IDirect3DRMFrame **scene) +{ + FIXME("iface %p, scene %p stub!\n", iface, scene); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetScene(IDirect3DRMFrame *iface, IDirect3DRMFrame **scene) +{ + FIXME("iface %p, scene %p stub!\n", iface, scene); + + return E_NOTIMPL; +} + static D3DRMSORTMODE WINAPI d3drm_frame3_GetSortMode(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1619,6 +1355,20 @@ static D3DRMSORTMODE WINAPI d3drm_frame3_GetSortMode(IDirect3DRMFrame3 *iface) return D3DRMSORT_FROMPARENT; } +static D3DRMSORTMODE WINAPI d3drm_frame2_GetSortMode(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMSORT_FROMPARENT; +} + +static D3DRMSORTMODE WINAPI d3drm_frame1_GetSortMode(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMSORT_FROMPARENT; +} + static HRESULT WINAPI d3drm_frame3_GetTexture(IDirect3DRMFrame3 *iface, IDirect3DRMTexture3 **texture) { FIXME("iface %p, texture %p stub!\n", iface, texture); @@ -1626,6 +1376,20 @@ static HRESULT WINAPI d3drm_frame3_GetTexture(IDirect3DRMFrame3 *iface, IDirect3 return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetTexture(IDirect3DRMFrame2 *iface, IDirect3DRMTexture **texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetTexture(IDirect3DRMFrame *iface, IDirect3DRMTexture **texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetTransform(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix) { @@ -1641,6 +1405,26 @@ static HRESULT WINAPI d3drm_frame3_GetTransform(IDirect3DRMFrame3 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_GetTransform(IDirect3DRMFrame2 *iface, D3DRMMATRIX4D matrix) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, matrix %p.\n", iface, matrix); + + memcpy(matrix, frame->transform, sizeof(D3DRMMATRIX4D)); + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_frame1_GetTransform(IDirect3DRMFrame *iface, D3DRMMATRIX4D matrix) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, matrix %p.\n", iface, matrix); + + return d3drm_frame2_GetTransform(&frame->IDirect3DRMFrame2_iface, matrix); +} + static HRESULT WINAPI d3drm_frame3_GetVelocity(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVECTOR *velocity, BOOL with_rotation) { @@ -1650,6 +1434,24 @@ static HRESULT WINAPI d3drm_frame3_GetVelocity(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetVelocity(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVECTOR *velocity, BOOL with_rotation) +{ + FIXME("iface %p, reference %p, velocity %p, with_rotation %#x stub!\n", + iface, reference, velocity, with_rotation); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetVelocity(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVECTOR *velocity, BOOL with_rotation) +{ + FIXME("iface %p, reference %p, velocity %p, with_rotation %#x stub!\n", + iface, reference, velocity, with_rotation); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetOrientation(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up) { @@ -1658,14 +1460,70 @@ static HRESULT WINAPI d3drm_frame3_GetOrientation(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } -static HRESULT WINAPI d3drm_frame3_GetVisuals(IDirect3DRMFrame3 *iface, - DWORD *count, IUnknown **visuals) +static HRESULT WINAPI d3drm_frame2_GetOrientation(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) +{ + FIXME("iface %p, reference %p, dir %p, up %p stub!\n", iface, reference, dir, up); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetOrientation(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVECTOR *dir, D3DVECTOR *up) +{ + FIXME("iface %p, reference %p, dir %p, up %p stub!\n", iface, reference, dir, up); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame3_GetVisuals(IDirect3DRMFrame3 *iface, DWORD *count, IUnknown **visuals) { FIXME("iface %p, count %p, visuals %p stub!\n", iface, count, visuals); return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetVisuals(IDirect3DRMFrame2 *iface, IDirect3DRMVisualArray **visuals) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + struct d3drm_visual_array *array; + + TRACE("iface %p, visuals %p.\n", iface, visuals); + + if (!visuals) + return D3DRMERR_BADVALUE; + + if (!(array = d3drm_visual_array_create(frame->nb_visuals, frame->visuals))) + return E_OUTOFMEMORY; + + *visuals = &array->IDirect3DRMVisualArray_iface; + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_frame1_GetVisuals(IDirect3DRMFrame *iface, IDirect3DRMVisualArray **visuals) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, visuals %p.\n", iface, visuals); + + return d3drm_frame2_GetVisuals(&frame->IDirect3DRMFrame2_iface, visuals); +} + +static HRESULT WINAPI d3drm_frame2_GetTextureTopology(IDirect3DRMFrame2 *iface, BOOL *wrap_u, BOOL *wrap_v) +{ + FIXME("iface %p, wrap_u %p, wrap_v %p stub!\n", iface, wrap_u, wrap_v); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetTextureTopology(IDirect3DRMFrame *iface, BOOL *wrap_u, BOOL *wrap_v) +{ + FIXME("iface %p, wrap_u %p, wrap_v %p stub!\n", iface, wrap_u, wrap_v); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_InverseTransform(IDirect3DRMFrame3 *iface, D3DVECTOR *d, D3DVECTOR *s) { FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); @@ -1673,6 +1531,20 @@ static HRESULT WINAPI d3drm_frame3_InverseTransform(IDirect3DRMFrame3 *iface, D3 return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_InverseTransform(IDirect3DRMFrame2 *iface, D3DVECTOR *d, D3DVECTOR *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_InverseTransform(IDirect3DRMFrame *iface, D3DVECTOR *d, D3DVECTOR *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_Load(IDirect3DRMFrame3 *iface, void *filename, void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURE3CALLBACK cb, void *ctx) { @@ -1682,6 +1554,24 @@ static HRESULT WINAPI d3drm_frame3_Load(IDirect3DRMFrame3 *iface, void *filename return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_Load(IDirect3DRMFrame2 *iface, void *filename, + void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) +{ + FIXME("iface %p, filename %p, name %p, flags %#x, cb %p, ctx %p stub!\n", + iface, filename, name, flags, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_Load(IDirect3DRMFrame *iface, void *filename, + void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURECALLBACK cb, void *ctx) +{ + FIXME("iface %p, filename %p, name %p, flags %#x, cb %p, ctx %p stub!\n", + iface, filename, name, flags, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_LookAt(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *target, IDirect3DRMFrame3 *reference, D3DRMFRAMECONSTRAINT constraint) { @@ -1690,6 +1580,22 @@ static HRESULT WINAPI d3drm_frame3_LookAt(IDirect3DRMFrame3 *iface, IDirect3DRMF return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_LookAt(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *target, + IDirect3DRMFrame *reference, D3DRMFRAMECONSTRAINT constraint) +{ + FIXME("iface %p, target %p, reference %p, constraint %#x stub!\n", iface, target, reference, constraint); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_LookAt(IDirect3DRMFrame *iface, IDirect3DRMFrame *target, + IDirect3DRMFrame *reference, D3DRMFRAMECONSTRAINT constraint) +{ + FIXME("iface %p, target %p, reference %p, constraint %#x stub!\n", iface, target, reference, constraint); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_Move(IDirect3DRMFrame3 *iface, D3DVALUE delta) { FIXME("iface %p, delta %.8e stub!\n", iface, delta); @@ -1697,6 +1603,20 @@ static HRESULT WINAPI d3drm_frame3_Move(IDirect3DRMFrame3 *iface, D3DVALUE delta return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_Move(IDirect3DRMFrame2 *iface, D3DVALUE delta) +{ + FIXME("iface %p, delta %.8e stub!\n", iface, delta); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_Move(IDirect3DRMFrame *iface, D3DVALUE delta) +{ + FIXME("iface %p, delta %.8e stub!\n", iface, delta); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_DeleteChild(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *child) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1726,6 +1646,36 @@ static HRESULT WINAPI d3drm_frame3_DeleteChild(IDirect3DRMFrame3 *iface, IDirect return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_DeleteChild(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *child) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + IDirect3DRMFrame3 *child3; + HRESULT hr; + + TRACE("iface %p, child %p.\n", iface, child); + + if (!child) + return D3DRMERR_BADOBJECT; + if (FAILED(hr = IDirect3DRMFrame_QueryInterface(child, &IID_IDirect3DRMFrame3, (void **)&child3))) + return D3DRMERR_BADOBJECT; + IDirect3DRMFrame_Release(child); + + return d3drm_frame3_DeleteChild(&frame->IDirect3DRMFrame3_iface, child3); +} + +static HRESULT WINAPI d3drm_frame1_DeleteChild(IDirect3DRMFrame *iface, IDirect3DRMFrame *child) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + struct d3drm_frame *child_frame = unsafe_impl_from_IDirect3DRMFrame(child); + + TRACE("iface %p, child %p.\n", iface, child); + + if (!child_frame) + return D3DRMERR_BADOBJECT; + + return d3drm_frame3_DeleteChild(&frame->IDirect3DRMFrame3_iface, &child_frame->IDirect3DRMFrame3_iface); +} + static HRESULT WINAPI d3drm_frame3_DeleteLight(IDirect3DRMFrame3 *iface, IDirect3DRMLight *light) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1753,6 +1703,24 @@ static HRESULT WINAPI d3drm_frame3_DeleteLight(IDirect3DRMFrame3 *iface, IDirect return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_DeleteLight(IDirect3DRMFrame2 *iface, IDirect3DRMLight *light) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, light %p.\n", iface, light); + + return d3drm_frame3_DeleteLight(&frame->IDirect3DRMFrame3_iface, light); +} + +static HRESULT WINAPI d3drm_frame1_DeleteLight(IDirect3DRMFrame *iface, IDirect3DRMLight *light) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, light %p.\n", iface, light); + + return d3drm_frame3_DeleteLight(&frame->IDirect3DRMFrame3_iface, light); +} + static HRESULT WINAPI d3drm_frame3_DeleteMoveCallback(IDirect3DRMFrame3 *iface, D3DRMFRAME3MOVECALLBACK cb, void *ctx) { @@ -1761,6 +1729,22 @@ static HRESULT WINAPI d3drm_frame3_DeleteMoveCallback(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_DeleteMoveCallback(IDirect3DRMFrame2 *iface, + D3DRMFRAMEMOVECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_DeleteMoveCallback(IDirect3DRMFrame *iface, + D3DRMFRAMEMOVECALLBACK cb, void *ctx) +{ + FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_DeleteVisual(IDirect3DRMFrame3 *iface, IUnknown *visual) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1788,6 +1772,24 @@ static HRESULT WINAPI d3drm_frame3_DeleteVisual(IDirect3DRMFrame3 *iface, IUnkno return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_DeleteVisual(IDirect3DRMFrame2 *iface, IDirect3DRMVisual *visual) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, visual %p.\n", iface, visual); + + return d3drm_frame3_DeleteVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); +} + +static HRESULT WINAPI d3drm_frame1_DeleteVisual(IDirect3DRMFrame *iface, IDirect3DRMVisual *visual) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, visual %p.\n", iface, visual); + + return d3drm_frame3_DeleteVisual(&frame->IDirect3DRMFrame3_iface, (IUnknown *)visual); +} + static D3DCOLOR WINAPI d3drm_frame3_GetSceneBackground(IDirect3DRMFrame3 *iface) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1797,6 +1799,24 @@ static D3DCOLOR WINAPI d3drm_frame3_GetSceneBackground(IDirect3DRMFrame3 *iface) return frame->scenebackground; } +static D3DCOLOR WINAPI d3drm_frame2_GetSceneBackground(IDirect3DRMFrame2 *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_GetSceneBackground(&frame->IDirect3DRMFrame3_iface); +} + +static D3DCOLOR WINAPI d3drm_frame1_GetSceneBackground(IDirect3DRMFrame *iface) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_frame3_GetSceneBackground(&frame->IDirect3DRMFrame3_iface); +} + static HRESULT WINAPI d3drm_frame3_GetSceneBackgroundDepth(IDirect3DRMFrame3 *iface, IDirectDrawSurface **surface) { @@ -1805,6 +1825,22 @@ static HRESULT WINAPI d3drm_frame3_GetSceneBackgroundDepth(IDirect3DRMFrame3 *if return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetSceneBackgroundDepth(IDirect3DRMFrame2 *iface, + IDirectDrawSurface **surface) +{ + FIXME("iface %p, surface %p stub!\n", iface, surface); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetSceneBackgroundDepth(IDirect3DRMFrame *iface, + IDirectDrawSurface **surface) +{ + FIXME("iface %p, surface %p stub!\n", iface, surface); + + return E_NOTIMPL; +} + static D3DCOLOR WINAPI d3drm_frame3_GetSceneFogColor(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1812,6 +1848,20 @@ static D3DCOLOR WINAPI d3drm_frame3_GetSceneFogColor(IDirect3DRMFrame3 *iface) return 0; } +static D3DCOLOR WINAPI d3drm_frame2_GetSceneFogColor(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + +static D3DCOLOR WINAPI d3drm_frame1_GetSceneFogColor(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return 0; +} + static BOOL WINAPI d3drm_frame3_GetSceneFogEnable(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1819,6 +1869,20 @@ static BOOL WINAPI d3drm_frame3_GetSceneFogEnable(IDirect3DRMFrame3 *iface) return FALSE; } +static BOOL WINAPI d3drm_frame2_GetSceneFogEnable(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return FALSE; +} + +static BOOL WINAPI d3drm_frame1_GetSceneFogEnable(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return FALSE; +} + static D3DRMFOGMODE WINAPI d3drm_frame3_GetSceneFogMode(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1826,6 +1890,20 @@ static D3DRMFOGMODE WINAPI d3drm_frame3_GetSceneFogMode(IDirect3DRMFrame3 *iface return D3DRMFOG_LINEAR; } +static D3DRMFOGMODE WINAPI d3drm_frame2_GetSceneFogMode(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMFOG_LINEAR; +} + +static D3DRMFOGMODE WINAPI d3drm_frame1_GetSceneFogMode(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMFOG_LINEAR; +} + static HRESULT WINAPI d3drm_frame3_GetSceneFogParams(IDirect3DRMFrame3 *iface, D3DVALUE *start, D3DVALUE *end, D3DVALUE *density) { @@ -1834,6 +1912,22 @@ static HRESULT WINAPI d3drm_frame3_GetSceneFogParams(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetSceneFogParams(IDirect3DRMFrame2 *iface, + D3DVALUE *start, D3DVALUE *end, D3DVALUE *density) +{ + FIXME("iface %p, start %p, end %p, density %p stub!\n", iface, start, end, density); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_GetSceneFogParams(IDirect3DRMFrame *iface, + D3DVALUE *start, D3DVALUE *end, D3DVALUE *density) +{ + FIXME("iface %p, start %p, end %p, density %p stub!\n", iface, start, end, density); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneBackground(IDirect3DRMFrame3 *iface, D3DCOLOR color) { struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface); @@ -1845,6 +1939,24 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackground(IDirect3DRMFrame3 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_SetSceneBackground(IDirect3DRMFrame2 *iface, D3DCOLOR color) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, color 0x%08x.\n", iface, color); + + return d3drm_frame3_SetSceneBackground(&frame->IDirect3DRMFrame3_iface, color); +} + +static HRESULT WINAPI d3drm_frame1_SetSceneBackground(IDirect3DRMFrame *iface, D3DCOLOR color) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, color 0x%08x.\n", iface, color); + + return d3drm_frame3_SetSceneBackground(&frame->IDirect3DRMFrame3_iface, color); +} + static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundRGB(IDirect3DRMFrame3 *iface, D3DVALUE red, D3DVALUE green, D3DVALUE blue) { @@ -1858,6 +1970,26 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundRGB(IDirect3DRMFrame3 *ifac return D3DRM_OK; } +static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundRGB(IDirect3DRMFrame2 *iface, + D3DVALUE red, D3DVALUE green, D3DVALUE blue) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface); + + TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue); + + return d3drm_frame3_SetSceneBackgroundRGB(&frame->IDirect3DRMFrame3_iface, red, green, blue); +} + +static HRESULT WINAPI d3drm_frame1_SetSceneBackgroundRGB(IDirect3DRMFrame *iface, + D3DVALUE red, D3DVALUE green, D3DVALUE blue) +{ + struct d3drm_frame *frame = impl_from_IDirect3DRMFrame(iface); + + TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue); + + return d3drm_frame3_SetSceneBackgroundRGB(&frame->IDirect3DRMFrame3_iface, red, green, blue); +} + static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundDepth(IDirect3DRMFrame3 *iface, IDirectDrawSurface *surface) { @@ -1866,6 +1998,22 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundDepth(IDirect3DRMFrame3 *if return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundDepth(IDirect3DRMFrame2 *iface, + IDirectDrawSurface *surface) +{ + FIXME("iface %p, surface %p stub!\n", iface, surface); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneBackgroundDepth(IDirect3DRMFrame *iface, + IDirectDrawSurface *surface) +{ + FIXME("iface %p, surface %p stub!\n", iface, surface); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundImage(IDirect3DRMFrame3 *iface, IDirect3DRMTexture3 *texture) { @@ -1874,6 +2022,22 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundImage(IDirect3DRMFrame3 *if return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneBackgroundImage(IDirect3DRMFrame2 *iface, + IDirect3DRMTexture *texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneBackgroundImage(IDirect3DRMFrame *iface, + IDirect3DRMTexture *texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneFogEnable(IDirect3DRMFrame3 *iface, BOOL enable) { FIXME("iface %p, enable %#x stub!\n", iface, enable); @@ -1881,6 +2045,20 @@ static HRESULT WINAPI d3drm_frame3_SetSceneFogEnable(IDirect3DRMFrame3 *iface, B return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneFogEnable(IDirect3DRMFrame2 *iface, BOOL enable) +{ + FIXME("iface %p, enable %#x stub!\n", iface, enable); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneFogEnable(IDirect3DRMFrame *iface, BOOL enable) +{ + FIXME("iface %p, enable %#x stub!\n", iface, enable); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneFogColor(IDirect3DRMFrame3 *iface, D3DCOLOR color) { FIXME("iface %p, color 0x%08x stub!\n", iface, color); @@ -1888,6 +2066,20 @@ static HRESULT WINAPI d3drm_frame3_SetSceneFogColor(IDirect3DRMFrame3 *iface, D3 return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneFogColor(IDirect3DRMFrame2 *iface, D3DCOLOR color) +{ + FIXME("iface %p, color 0x%08x stub!\n", iface, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneFogColor(IDirect3DRMFrame *iface, D3DCOLOR color) +{ + FIXME("iface %p, color 0x%08x stub!\n", iface, color); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneFogMode(IDirect3DRMFrame3 *iface, D3DRMFOGMODE mode) { FIXME("iface %p, mode %#x stub!\n", iface, mode); @@ -1895,6 +2087,20 @@ static HRESULT WINAPI d3drm_frame3_SetSceneFogMode(IDirect3DRMFrame3 *iface, D3D return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneFogMode(IDirect3DRMFrame2 *iface, D3DRMFOGMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneFogMode(IDirect3DRMFrame *iface, D3DRMFOGMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSceneFogParams(IDirect3DRMFrame3 *iface, D3DVALUE start, D3DVALUE end, D3DVALUE density) { @@ -1903,6 +2109,22 @@ static HRESULT WINAPI d3drm_frame3_SetSceneFogParams(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSceneFogParams(IDirect3DRMFrame2 *iface, + D3DVALUE start, D3DVALUE end, D3DVALUE density) +{ + FIXME("iface %p, start %.8e, end %.8e, density %.8e stub!\n", iface, start, end, density); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSceneFogParams(IDirect3DRMFrame *iface, + D3DVALUE start, D3DVALUE end, D3DVALUE density) +{ + FIXME("iface %p, start %.8e, end %.8e, density %.8e stub!\n", iface, start, end, density); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetColor(IDirect3DRMFrame3 *iface, D3DCOLOR color) { FIXME("iface %p, color 0x%08x stub!\n", iface, color); @@ -1910,6 +2132,20 @@ static HRESULT WINAPI d3drm_frame3_SetColor(IDirect3DRMFrame3 *iface, D3DCOLOR c return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetColor(IDirect3DRMFrame2 *iface, D3DCOLOR color) +{ + FIXME("iface %p, color 0x%08x stub!\n", iface, color); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetColor(IDirect3DRMFrame *iface, D3DCOLOR color) +{ + FIXME("iface %p, color 0x%08x stub!\n", iface, color); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetColorRGB(IDirect3DRMFrame3 *iface, D3DVALUE red, D3DVALUE green, D3DVALUE blue) { @@ -1918,6 +2154,22 @@ static HRESULT WINAPI d3drm_frame3_SetColorRGB(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetColorRGB(IDirect3DRMFrame2 *iface, + D3DVALUE red, D3DVALUE green, D3DVALUE blue) +{ + FIXME("iface %p, red %.8e, green %.8e, blue %.8e stub!\n", iface, red, green, blue); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetColorRGB(IDirect3DRMFrame *iface, + D3DVALUE red, D3DVALUE green, D3DVALUE blue) +{ + FIXME("iface %p, red %.8e, green %.8e, blue %.8e stub!\n", iface, red, green, blue); + + return E_NOTIMPL; +} + static D3DRMZBUFFERMODE WINAPI d3drm_frame3_GetZbufferMode(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -1925,6 +2177,20 @@ static D3DRMZBUFFERMODE WINAPI d3drm_frame3_GetZbufferMode(IDirect3DRMFrame3 *if return D3DRMZBUFFER_FROMPARENT; } +static D3DRMZBUFFERMODE WINAPI d3drm_frame2_GetZbufferMode(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMZBUFFER_FROMPARENT; +} + +static D3DRMZBUFFERMODE WINAPI d3drm_frame1_GetZbufferMode(IDirect3DRMFrame *iface) +{ + FIXME("iface %p stub!\n", iface); + + return D3DRMZBUFFER_FROMPARENT; +} + static HRESULT WINAPI d3drm_frame3_SetMaterialMode(IDirect3DRMFrame3 *iface, D3DRMMATERIALMODE mode) { FIXME("iface %p, mode %#x stub!\n", iface, mode); @@ -1932,6 +2198,20 @@ static HRESULT WINAPI d3drm_frame3_SetMaterialMode(IDirect3DRMFrame3 *iface, D3D return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetMaterialMode(IDirect3DRMFrame2 *iface, D3DRMMATERIALMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetMaterialMode(IDirect3DRMFrame *iface, D3DRMMATERIALMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetOrientation(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) { @@ -1941,6 +2221,24 @@ static HRESULT WINAPI d3drm_frame3_SetOrientation(IDirect3DRMFrame3 *iface, IDir return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetOrientation(IDirect3DRMFrame2 *iface, IDirect3DRMFrame *reference, + D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) +{ + FIXME("iface %p, reference %p, dx %.8e, dy %.8e, dz %.8e, ux %.8e, uy %.8e, uz %.8e stub!\n", + iface, reference, dx, dy, dz, ux, uy, uz); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetOrientation(IDirect3DRMFrame *iface, IDirect3DRMFrame *reference, + D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz) +{ + FIXME("iface %p, reference %p, dx %.8e, dy %.8e, dz %.8e, ux %.8e, uy %.8e, uz %.8e stub!\n", + iface, reference, dx, dy, dz, ux, uy, uz); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetPosition(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) { @@ -1949,6 +2247,22 @@ static HRESULT WINAPI d3drm_frame3_SetPosition(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetPosition(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e stub!\n", iface, reference, x, y, z); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetPosition(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e stub!\n", iface, reference, x, y, z); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetRotation(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) { @@ -1958,6 +2272,24 @@ static HRESULT WINAPI d3drm_frame3_SetRotation(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetRotation(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", + iface, reference, x, y, z, theta); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetRotation(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, theta %.8e stub!\n", + iface, reference, x, y, z, theta); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetSortMode(IDirect3DRMFrame3 *iface, D3DRMSORTMODE mode) { FIXME("iface %p, mode %#x stub!\n", iface, mode); @@ -1965,6 +2297,20 @@ static HRESULT WINAPI d3drm_frame3_SetSortMode(IDirect3DRMFrame3 *iface, D3DRMSO return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetSortMode(IDirect3DRMFrame2 *iface, D3DRMSORTMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetSortMode(IDirect3DRMFrame *iface, D3DRMSORTMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetTexture(IDirect3DRMFrame3 *iface, IDirect3DRMTexture3 *texture) { FIXME("iface %p, texture %p stub!\n", iface, texture); @@ -1972,6 +2318,34 @@ static HRESULT WINAPI d3drm_frame3_SetTexture(IDirect3DRMFrame3 *iface, IDirect3 return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetTexture(IDirect3DRMFrame2 *iface, IDirect3DRMTexture *texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetTexture(IDirect3DRMFrame *iface, IDirect3DRMTexture *texture) +{ + FIXME("iface %p, texture %p stub!\n", iface, texture); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame2_SetTextureTopology(IDirect3DRMFrame2 *iface, BOOL wrap_u, BOOL wrap_v) +{ + FIXME("iface %p, wrap_u %#x, wrap_v %#x stub!\n", iface, wrap_u, wrap_v); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetTextureTopology(IDirect3DRMFrame *iface, BOOL wrap_u, BOOL wrap_v) +{ + FIXME("iface %p, wrap_u %#x, wrap_v %#x stub!\n", iface, wrap_u, wrap_v); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetVelocity(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) { @@ -1981,6 +2355,24 @@ static HRESULT WINAPI d3drm_frame3_SetVelocity(IDirect3DRMFrame3 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetVelocity(IDirect3DRMFrame2 *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, with_rotation %#x stub!\n", + iface, reference, x, y, z, with_rotation); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetVelocity(IDirect3DRMFrame *iface, + IDirect3DRMFrame *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation) +{ + FIXME("iface %p, reference %p, x %.8e, y %.8e, z %.8e, with_rotation %#x stub!\n", + iface, reference, x, y, z, with_rotation); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetZbufferMode(IDirect3DRMFrame3 *iface, D3DRMZBUFFERMODE mode) { FIXME("iface %p, mode %#x stub!\n", iface, mode); @@ -1988,6 +2380,20 @@ static HRESULT WINAPI d3drm_frame3_SetZbufferMode(IDirect3DRMFrame3 *iface, D3DR return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_SetZbufferMode(IDirect3DRMFrame2 *iface, D3DRMZBUFFERMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_SetZbufferMode(IDirect3DRMFrame *iface, D3DRMZBUFFERMODE mode) +{ + FIXME("iface %p, mode %#x stub!\n", iface, mode); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_Transform(IDirect3DRMFrame3 *iface, D3DVECTOR *d, D3DVECTOR *s) { FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); @@ -1995,6 +2401,28 @@ static HRESULT WINAPI d3drm_frame3_Transform(IDirect3DRMFrame3 *iface, D3DVECTOR return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_Transform(IDirect3DRMFrame2 *iface, D3DVECTOR *d, D3DVECTOR *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame1_Transform(IDirect3DRMFrame *iface, D3DVECTOR *d, D3DVECTOR *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + +static HRESULT WINAPI d3drm_frame2_AddMoveCallback2(IDirect3DRMFrame2 *iface, + D3DRMFRAMEMOVECALLBACK cb, void *ctx, DWORD flags) +{ + FIXME("iface %p, cb %p, ctx %p, flags %#x stub!\n", iface, cb, ctx, flags); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetBox(IDirect3DRMFrame3 *iface, D3DRMBOX *box) { FIXME("iface %p, box %p stub!\n", iface, box); @@ -2002,6 +2430,13 @@ static HRESULT WINAPI d3drm_frame3_GetBox(IDirect3DRMFrame3 *iface, D3DRMBOX *bo return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetBox(IDirect3DRMFrame2 *iface, D3DRMBOX *box) +{ + FIXME("iface %p, box %p stub!\n", iface, box); + + return E_NOTIMPL; +} + static BOOL WINAPI d3drm_frame3_GetBoxEnable(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -2009,6 +2444,13 @@ static BOOL WINAPI d3drm_frame3_GetBoxEnable(IDirect3DRMFrame3 *iface) return FALSE; } +static BOOL WINAPI d3drm_frame2_GetBoxEnable(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return FALSE; +} + static HRESULT WINAPI d3drm_frame3_GetAxes(IDirect3DRMFrame3 *iface, D3DVECTOR *dir, D3DVECTOR *up) { FIXME("iface %p, dir %p, up %p stub!\n", iface, dir, up); @@ -2016,6 +2458,13 @@ static HRESULT WINAPI d3drm_frame3_GetAxes(IDirect3DRMFrame3 *iface, D3DVECTOR * return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetAxes(IDirect3DRMFrame2 *iface, D3DVECTOR *dir, D3DVECTOR *up) +{ + FIXME("iface %p, dir %p, up %p stub!\n", iface, dir, up); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_GetMaterial(IDirect3DRMFrame3 *iface, IDirect3DRMMaterial2 **material) { FIXME("iface %p, material %p stub!\n", iface, material); @@ -2023,6 +2472,13 @@ static HRESULT WINAPI d3drm_frame3_GetMaterial(IDirect3DRMFrame3 *iface, IDirect return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetMaterial(IDirect3DRMFrame2 *iface, IDirect3DRMMaterial **material) +{ + FIXME("iface %p, material %p stub!\n", iface, material); + + return E_NOTIMPL; +} + static BOOL WINAPI d3drm_frame3_GetInheritAxes(IDirect3DRMFrame3 *iface) { FIXME("iface %p stub!\n", iface); @@ -2030,6 +2486,13 @@ static BOOL WINAPI d3drm_frame3_GetInheritAxes(IDirect3DRMFrame3 *iface) return FALSE; } +static BOOL WINAPI d3drm_frame2_GetInheritAxes(IDirect3DRMFrame2 *iface) +{ + FIXME("iface %p stub!\n", iface); + + return FALSE; +} + static HRESULT WINAPI d3drm_frame3_GetHierarchyBox(IDirect3DRMFrame3 *iface, D3DRMBOX *box) { FIXME("iface %p, box %p stub!\n", iface, box); @@ -2037,6 +2500,13 @@ static HRESULT WINAPI d3drm_frame3_GetHierarchyBox(IDirect3DRMFrame3 *iface, D3D return E_NOTIMPL; } +static HRESULT WINAPI d3drm_frame2_GetHierarchyBox(IDirect3DRMFrame2 *iface, D3DRMBOX *box) +{ + FIXME("iface %p, box %p stub!\n", iface, box); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_frame3_SetBox(IDirect3DRMFrame3 *iface, D3DRMBOX *box) { FIXME("iface %p, box %p stub!\n", iface, box); @@ -2253,6 +2723,159 @@ static const struct IDirect3DRMFrame3Vtbl d3drm_frame3_vtbl = d3drm_frame3_GetMaterialOverride, }; +static const struct IDirect3DRMFrame2Vtbl d3drm_frame2_vtbl = +{ + d3drm_frame2_QueryInterface, + d3drm_frame2_AddRef, + d3drm_frame2_Release, + d3drm_frame2_Clone, + d3drm_frame2_AddDestroyCallback, + d3drm_frame2_DeleteDestroyCallback, + d3drm_frame2_SetAppData, + d3drm_frame2_GetAppData, + d3drm_frame2_SetName, + d3drm_frame2_GetName, + d3drm_frame2_GetClassName, + d3drm_frame2_AddChild, + d3drm_frame2_AddLight, + d3drm_frame2_AddMoveCallback, + d3drm_frame2_AddTransform, + d3drm_frame2_AddTranslation, + d3drm_frame2_AddScale, + d3drm_frame2_AddRotation, + d3drm_frame2_AddVisual, + d3drm_frame2_GetChildren, + d3drm_frame2_GetColor, + d3drm_frame2_GetLights, + d3drm_frame2_GetMaterialMode, + d3drm_frame2_GetParent, + d3drm_frame2_GetPosition, + d3drm_frame2_GetRotation, + d3drm_frame2_GetScene, + d3drm_frame2_GetSortMode, + d3drm_frame2_GetTexture, + d3drm_frame2_GetTransform, + d3drm_frame2_GetVelocity, + d3drm_frame2_GetOrientation, + d3drm_frame2_GetVisuals, + d3drm_frame2_GetTextureTopology, + d3drm_frame2_InverseTransform, + d3drm_frame2_Load, + d3drm_frame2_LookAt, + d3drm_frame2_Move, + d3drm_frame2_DeleteChild, + d3drm_frame2_DeleteLight, + d3drm_frame2_DeleteMoveCallback, + d3drm_frame2_DeleteVisual, + d3drm_frame2_GetSceneBackground, + d3drm_frame2_GetSceneBackgroundDepth, + d3drm_frame2_GetSceneFogColor, + d3drm_frame2_GetSceneFogEnable, + d3drm_frame2_GetSceneFogMode, + d3drm_frame2_GetSceneFogParams, + d3drm_frame2_SetSceneBackground, + d3drm_frame2_SetSceneBackgroundRGB, + d3drm_frame2_SetSceneBackgroundDepth, + d3drm_frame2_SetSceneBackgroundImage, + d3drm_frame2_SetSceneFogEnable, + d3drm_frame2_SetSceneFogColor, + d3drm_frame2_SetSceneFogMode, + d3drm_frame2_SetSceneFogParams, + d3drm_frame2_SetColor, + d3drm_frame2_SetColorRGB, + d3drm_frame2_GetZbufferMode, + d3drm_frame2_SetMaterialMode, + d3drm_frame2_SetOrientation, + d3drm_frame2_SetPosition, + d3drm_frame2_SetRotation, + d3drm_frame2_SetSortMode, + d3drm_frame2_SetTexture, + d3drm_frame2_SetTextureTopology, + d3drm_frame2_SetVelocity, + d3drm_frame2_SetZbufferMode, + d3drm_frame2_Transform, + d3drm_frame2_AddMoveCallback2, + d3drm_frame2_GetBox, + d3drm_frame2_GetBoxEnable, + d3drm_frame2_GetAxes, + d3drm_frame2_GetMaterial, + d3drm_frame2_GetInheritAxes, + d3drm_frame2_GetHierarchyBox, +}; + +static const struct IDirect3DRMFrameVtbl d3drm_frame1_vtbl = +{ + d3drm_frame1_QueryInterface, + d3drm_frame1_AddRef, + d3drm_frame1_Release, + d3drm_frame1_Clone, + d3drm_frame1_AddDestroyCallback, + d3drm_frame1_DeleteDestroyCallback, + d3drm_frame1_SetAppData, + d3drm_frame1_GetAppData, + d3drm_frame1_SetName, + d3drm_frame1_GetName, + d3drm_frame1_GetClassName, + d3drm_frame1_AddChild, + d3drm_frame1_AddLight, + d3drm_frame1_AddMoveCallback, + d3drm_frame1_AddTransform, + d3drm_frame1_AddTranslation, + d3drm_frame1_AddScale, + d3drm_frame1_AddRotation, + d3drm_frame1_AddVisual, + d3drm_frame1_GetChildren, + d3drm_frame1_GetColor, + d3drm_frame1_GetLights, + d3drm_frame1_GetMaterialMode, + d3drm_frame1_GetParent, + d3drm_frame1_GetPosition, + d3drm_frame1_GetRotation, + d3drm_frame1_GetScene, + d3drm_frame1_GetSortMode, + d3drm_frame1_GetTexture, + d3drm_frame1_GetTransform, + d3drm_frame1_GetVelocity, + d3drm_frame1_GetOrientation, + d3drm_frame1_GetVisuals, + d3drm_frame1_GetTextureTopology, + d3drm_frame1_InverseTransform, + d3drm_frame1_Load, + d3drm_frame1_LookAt, + d3drm_frame1_Move, + d3drm_frame1_DeleteChild, + d3drm_frame1_DeleteLight, + d3drm_frame1_DeleteMoveCallback, + d3drm_frame1_DeleteVisual, + d3drm_frame1_GetSceneBackground, + d3drm_frame1_GetSceneBackgroundDepth, + d3drm_frame1_GetSceneFogColor, + d3drm_frame1_GetSceneFogEnable, + d3drm_frame1_GetSceneFogMode, + d3drm_frame1_GetSceneFogParams, + d3drm_frame1_SetSceneBackground, + d3drm_frame1_SetSceneBackgroundRGB, + d3drm_frame1_SetSceneBackgroundDepth, + d3drm_frame1_SetSceneBackgroundImage, + d3drm_frame1_SetSceneFogEnable, + d3drm_frame1_SetSceneFogColor, + d3drm_frame1_SetSceneFogMode, + d3drm_frame1_SetSceneFogParams, + d3drm_frame1_SetColor, + d3drm_frame1_SetColorRGB, + d3drm_frame1_GetZbufferMode, + d3drm_frame1_SetMaterialMode, + d3drm_frame1_SetOrientation, + d3drm_frame1_SetPosition, + d3drm_frame1_SetRotation, + d3drm_frame1_SetSortMode, + d3drm_frame1_SetTexture, + d3drm_frame1_SetTextureTopology, + d3drm_frame1_SetVelocity, + d3drm_frame1_SetZbufferMode, + d3drm_frame1_Transform, +}; + static inline struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface) { if (!iface) @@ -2262,38 +2885,48 @@ static inline struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRM return impl_from_IDirect3DRMFrame3(iface); } -HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown *parent, IUnknown **out) +struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame(IDirect3DRMFrame *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3drm_frame1_vtbl); + + return impl_from_IDirect3DRMFrame(iface); +} + +HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, IDirect3DRM *d3drm) { struct d3drm_frame *object; - HRESULT hr; + HRESULT hr = D3DRM_OK; - TRACE("riid %s, parent %p, out %p.\n", debugstr_guid(riid), parent, out); + TRACE("frame %p, parent_frame %p, d3drm %p.\n", frame, parent_frame, d3drm); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY; + object->IDirect3DRMFrame_iface.lpVtbl = &d3drm_frame1_vtbl; object->IDirect3DRMFrame2_iface.lpVtbl = &d3drm_frame2_vtbl; object->IDirect3DRMFrame3_iface.lpVtbl = &d3drm_frame3_vtbl; + object->d3drm = d3drm; object->ref = 1; object->scenebackground = RGBA_MAKE(0, 0, 0, 0xff); memcpy(object->transform, identity, sizeof(D3DRMMATRIX4D)); - if (parent) + if (parent_frame) { IDirect3DRMFrame3 *p; - hr = IDirect3DRMFrame_QueryInterface(parent, &IID_IDirect3DRMFrame3, (void**)&p); - if (hr != S_OK) + if (FAILED(hr = IDirect3DRMFrame_QueryInterface(parent_frame, &IID_IDirect3DRMFrame3, (void **)&p))) { HeapFree(GetProcessHeap(), 0, object); return hr; } - IDirect3DRMFrame_Release(parent); + IDirect3DRMFrame_Release(parent_frame); IDirect3DRMFrame3_AddChild(p, &object->IDirect3DRMFrame3_iface); } - hr = IDirect3DRMFrame3_QueryInterface(&object->IDirect3DRMFrame3_iface, riid, (void **)out); - IDirect3DRMFrame3_Release(&object->IDirect3DRMFrame3_iface); + *frame = object; + return hr; } diff --git a/reactos/dll/directx/wine/d3drm/texture.c b/reactos/dll/directx/wine/d3drm/texture.c index 58d5cb3846a..c2e59d80e02 100644 --- a/reactos/dll/directx/wine/d3drm/texture.c +++ b/reactos/dll/directx/wine/d3drm/texture.c @@ -39,7 +39,7 @@ static void d3drm_texture_destroy(struct d3drm_texture *texture) { TRACE("texture %p is being destroyed.\n", texture); - d3drm_object_cleanup((IDirect3DRMObject*)&texture->IDirect3DRMTexture3_iface, &texture->obj); + d3drm_object_cleanup((IDirect3DRMObject*)&texture->IDirect3DRMTexture_iface, &texture->obj); if (texture->image) IDirect3DRM_Release(texture->d3drm); HeapFree(GetProcessHeap(), 0, texture); @@ -696,20 +696,20 @@ static HRESULT WINAPI d3drm_texture3_QueryInterface(IDirect3DRMTexture3 *iface, TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - if (IsEqualGUID(riid, &IID_IDirect3DRMTexture3) + if (IsEqualGUID(riid, &IID_IDirect3DRMTexture) || IsEqualGUID(riid, &IID_IDirect3DRMVisual) || IsEqualGUID(riid, &IID_IDirect3DRMObject) || IsEqualGUID(riid, &IID_IUnknown)) { - *out = &texture->IDirect3DRMTexture3_iface; + *out = &texture->IDirect3DRMTexture_iface; } else if (IsEqualGUID(riid, &IID_IDirect3DRMTexture2)) { *out = &texture->IDirect3DRMTexture2_iface; } - else if (IsEqualGUID(riid, &IID_IDirect3DRMTexture)) + else if (IsEqualGUID(riid, &IID_IDirect3DRMTexture3)) { - *out = &texture->IDirect3DRMTexture_iface; + *out = &texture->IDirect3DRMTexture3_iface; } else { diff --git a/reactos/dll/directx/wine/d3drm/viewport.c b/reactos/dll/directx/wine/d3drm/viewport.c index 6e43113f306..c2bff31f050 100644 --- a/reactos/dll/directx/wine/d3drm/viewport.c +++ b/reactos/dll/directx/wine/d3drm/viewport.c @@ -20,17 +20,6 @@ #include "d3drm_private.h" -struct d3drm_viewport -{ - struct d3drm_object obj; - IDirect3DRMViewport IDirect3DRMViewport_iface; - IDirect3DRMViewport2 IDirect3DRMViewport2_iface; - D3DVALUE back; - D3DVALUE front; - D3DVALUE field; - D3DRMPROJECTIONTYPE projection; -}; - static inline struct d3drm_viewport *impl_from_IDirect3DRMViewport(IDirect3DRMViewport *iface) { return CONTAINING_RECORD(iface, struct d3drm_viewport, IDirect3DRMViewport_iface); @@ -41,9 +30,26 @@ static inline struct d3drm_viewport *impl_from_IDirect3DRMViewport2(IDirect3DRMV return CONTAINING_RECORD(iface, struct d3drm_viewport, IDirect3DRMViewport2_iface); } -static HRESULT WINAPI d3drm_viewport1_QueryInterface(IDirect3DRMViewport *iface, REFIID riid, void **out) +static void d3drm_viewport_destroy(struct d3drm_viewport *viewport) { - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + TRACE("viewport %p releasing attached interfaces.\n", viewport); + + d3drm_object_cleanup((IDirect3DRMObject *)&viewport->IDirect3DRMViewport_iface, &viewport->obj); + + if (viewport->d3d_viewport) + { + IDirect3DViewport_Release(viewport->d3d_viewport); + IDirect3DMaterial_Release(viewport->material); + IDirect3DRMFrame_Release(viewport->camera); + IDirect3DRM_Release(viewport->d3drm); + } + + HeapFree(GetProcessHeap(), 0, viewport); +} + +static HRESULT WINAPI d3drm_viewport2_QueryInterface(IDirect3DRMViewport2 *iface, REFIID riid, void **out) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); @@ -60,17 +66,26 @@ static HRESULT WINAPI d3drm_viewport1_QueryInterface(IDirect3DRMViewport *iface, else { *out = NULL; - WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid)); - return E_NOINTERFACE; + WARN("%s not implemented, returning CLASS_E_CLASSNOTAVAILABLE.\n", debugstr_guid(riid)); + return CLASS_E_CLASSNOTAVAILABLE; } IUnknown_AddRef((IUnknown *)*out); return S_OK; } -static ULONG WINAPI d3drm_viewport1_AddRef(IDirect3DRMViewport *iface) +static HRESULT WINAPI d3drm_viewport1_QueryInterface(IDirect3DRMViewport *iface, REFIID riid, void **out) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); + + return d3drm_viewport2_QueryInterface(&viewport->IDirect3DRMViewport2_iface, riid, out); +} + +static ULONG WINAPI d3drm_viewport2_AddRef(IDirect3DRMViewport2 *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); ULONG refcount = InterlockedIncrement(&viewport->obj.ref); TRACE("%p increasing refcount to %u.\n", iface, refcount); @@ -78,23 +93,38 @@ static ULONG WINAPI d3drm_viewport1_AddRef(IDirect3DRMViewport *iface) return refcount; } -static ULONG WINAPI d3drm_viewport1_Release(IDirect3DRMViewport *iface) +static ULONG WINAPI d3drm_viewport1_AddRef(IDirect3DRMViewport *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_AddRef(&viewport->IDirect3DRMViewport2_iface); +} + +static ULONG WINAPI d3drm_viewport2_Release(IDirect3DRMViewport2 *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); ULONG refcount = InterlockedDecrement(&viewport->obj.ref); TRACE("%p decreasing refcount to %u.\n", iface, refcount); if (!refcount) - { - d3drm_object_cleanup((IDirect3DRMObject*)iface, &viewport->obj); - HeapFree(GetProcessHeap(), 0, viewport); - } + d3drm_viewport_destroy(viewport); return refcount; } -static HRESULT WINAPI d3drm_viewport1_Clone(IDirect3DRMViewport *iface, +static ULONG WINAPI d3drm_viewport1_Release(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_Release(&viewport->IDirect3DRMViewport2_iface); +} + +static HRESULT WINAPI d3drm_viewport2_Clone(IDirect3DRMViewport2 *iface, IUnknown *outer, REFIID iid, void **out) { FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out); @@ -102,360 +132,7 @@ static HRESULT WINAPI d3drm_viewport1_Clone(IDirect3DRMViewport *iface, return E_NOTIMPL; } -static HRESULT WINAPI d3drm_viewport1_AddDestroyCallback(IDirect3DRMViewport *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, cb %p, ctx %p\n", iface, cb, ctx); - - return IDirect3DRMViewport2_AddDestroyCallback(&viewport->IDirect3DRMViewport2_iface, cb, ctx); -} - -static HRESULT WINAPI d3drm_viewport1_DeleteDestroyCallback(IDirect3DRMViewport *iface, - D3DRMOBJECTCALLBACK cb, void *ctx) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, cb %p, ctx %p\n", iface, cb, ctx); - - return IDirect3DRMViewport2_DeleteDestroyCallback(&viewport->IDirect3DRMViewport2_iface, cb, ctx); -} - -static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, DWORD data) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, data %#x\n", iface, data); - - return IDirect3DRMViewport2_SetAppData(&viewport->IDirect3DRMViewport2_iface, data); -} - -static DWORD WINAPI d3drm_viewport1_GetAppData(IDirect3DRMViewport *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMViewport2_GetAppData(&viewport->IDirect3DRMViewport2_iface); -} - -static HRESULT WINAPI d3drm_viewport1_SetName(IDirect3DRMViewport *iface, const char *name) -{ - FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_GetName(IDirect3DRMViewport *iface, DWORD *size, char *name) -{ - FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_GetClassName(IDirect3DRMViewport *iface, DWORD *size, char *name) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, size %p, name %p.\n", iface, size, name); - - return IDirect3DRMViewport2_GetClassName(&viewport->IDirect3DRMViewport2_iface, size, name); -} - -static HRESULT WINAPI d3drm_viewport1_Init(IDirect3DRMViewport *iface, IDirect3DRMDevice *device, - IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height) -{ - FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u stub!\n", - iface, device, camera, x, y, width, height); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_Clear(IDirect3DRMViewport *iface) -{ - FIXME("iface %p.\n", iface); - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_viewport1_Render(IDirect3DRMViewport *iface, IDirect3DRMFrame *frame) -{ - FIXME("iface %p, frame %p stub!\n", iface, frame); - - return D3DRM_OK; -} - -static HRESULT WINAPI d3drm_viewport1_SetFront(IDirect3DRMViewport *iface, D3DVALUE front) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, front %.8e.\n", iface, front); - - return IDirect3DRMViewport2_SetFront(&viewport->IDirect3DRMViewport2_iface, front); -} - -static HRESULT WINAPI d3drm_viewport1_SetBack(IDirect3DRMViewport *iface, D3DVALUE back) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, back %.8e.\n", iface, back); - - return IDirect3DRMViewport2_SetBack(&viewport->IDirect3DRMViewport2_iface, back); -} - -static HRESULT WINAPI d3drm_viewport1_SetField(IDirect3DRMViewport *iface, D3DVALUE field) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, field %.8e.\n", iface, field); - - return IDirect3DRMViewport2_SetField(&viewport->IDirect3DRMViewport2_iface, field); -} - -static HRESULT WINAPI d3drm_viewport1_SetUniformScaling(IDirect3DRMViewport *iface, BOOL b) -{ - FIXME("iface %p, b %#x stub!\n", iface, b); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_SetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame *camera) -{ - FIXME("iface %p, camera %p stub!\n", iface, camera); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_SetProjection(IDirect3DRMViewport *iface, D3DRMPROJECTIONTYPE type) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p, type %#x.\n", iface, type); - - return IDirect3DRMViewport2_SetProjection(&viewport->IDirect3DRMViewport2_iface, type); -} - -static HRESULT WINAPI d3drm_viewport1_Transform(IDirect3DRMViewport *iface, D3DRMVECTOR4D *d, D3DVECTOR *s) -{ - FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_InverseTransform(IDirect3DRMViewport *iface, D3DVECTOR *d, D3DRMVECTOR4D *s) -{ - FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_Configure(IDirect3DRMViewport *iface, - LONG x, LONG y, DWORD width, DWORD height) -{ - FIXME("iface %p, x %d, y %d, width %u, height %u stub!\n", iface, x, y, width, height); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_ForceUpdate(IDirect3DRMViewport *iface, - DWORD x1, DWORD y1, DWORD x2, DWORD y2) -{ - FIXME("iface %p, x1 %u, y1 %u, x2 %u, y2 %u stub!\n", iface, x1, y1, x2, y2); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_SetPlane(IDirect3DRMViewport *iface, - D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) -{ - FIXME("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e stub!\n", - iface, left, right, bottom, top); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_GetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame **camera) -{ - FIXME("iface %p, camera %p stub!\n", iface, camera); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_GetDevice(IDirect3DRMViewport *iface, IDirect3DRMDevice **device) -{ - FIXME("iface %p, device %p stub!\n", iface, device); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_GetPlane(IDirect3DRMViewport *iface, - D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) -{ - FIXME("iface %p, left %p, right %p, bottom %p, top %p stub!\n", - iface, left, right, bottom, top); - - return E_NOTIMPL; -} - -static HRESULT WINAPI d3drm_viewport1_Pick(IDirect3DRMViewport *iface, - LONG x, LONG y, IDirect3DRMPickedArray **visuals) -{ - FIXME("iface %p, x %d, y %d, visuals %p stub!\n", iface, x, y, visuals); - - return E_NOTIMPL; -} - -static BOOL WINAPI d3drm_viewport1_GetUniformScaling(IDirect3DRMViewport *iface) -{ - FIXME("iface %p stub!\n", iface); - - return FALSE; -} - -static LONG WINAPI d3drm_viewport1_GetX(IDirect3DRMViewport *iface) -{ - FIXME("iface %p stub!\n", iface); - - return E_NOTIMPL; -} - -static LONG WINAPI d3drm_viewport1_GetY(IDirect3DRMViewport *iface) -{ - FIXME("iface %p stub!\n", iface); - - return E_NOTIMPL; -} - -static DWORD WINAPI d3drm_viewport1_GetWidth(IDirect3DRMViewport *iface) -{ - FIXME("iface %p stub!\n", iface); - - return E_NOTIMPL; -} - -static DWORD WINAPI d3drm_viewport1_GetHeight(IDirect3DRMViewport *iface) -{ - FIXME("iface %p stub!\n", iface); - - return E_NOTIMPL; -} - -static D3DVALUE WINAPI d3drm_viewport1_GetField(IDirect3DRMViewport *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMViewport2_GetField(&viewport->IDirect3DRMViewport2_iface); -} - -static D3DVALUE WINAPI d3drm_viewport1_GetBack(IDirect3DRMViewport *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMViewport2_GetBack(&viewport->IDirect3DRMViewport2_iface); -} - -static D3DVALUE WINAPI d3drm_viewport1_GetFront(IDirect3DRMViewport *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMViewport2_GetFront(&viewport->IDirect3DRMViewport2_iface); -} - -static D3DRMPROJECTIONTYPE WINAPI d3drm_viewport1_GetProjection(IDirect3DRMViewport *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); - - TRACE("iface %p.\n", iface); - - return IDirect3DRMViewport2_GetProjection(&viewport->IDirect3DRMViewport2_iface); -} - -static HRESULT WINAPI d3drm_viewport1_GetDirect3DViewport(IDirect3DRMViewport *iface, - IDirect3DViewport **viewport) -{ - FIXME("iface %p, viewport %p stub!\n", iface, viewport); - - return E_NOTIMPL; -} - -static const struct IDirect3DRMViewportVtbl d3drm_viewport1_vtbl = -{ - d3drm_viewport1_QueryInterface, - d3drm_viewport1_AddRef, - d3drm_viewport1_Release, - d3drm_viewport1_Clone, - d3drm_viewport1_AddDestroyCallback, - d3drm_viewport1_DeleteDestroyCallback, - d3drm_viewport1_SetAppData, - d3drm_viewport1_GetAppData, - d3drm_viewport1_SetName, - d3drm_viewport1_GetName, - d3drm_viewport1_GetClassName, - d3drm_viewport1_Init, - d3drm_viewport1_Clear, - d3drm_viewport1_Render, - d3drm_viewport1_SetFront, - d3drm_viewport1_SetBack, - d3drm_viewport1_SetField, - d3drm_viewport1_SetUniformScaling, - d3drm_viewport1_SetCamera, - d3drm_viewport1_SetProjection, - d3drm_viewport1_Transform, - d3drm_viewport1_InverseTransform, - d3drm_viewport1_Configure, - d3drm_viewport1_ForceUpdate, - d3drm_viewport1_SetPlane, - d3drm_viewport1_GetCamera, - d3drm_viewport1_GetDevice, - d3drm_viewport1_GetPlane, - d3drm_viewport1_Pick, - d3drm_viewport1_GetUniformScaling, - d3drm_viewport1_GetX, - d3drm_viewport1_GetY, - d3drm_viewport1_GetWidth, - d3drm_viewport1_GetHeight, - d3drm_viewport1_GetField, - d3drm_viewport1_GetBack, - d3drm_viewport1_GetFront, - d3drm_viewport1_GetProjection, - d3drm_viewport1_GetDirect3DViewport, -}; - -static HRESULT WINAPI d3drm_viewport2_QueryInterface(IDirect3DRMViewport2 *iface, REFIID riid, void **out) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); - - TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); - - return d3drm_viewport1_QueryInterface(&viewport->IDirect3DRMViewport_iface, riid, out); -} - -static ULONG WINAPI d3drm_viewport2_AddRef(IDirect3DRMViewport2 *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); - - TRACE("iface %p.\n", iface); - - return d3drm_viewport1_AddRef(&viewport->IDirect3DRMViewport_iface); -} - -static ULONG WINAPI d3drm_viewport2_Release(IDirect3DRMViewport2 *iface) -{ - struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); - - TRACE("iface %p.\n", iface); - - return d3drm_viewport1_Release(&viewport->IDirect3DRMViewport_iface); -} - -static HRESULT WINAPI d3drm_viewport2_Clone(IDirect3DRMViewport2 *iface, +static HRESULT WINAPI d3drm_viewport1_Clone(IDirect3DRMViewport *iface, IUnknown *outer, REFIID iid, void **out) { FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out); @@ -473,6 +150,16 @@ static HRESULT WINAPI d3drm_viewport2_AddDestroyCallback(IDirect3DRMViewport2 *i return d3drm_object_add_destroy_callback(&viewport->obj, cb, ctx); } +static HRESULT WINAPI d3drm_viewport1_AddDestroyCallback(IDirect3DRMViewport *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, cb %p, ctx %p\n", iface, cb, ctx); + + return d3drm_viewport2_AddDestroyCallback(&viewport->IDirect3DRMViewport2_iface, cb, ctx); +} + static HRESULT WINAPI d3drm_viewport2_DeleteDestroyCallback(IDirect3DRMViewport2 *iface, D3DRMOBJECTCALLBACK cb, void *ctx) { @@ -483,6 +170,16 @@ static HRESULT WINAPI d3drm_viewport2_DeleteDestroyCallback(IDirect3DRMViewport2 return d3drm_object_delete_destroy_callback(&viewport->obj, cb, ctx); } +static HRESULT WINAPI d3drm_viewport1_DeleteDestroyCallback(IDirect3DRMViewport *iface, + D3DRMOBJECTCALLBACK cb, void *ctx) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, cb %p, ctx %p\n", iface, cb, ctx); + + return d3drm_viewport2_DeleteDestroyCallback(&viewport->IDirect3DRMViewport2_iface, cb, ctx); +} + static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, DWORD data) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -493,6 +190,15 @@ static HRESULT WINAPI d3drm_viewport2_SetAppData(IDirect3DRMViewport2 *iface, DW return S_OK; } +static HRESULT WINAPI d3drm_viewport1_SetAppData(IDirect3DRMViewport *iface, DWORD data) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, data %#x\n", iface, data); + + return d3drm_viewport2_SetAppData(&viewport->IDirect3DRMViewport2_iface, data); +} + static DWORD WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -502,6 +208,15 @@ static DWORD WINAPI d3drm_viewport2_GetAppData(IDirect3DRMViewport2 *iface) return viewport->obj.appdata; } +static DWORD WINAPI d3drm_viewport1_GetAppData(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_GetAppData(&viewport->IDirect3DRMViewport2_iface); +} + static HRESULT WINAPI d3drm_viewport2_SetName(IDirect3DRMViewport2 *iface, const char *name) { FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); @@ -509,6 +224,13 @@ static HRESULT WINAPI d3drm_viewport2_SetName(IDirect3DRMViewport2 *iface, const return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_SetName(IDirect3DRMViewport *iface, const char *name) +{ + FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name)); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_GetName(IDirect3DRMViewport2 *iface, DWORD *size, char *name) { FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); @@ -516,6 +238,13 @@ static HRESULT WINAPI d3drm_viewport2_GetName(IDirect3DRMViewport2 *iface, DWORD return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_GetName(IDirect3DRMViewport *iface, DWORD *size, char *name) +{ + FIXME("iface %p, size %p, name %p stub!\n", iface, size, name); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_GetClassName(IDirect3DRMViewport2 *iface, DWORD *size, char *name) { TRACE("iface %p, size %p, name %p.\n", iface, size, name); @@ -529,13 +258,143 @@ static HRESULT WINAPI d3drm_viewport2_GetClassName(IDirect3DRMViewport2 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_GetClassName(IDirect3DRMViewport *iface, DWORD *size, char *name) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, size %p, name %p.\n", iface, size, name); + + return d3drm_viewport2_GetClassName(&viewport->IDirect3DRMViewport2_iface, size, name); +} + static HRESULT WINAPI d3drm_viewport2_Init(IDirect3DRMViewport2 *iface, IDirect3DRMDevice3 *device, IDirect3DRMFrame3 *camera, DWORD x, DWORD y, DWORD width, DWORD height) { - FIXME("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u stub!\n", + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); + struct d3drm_device *device_obj = unsafe_impl_from_IDirect3DRMDevice3(device); + D3DVIEWPORT vp; + D3DVALUE scale; + IDirect3D *d3d1 = NULL; + D3DCOLOR color; + IDirect3DDevice *d3d_device = NULL; + IDirect3DMaterial *material = NULL; + D3DMATERIAL mat; + D3DMATERIALHANDLE hmat; + HRESULT hr = D3DRM_OK; + + TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u.\n", iface, device, camera, x, y, width, height); - return E_NOTIMPL; + if (!device_obj || !camera + || width > device_obj->width + || height > device_obj->height) + { + return D3DRMERR_BADOBJECT; + } + + if (viewport->d3d_viewport) + return D3DRMERR_BADOBJECT; + + IDirect3DRM_AddRef(viewport->d3drm); + + if (FAILED(hr = IDirect3DRMDevice3_GetDirect3DDevice(device, &d3d_device))) + goto cleanup; + + if (FAILED(hr = IDirect3DDevice_GetDirect3D(d3d_device, &d3d1))) + goto cleanup; + + if (FAILED(hr = IDirect3D_CreateViewport(d3d1, &viewport->d3d_viewport, NULL))) + goto cleanup; + + vp.dwSize = sizeof(vp); + vp.dwWidth = width; + vp.dwHeight = height; + vp.dwX = x; + vp.dwY = y; + scale = width > height ? (float)width / 2.0f : (float)height / 2.0f; + vp.dvScaleX = scale; + vp.dvScaleY = scale; + vp.dvMaxX = vp.dwWidth / (2.0f * vp.dvScaleX); + vp.dvMaxY = vp.dwHeight / (2.0f * vp.dvScaleY); + vp.dvMinZ = 0.0f; + vp.dvMaxZ = 1.0f; + + if (FAILED(hr = IDirect3DViewport_SetViewport(viewport->d3d_viewport, &vp))) + goto cleanup; + + if (FAILED(hr = IDirect3DDevice_AddViewport(d3d_device, viewport->d3d_viewport))) + goto cleanup; + + if (FAILED(hr = IDirect3DRMFrame3_QueryInterface(camera, &IID_IDirect3DRMFrame, (void **)&viewport->camera))) + goto cleanup; + + color = IDirect3DRMFrame3_GetSceneBackground(camera); + /* Create material (ambient/diffuse/emissive?), set material */ + if (FAILED(hr = IDirect3D_CreateMaterial(d3d1, &material, NULL))) + goto cleanup; + + memset(&mat, 0, sizeof(mat)); + mat.dwSize = sizeof(mat); + mat.u.diffuse.u1.r = RGBA_GETRED(color) / 255.0f; + mat.u.diffuse.u2.g = RGBA_GETGREEN(color) / 255.0f; + mat.u.diffuse.u3.b = RGBA_GETBLUE(color) / 255.0f; + mat.u.diffuse.u4.a = RGBA_GETALPHA(color) / 255.0f; + + if (FAILED(hr = IDirect3DMaterial_SetMaterial(material, &mat))) + goto cleanup; + + if (FAILED(hr = IDirect3DMaterial_GetHandle(material, d3d_device, &hmat))) + goto cleanup; + + hr = IDirect3DViewport_SetBackground(viewport->d3d_viewport, hmat); + viewport->material = material; + viewport->device = device_obj; + +cleanup: + + if (FAILED(hr)) + { + if (viewport->d3d_viewport) + { + IDirect3DViewport_Release(viewport->d3d_viewport); + viewport->d3d_viewport = NULL; + } + if (viewport->camera) + IDirect3DRMFrame_Release(viewport->camera); + if (material) + IDirect3DMaterial_Release(material); + IDirect3DRM_Release(viewport->d3drm); + } + if (d3d_device) + IDirect3DDevice_Release(d3d_device); + if (d3d1) + IDirect3D_Release(d3d1); + + return hr; +} + +static HRESULT WINAPI d3drm_viewport1_Init(IDirect3DRMViewport *iface, IDirect3DRMDevice *device, + IDirect3DRMFrame *camera, DWORD x, DWORD y, DWORD width, DWORD height) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + struct d3drm_frame *frame = unsafe_impl_from_IDirect3DRMFrame(camera); + IDirect3DRMDevice3 *device3; + HRESULT hr; + + TRACE("iface %p, device %p, camera %p, x %u, y %u, width %u, height %u.\n", + iface, device, camera, x, y, width, height); + + if (!device || !frame) + return D3DRMERR_BADOBJECT; + + if (FAILED(hr = IDirect3DRMDevice_QueryInterface(device, &IID_IDirect3DRMDevice3, (void **)&device3))) + return hr; + + hr = d3drm_viewport2_Init(&viewport->IDirect3DRMViewport2_iface, device3, &frame->IDirect3DRMFrame3_iface, + x, y, width, height); + IDirect3DRMDevice3_Release(device3); + + return hr; } static HRESULT WINAPI d3drm_viewport2_Clear(IDirect3DRMViewport2 *iface, DWORD flags) @@ -545,6 +404,13 @@ static HRESULT WINAPI d3drm_viewport2_Clear(IDirect3DRMViewport2 *iface, DWORD f return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_Clear(IDirect3DRMViewport *iface) +{ + FIXME("iface %p.\n", iface); + + return D3DRM_OK; +} + static HRESULT WINAPI d3drm_viewport2_Render(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 *frame) { FIXME("iface %p, frame %p stub!\n", iface, frame); @@ -552,6 +418,13 @@ static HRESULT WINAPI d3drm_viewport2_Render(IDirect3DRMViewport2 *iface, IDirec return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_Render(IDirect3DRMViewport *iface, IDirect3DRMFrame *frame) +{ + FIXME("iface %p, frame %p stub!\n", iface, frame); + + return D3DRM_OK; +} + static HRESULT WINAPI d3drm_viewport2_SetFront(IDirect3DRMViewport2 *iface, D3DVALUE front) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -563,6 +436,15 @@ static HRESULT WINAPI d3drm_viewport2_SetFront(IDirect3DRMViewport2 *iface, D3DV return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_SetFront(IDirect3DRMViewport *iface, D3DVALUE front) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, front %.8e.\n", iface, front); + + return d3drm_viewport2_SetFront(&viewport->IDirect3DRMViewport2_iface, front); +} + static HRESULT WINAPI d3drm_viewport2_SetBack(IDirect3DRMViewport2 *iface, D3DVALUE back) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -574,6 +456,15 @@ static HRESULT WINAPI d3drm_viewport2_SetBack(IDirect3DRMViewport2 *iface, D3DVA return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_SetBack(IDirect3DRMViewport *iface, D3DVALUE back) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, back %.8e.\n", iface, back); + + return d3drm_viewport2_SetBack(&viewport->IDirect3DRMViewport2_iface, back); +} + static HRESULT WINAPI d3drm_viewport2_SetField(IDirect3DRMViewport2 *iface, D3DVALUE field) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -585,6 +476,15 @@ static HRESULT WINAPI d3drm_viewport2_SetField(IDirect3DRMViewport2 *iface, D3DV return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_SetField(IDirect3DRMViewport *iface, D3DVALUE field) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, field %.8e.\n", iface, field); + + return d3drm_viewport2_SetField(&viewport->IDirect3DRMViewport2_iface, field); +} + static HRESULT WINAPI d3drm_viewport2_SetUniformScaling(IDirect3DRMViewport2 *iface, BOOL b) { FIXME("iface %p, b %#x stub!\n", iface, b); @@ -592,6 +492,13 @@ static HRESULT WINAPI d3drm_viewport2_SetUniformScaling(IDirect3DRMViewport2 *if return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_SetUniformScaling(IDirect3DRMViewport *iface, BOOL b) +{ + FIXME("iface %p, b %#x stub!\n", iface, b); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_SetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 *camera) { FIXME("iface %p, camera %p stub!\n", iface, camera); @@ -599,6 +506,13 @@ static HRESULT WINAPI d3drm_viewport2_SetCamera(IDirect3DRMViewport2 *iface, IDi return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_SetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame *camera) +{ + FIXME("iface %p, camera %p stub!\n", iface, camera); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_SetProjection(IDirect3DRMViewport2 *iface, D3DRMPROJECTIONTYPE type) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -610,6 +524,15 @@ static HRESULT WINAPI d3drm_viewport2_SetProjection(IDirect3DRMViewport2 *iface, return D3DRM_OK; } +static HRESULT WINAPI d3drm_viewport1_SetProjection(IDirect3DRMViewport *iface, D3DRMPROJECTIONTYPE type) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, type %#x.\n", iface, type); + + return d3drm_viewport2_SetProjection(&viewport->IDirect3DRMViewport2_iface, type); +} + static HRESULT WINAPI d3drm_viewport2_Transform(IDirect3DRMViewport2 *iface, D3DRMVECTOR4D *d, D3DVECTOR *s) { FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); @@ -617,6 +540,13 @@ static HRESULT WINAPI d3drm_viewport2_Transform(IDirect3DRMViewport2 *iface, D3D return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_Transform(IDirect3DRMViewport *iface, D3DRMVECTOR4D *d, D3DVECTOR *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_InverseTransform(IDirect3DRMViewport2 *iface, D3DVECTOR *d, D3DRMVECTOR4D *s) { FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); @@ -624,6 +554,13 @@ static HRESULT WINAPI d3drm_viewport2_InverseTransform(IDirect3DRMViewport2 *ifa return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_InverseTransform(IDirect3DRMViewport *iface, D3DVECTOR *d, D3DRMVECTOR4D *s) +{ + FIXME("iface %p, d %p, s %p stub!\n", iface, d, s); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_Configure(IDirect3DRMViewport2 *iface, LONG x, LONG y, DWORD width, DWORD height) { @@ -632,6 +569,14 @@ static HRESULT WINAPI d3drm_viewport2_Configure(IDirect3DRMViewport2 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_Configure(IDirect3DRMViewport *iface, + LONG x, LONG y, DWORD width, DWORD height) +{ + FIXME("iface %p, x %d, y %d, width %u, height %u stub!\n", iface, x, y, width, height); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_ForceUpdate(IDirect3DRMViewport2* iface, DWORD x1, DWORD y1, DWORD x2, DWORD y2) { @@ -640,6 +585,14 @@ static HRESULT WINAPI d3drm_viewport2_ForceUpdate(IDirect3DRMViewport2* iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_ForceUpdate(IDirect3DRMViewport *iface, + DWORD x1, DWORD y1, DWORD x2, DWORD y2) +{ + FIXME("iface %p, x1 %u, y1 %u, x2 %u, y2 %u stub!\n", iface, x1, y1, x2, y2); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_SetPlane(IDirect3DRMViewport2 *iface, D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) { @@ -649,6 +602,15 @@ static HRESULT WINAPI d3drm_viewport2_SetPlane(IDirect3DRMViewport2 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_SetPlane(IDirect3DRMViewport *iface, + D3DVALUE left, D3DVALUE right, D3DVALUE bottom, D3DVALUE top) +{ + FIXME("iface %p, left %.8e, right %.8e, bottom %.8e, top %.8e stub!\n", + iface, left, right, bottom, top); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_GetCamera(IDirect3DRMViewport2 *iface, IDirect3DRMFrame3 **camera) { FIXME("iface %p, camera %p stub!\n", iface, camera); @@ -656,14 +618,53 @@ static HRESULT WINAPI d3drm_viewport2_GetCamera(IDirect3DRMViewport2 *iface, IDi return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_GetCamera(IDirect3DRMViewport *iface, IDirect3DRMFrame **camera) +{ + FIXME("iface %p, camera %p stub!\n", iface, camera); + + return E_NOTIMPL; +} + static HRESULT WINAPI d3drm_viewport2_GetDevice(IDirect3DRMViewport2 *iface, IDirect3DRMDevice3 **device) { - FIXME("iface %p, device %p stub!\n", iface, device); + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); + + TRACE("iface %p, device %p.\n", iface, device); + + if (!viewport->device) + return D3DRMERR_BADOBJECT; + + *device = &viewport->device->IDirect3DRMDevice3_iface; + IDirect3DRMDevice3_AddRef(*device); + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_viewport1_GetDevice(IDirect3DRMViewport *iface, IDirect3DRMDevice **device) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, device %p.\n\n", iface, device); + + if (!viewport->device) + return D3DRMERR_BADOBJECT; + + *device = &viewport->device->IDirect3DRMDevice_iface; + IDirect3DRMDevice_AddRef(*device); + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_viewport2_GetPlane(IDirect3DRMViewport2 *iface, + D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) +{ + FIXME("iface %p, left %p, right %p, bottom %p, top %p stub!\n", + iface, left, right, bottom, top); return E_NOTIMPL; } -static HRESULT WINAPI d3drm_viewport2_GetPlane(IDirect3DRMViewport2 *iface, +static HRESULT WINAPI d3drm_viewport1_GetPlane(IDirect3DRMViewport *iface, D3DVALUE *left, D3DVALUE *right, D3DVALUE *bottom, D3DVALUE *top) { FIXME("iface %p, left %p, right %p, bottom %p, top %p stub!\n", @@ -680,6 +681,14 @@ static HRESULT WINAPI d3drm_viewport2_Pick(IDirect3DRMViewport2 *iface, return E_NOTIMPL; } +static HRESULT WINAPI d3drm_viewport1_Pick(IDirect3DRMViewport *iface, + LONG x, LONG y, IDirect3DRMPickedArray **visuals) +{ + FIXME("iface %p, x %d, y %d, visuals %p stub!\n", iface, x, y, visuals); + + return E_NOTIMPL; +} + static BOOL WINAPI d3drm_viewport2_GetUniformScaling(IDirect3DRMViewport2 *iface) { FIXME("iface %p stub!\n", iface); @@ -687,6 +696,13 @@ static BOOL WINAPI d3drm_viewport2_GetUniformScaling(IDirect3DRMViewport2 *iface return FALSE; } +static BOOL WINAPI d3drm_viewport1_GetUniformScaling(IDirect3DRMViewport *iface) +{ + FIXME("iface %p stub!\n", iface); + + return FALSE; +} + static LONG WINAPI d3drm_viewport2_GetX(IDirect3DRMViewport2 *iface) { FIXME("iface %p stub!\n", iface); @@ -694,6 +710,13 @@ static LONG WINAPI d3drm_viewport2_GetX(IDirect3DRMViewport2 *iface) return E_NOTIMPL; } +static LONG WINAPI d3drm_viewport1_GetX(IDirect3DRMViewport *iface) +{ + FIXME("iface %p stub!\n", iface); + + return E_NOTIMPL; +} + static LONG WINAPI d3drm_viewport2_GetY(IDirect3DRMViewport2 *iface) { FIXME("iface %p stub!\n", iface); @@ -701,6 +724,13 @@ static LONG WINAPI d3drm_viewport2_GetY(IDirect3DRMViewport2 *iface) return E_NOTIMPL; } +static LONG WINAPI d3drm_viewport1_GetY(IDirect3DRMViewport *iface) +{ + FIXME("iface %p stub!\n", iface); + + return E_NOTIMPL; +} + static DWORD WINAPI d3drm_viewport2_GetWidth(IDirect3DRMViewport2 *iface) { FIXME("iface %p stub!\n", iface); @@ -708,6 +738,13 @@ static DWORD WINAPI d3drm_viewport2_GetWidth(IDirect3DRMViewport2 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_viewport1_GetWidth(IDirect3DRMViewport *iface) +{ + FIXME("iface %p stub!\n", iface); + + return E_NOTIMPL; +} + static DWORD WINAPI d3drm_viewport2_GetHeight(IDirect3DRMViewport2 *iface) { FIXME("iface %p stub!\n", iface); @@ -715,6 +752,13 @@ static DWORD WINAPI d3drm_viewport2_GetHeight(IDirect3DRMViewport2 *iface) return E_NOTIMPL; } +static DWORD WINAPI d3drm_viewport1_GetHeight(IDirect3DRMViewport *iface) +{ + FIXME("iface %p stub!\n", iface); + + return E_NOTIMPL; +} + static D3DVALUE WINAPI d3drm_viewport2_GetField(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -724,6 +768,15 @@ static D3DVALUE WINAPI d3drm_viewport2_GetField(IDirect3DRMViewport2 *iface) return viewport->field; } +static D3DVALUE WINAPI d3drm_viewport1_GetField(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_GetField(&viewport->IDirect3DRMViewport2_iface); +} + static D3DVALUE WINAPI d3drm_viewport2_GetBack(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -733,6 +786,15 @@ static D3DVALUE WINAPI d3drm_viewport2_GetBack(IDirect3DRMViewport2 *iface) return viewport->back; } +static D3DVALUE WINAPI d3drm_viewport1_GetBack(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_GetBack(&viewport->IDirect3DRMViewport2_iface); +} + static D3DVALUE WINAPI d3drm_viewport2_GetFront(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -742,6 +804,15 @@ static D3DVALUE WINAPI d3drm_viewport2_GetFront(IDirect3DRMViewport2 *iface) return viewport->front; } +static D3DVALUE WINAPI d3drm_viewport1_GetFront(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_GetFront(&viewport->IDirect3DRMViewport2_iface); +} + static D3DRMPROJECTIONTYPE WINAPI d3drm_viewport2_GetProjection(IDirect3DRMViewport2 *iface) { struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport2(iface); @@ -751,12 +822,39 @@ static D3DRMPROJECTIONTYPE WINAPI d3drm_viewport2_GetProjection(IDirect3DRMViewp return viewport->projection; } +static D3DRMPROJECTIONTYPE WINAPI d3drm_viewport1_GetProjection(IDirect3DRMViewport *iface) +{ + struct d3drm_viewport *viewport = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p.\n", iface); + + return d3drm_viewport2_GetProjection(&viewport->IDirect3DRMViewport2_iface); +} + static HRESULT WINAPI d3drm_viewport2_GetDirect3DViewport(IDirect3DRMViewport2 *iface, IDirect3DViewport **viewport) { - FIXME("iface %p, viewport %p stub!\n", iface, viewport); + struct d3drm_viewport *viewport_object = impl_from_IDirect3DRMViewport2(iface); - return E_NOTIMPL; + TRACE("iface %p, viewport %p.\n", iface, viewport); + + if (!viewport_object->d3d_viewport) + return D3DRMERR_BADOBJECT; + + *viewport = viewport_object->d3d_viewport; + IDirect3DViewport_AddRef(*viewport); + + return D3DRM_OK; +} + +static HRESULT WINAPI d3drm_viewport1_GetDirect3DViewport(IDirect3DRMViewport *iface, + IDirect3DViewport **viewport) +{ + struct d3drm_viewport *viewport_object = impl_from_IDirect3DRMViewport(iface); + + TRACE("iface %p, viewport %p.\n", iface, viewport); + + return d3drm_viewport2_GetDirect3DViewport(&viewport_object->IDirect3DRMViewport2_iface, viewport); } static HRESULT WINAPI d3drm_viewport2_TransformVectors(IDirect3DRMViewport2 *iface, @@ -820,23 +918,64 @@ static const struct IDirect3DRMViewport2Vtbl d3drm_viewport2_vtbl = d3drm_viewport2_InverseTransformVectors, }; -HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown **out) +static const struct IDirect3DRMViewportVtbl d3drm_viewport1_vtbl = +{ + d3drm_viewport1_QueryInterface, + d3drm_viewport1_AddRef, + d3drm_viewport1_Release, + d3drm_viewport1_Clone, + d3drm_viewport1_AddDestroyCallback, + d3drm_viewport1_DeleteDestroyCallback, + d3drm_viewport1_SetAppData, + d3drm_viewport1_GetAppData, + d3drm_viewport1_SetName, + d3drm_viewport1_GetName, + d3drm_viewport1_GetClassName, + d3drm_viewport1_Init, + d3drm_viewport1_Clear, + d3drm_viewport1_Render, + d3drm_viewport1_SetFront, + d3drm_viewport1_SetBack, + d3drm_viewport1_SetField, + d3drm_viewport1_SetUniformScaling, + d3drm_viewport1_SetCamera, + d3drm_viewport1_SetProjection, + d3drm_viewport1_Transform, + d3drm_viewport1_InverseTransform, + d3drm_viewport1_Configure, + d3drm_viewport1_ForceUpdate, + d3drm_viewport1_SetPlane, + d3drm_viewport1_GetCamera, + d3drm_viewport1_GetDevice, + d3drm_viewport1_GetPlane, + d3drm_viewport1_Pick, + d3drm_viewport1_GetUniformScaling, + d3drm_viewport1_GetX, + d3drm_viewport1_GetY, + d3drm_viewport1_GetWidth, + d3drm_viewport1_GetHeight, + d3drm_viewport1_GetField, + d3drm_viewport1_GetBack, + d3drm_viewport1_GetFront, + d3drm_viewport1_GetProjection, + d3drm_viewport1_GetDirect3DViewport, +}; + +HRESULT d3drm_viewport_create(struct d3drm_viewport **viewport, IDirect3DRM *d3drm) { struct d3drm_viewport *object; - TRACE("riid %s, out %p.\n", debugstr_guid(riid), out); + TRACE("viewport %p, d3drm %p.\n", viewport, d3drm); if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)))) return E_OUTOFMEMORY; object->IDirect3DRMViewport_iface.lpVtbl = &d3drm_viewport1_vtbl; object->IDirect3DRMViewport2_iface.lpVtbl = &d3drm_viewport2_vtbl; + object->d3drm = d3drm; d3drm_object_init(&object->obj); - if (IsEqualGUID(riid, &IID_IDirect3DRMViewport2)) - *out = (IUnknown *)&object->IDirect3DRMViewport2_iface; - else - *out = (IUnknown *)&object->IDirect3DRMViewport_iface; + *viewport = object; return S_OK; } diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 07184e48ae4..6ee98bbada9 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -25,7 +25,7 @@ reactos/dll/directx/wine/amstream # Synced to WineStaging-1.9.16 reactos/dll/directx/wine/d3d8 # Synced to WineStaging-1.9.4 reactos/dll/directx/wine/d3d9 # Synced to WineStaging-1.9.4 reactos/dll/directx/wine/d3dcompiler_43 # Synced to WineStaging-1.9.4 -reactos/dll/directx/wine/d3drm # Synced to WineStaging-1.9.11 +reactos/dll/directx/wine/d3drm # Synced to WineStaging-1.9.16 reactos/dll/directx/wine/d3dx9_24 => 43 # Synced to WineStaging-1.9.4 reactos/dll/directx/wine/d3dxof # Synced to WineStaging-1.9.11 reactos/dll/directx/wine/ddraw # Synced to WineStaging-1.9.4