[PATCH 1/5] d3drm: Rearrange version 2 functions after version 3 for IDirect3DRMFrame*.

Aaryaman Vasishta jem456.vasishta at gmail.com
Sat Jun 18 17:29:07 CDT 2016


Signed-off-by: Aaryaman Vasishta <jem456.vasishta at gmail.com>
---
 dlls/d3drm/frame.c | 1464 ++++++++++++++++++++++++++--------------------------
 1 file changed, 733 insertions(+), 731 deletions(-)

diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index f20040b..0265b15 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -464,726 +464,6 @@ 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);
@@ -1213,6 +493,15 @@ 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 ULONG WINAPI d3drm_frame3_AddRef(IDirect3DRMFrame3 *iface)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1223,6 +512,15 @@ 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_frame3_Release(IDirect3DRMFrame3 *iface)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1254,6 +552,15 @@ 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 HRESULT WINAPI d3drm_frame3_Clone(IDirect3DRMFrame3 *iface,
         IUnknown *outer, REFIID iid, void **out)
 {
@@ -1262,6 +569,14 @@ 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_frame3_AddDestroyCallback(IDirect3DRMFrame3 *iface,
         D3DRMOBJECTCALLBACK cb, void *ctx)
 {
@@ -1270,6 +585,14 @@ 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_frame3_DeleteDestroyCallback(IDirect3DRMFrame3 *iface,
         D3DRMOBJECTCALLBACK cb, void *ctx)
 {
@@ -1278,6 +601,14 @@ 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_frame3_SetAppData(IDirect3DRMFrame3 *iface, DWORD data)
 {
     FIXME("iface %p, data %#x stub!\n", iface, data);
@@ -1285,6 +616,13 @@ 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 DWORD WINAPI d3drm_frame3_GetAppData(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1292,6 +630,13 @@ 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 HRESULT WINAPI d3drm_frame3_SetName(IDirect3DRMFrame3 *iface, const char *name)
 {
     FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
@@ -1299,6 +644,13 @@ 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_frame3_GetName(IDirect3DRMFrame3 *iface, DWORD *size, char *name)
 {
     FIXME("iface %p, size %p, name %p stub!\n", iface, size, name);
@@ -1306,6 +658,13 @@ 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_frame3_GetClassName(IDirect3DRMFrame3 *iface, DWORD *size, char *name)
 {
     TRACE("iface %p, size %p, name %p.\n", iface, size, name);
@@ -1319,6 +678,15 @@ 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_frame3_AddChild(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *child)
 {
     struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface);
@@ -1375,6 +743,24 @@ 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_frame3_AddLight(IDirect3DRMFrame3 *iface, IDirect3DRMLight *light)
 {
     struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface);
@@ -1419,6 +805,15 @@ 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_frame3_AddMoveCallback(IDirect3DRMFrame3 *iface,
         D3DRMFRAME3MOVECALLBACK cb, void *ctx, DWORD flags)
 {
@@ -1427,6 +822,14 @@ 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_frame3_AddTransform(IDirect3DRMFrame3 *iface,
         D3DRMCOMBINETYPE type, D3DRMMATRIX4D matrix)
 {
@@ -1456,6 +859,16 @@ 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_frame3_AddTranslation(IDirect3DRMFrame3 *iface,
         D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z)
 {
@@ -1464,6 +877,14 @@ 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_frame3_AddScale(IDirect3DRMFrame3 *iface,
         D3DRMCOMBINETYPE type, D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
 {
@@ -1472,6 +893,14 @@ 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_frame3_AddRotation(IDirect3DRMFrame3 *iface,
         D3DRMCOMBINETYPE type, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta)
 {
@@ -1481,6 +910,14 @@ 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_frame3_AddVisual(IDirect3DRMFrame3 *iface, IUnknown *visual)
 {
     struct d3drm_frame *This = impl_from_IDirect3DRMFrame3(iface);
@@ -1525,6 +962,15 @@ 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_frame3_GetChildren(IDirect3DRMFrame3 *iface, IDirect3DRMFrameArray **children)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1543,6 +989,15 @@ 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 D3DCOLOR WINAPI d3drm_frame3_GetColor(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1550,6 +1005,13 @@ 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 HRESULT WINAPI d3drm_frame3_GetLights(IDirect3DRMFrame3 *iface, IDirect3DRMLightArray **lights)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1568,6 +1030,15 @@ 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 D3DRMMATERIALMODE WINAPI d3drm_frame3_GetMaterialMode(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1575,9 +1046,38 @@ static D3DRMMATERIALMODE WINAPI d3drm_frame3_GetMaterialMode(IDirect3DRMFrame3 *
     return D3DRMMATERIAL_FROMPARENT;
 }
 
-static HRESULT WINAPI d3drm_frame3_GetParent(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 **parent)
+static D3DRMMATERIALMODE WINAPI d3drm_frame2_GetMaterialMode(IDirect3DRMFrame2 *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);
+
+    TRACE("iface %p, parent %p.\n", iface, parent);
+
+    if (!parent)
+        return D3DRMERR_BADVALUE;
+
+    if (frame->parent)
+    {
+        *parent = &frame->parent->IDirect3DRMFrame3_iface;
+        IDirect3DRMFrame_AddRef(*parent);
+    }
+    else
+    {
+        *parent = NULL;
+    }
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_frame2_GetParent(IDirect3DRMFrame2 *iface, IDirect3DRMFrame **parent)
 {
-    struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
+    struct d3drm_frame *frame = impl_from_IDirect3DRMFrame2(iface);
 
     TRACE("iface %p, parent %p.\n", iface, parent);
 
@@ -1586,7 +1086,7 @@ static HRESULT WINAPI d3drm_frame3_GetParent(IDirect3DRMFrame3 *iface, IDirect3D
 
     if (frame->parent)
     {
-        *parent = &frame->parent->IDirect3DRMFrame3_iface;
+        *parent = (IDirect3DRMFrame *)&frame->parent->IDirect3DRMFrame2_iface;
         IDirect3DRMFrame_AddRef(*parent);
     }
     else
@@ -1605,6 +1105,14 @@ 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_frame3_GetRotation(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVECTOR *axis, D3DVALUE *theta)
 {
@@ -1613,6 +1121,14 @@ 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_frame3_GetScene(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 **scene)
 {
     FIXME("iface %p, scene %p stub!\n", iface, scene);
@@ -1620,6 +1136,13 @@ 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 D3DRMSORTMODE WINAPI d3drm_frame3_GetSortMode(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1627,6 +1150,13 @@ 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 HRESULT WINAPI d3drm_frame3_GetTexture(IDirect3DRMFrame3 *iface, IDirect3DRMTexture3 **texture)
 {
     FIXME("iface %p, texture %p stub!\n", iface, texture);
@@ -1634,6 +1164,13 @@ 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_frame3_GetTransform(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DRMMATRIX4D matrix)
 {
@@ -1649,6 +1186,17 @@ 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_frame3_GetVelocity(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVECTOR *velocity, BOOL with_rotation)
 {
@@ -1658,6 +1206,15 @@ 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_frame3_GetOrientation(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVECTOR *dir, D3DVECTOR *up)
 {
@@ -1666,14 +1223,46 @@ 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_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_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_frame3_InverseTransform(IDirect3DRMFrame3 *iface, D3DVECTOR *d, D3DVECTOR *s)
 {
     FIXME("iface %p, d %p, s %p stub!\n", iface, d, s);
@@ -1681,6 +1270,13 @@ 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_frame3_Load(IDirect3DRMFrame3 *iface, void *filename,
         void *name, D3DRMLOADOPTIONS flags, D3DRMLOADTEXTURE3CALLBACK cb, void *ctx)
 {
@@ -1690,6 +1286,15 @@ 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_frame3_LookAt(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *target,
         IDirect3DRMFrame3 *reference, D3DRMFRAMECONSTRAINT constraint)
 {
@@ -1698,6 +1303,14 @@ 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_frame3_Move(IDirect3DRMFrame3 *iface, D3DVALUE delta)
 {
     FIXME("iface %p, delta %.8e stub!\n", iface, delta);
@@ -1705,6 +1318,13 @@ 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_frame3_DeleteChild(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *child)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1734,6 +1354,23 @@ 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_frame3_DeleteLight(IDirect3DRMFrame3 *iface, IDirect3DRMLight *light)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1761,6 +1398,15 @@ 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_frame3_DeleteMoveCallback(IDirect3DRMFrame3 *iface,
         D3DRMFRAME3MOVECALLBACK cb, void *ctx)
 {
@@ -1769,6 +1415,14 @@ 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_frame3_DeleteVisual(IDirect3DRMFrame3 *iface, IUnknown *visual)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1796,6 +1450,15 @@ 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 D3DCOLOR WINAPI d3drm_frame3_GetSceneBackground(IDirect3DRMFrame3 *iface)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1805,6 +1468,15 @@ 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 HRESULT WINAPI d3drm_frame3_GetSceneBackgroundDepth(IDirect3DRMFrame3 *iface,
         IDirectDrawSurface **surface)
 {
@@ -1813,6 +1485,14 @@ 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 D3DCOLOR WINAPI d3drm_frame3_GetSceneFogColor(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1820,6 +1500,13 @@ 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 BOOL WINAPI d3drm_frame3_GetSceneFogEnable(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1827,6 +1514,13 @@ 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 D3DRMFOGMODE WINAPI d3drm_frame3_GetSceneFogMode(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1834,6 +1528,13 @@ 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 HRESULT WINAPI d3drm_frame3_GetSceneFogParams(IDirect3DRMFrame3 *iface,
         D3DVALUE *start, D3DVALUE *end, D3DVALUE *density)
 {
@@ -1842,6 +1543,14 @@ 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_frame3_SetSceneBackground(IDirect3DRMFrame3 *iface, D3DCOLOR color)
 {
     struct d3drm_frame *frame = impl_from_IDirect3DRMFrame3(iface);
@@ -1853,6 +1562,15 @@ 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_frame3_SetSceneBackgroundRGB(IDirect3DRMFrame3 *iface,
         D3DVALUE red, D3DVALUE green, D3DVALUE blue)
 {
@@ -1866,6 +1584,16 @@ 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_frame3_SetSceneBackgroundDepth(IDirect3DRMFrame3 *iface,
         IDirectDrawSurface *surface)
 {
@@ -1874,22 +1602,52 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundDepth(IDirect3DRMFrame3 *if
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundImage(IDirect3DRMFrame3 *iface,
-        IDirect3DRMTexture3 *texture)
+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_frame3_SetSceneBackgroundImage(IDirect3DRMFrame3 *iface,
+        IDirect3DRMTexture3 *texture)
+{
+    FIXME("iface %p, texture %p stub!\n", iface, texture);
+
+    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_frame3_SetSceneFogEnable(IDirect3DRMFrame3 *iface, BOOL enable)
+{
+    FIXME("iface %p, enable %#x stub!\n", iface, enable);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_frame2_SetSceneFogEnable(IDirect3DRMFrame2 *iface, BOOL enable)
 {
-    FIXME("iface %p, texture %p stub!\n", iface, texture);
+    FIXME("iface %p, enable %#x stub!\n", iface, enable);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI d3drm_frame3_SetSceneFogEnable(IDirect3DRMFrame3 *iface, BOOL enable)
+static HRESULT WINAPI d3drm_frame3_SetSceneFogColor(IDirect3DRMFrame3 *iface, D3DCOLOR color)
 {
-    FIXME("iface %p, enable %#x stub!\n", iface, enable);
+    FIXME("iface %p, color 0x%08x stub!\n", iface, color);
 
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI d3drm_frame3_SetSceneFogColor(IDirect3DRMFrame3 *iface, D3DCOLOR color)
+static HRESULT WINAPI d3drm_frame2_SetSceneFogColor(IDirect3DRMFrame2 *iface, D3DCOLOR color)
 {
     FIXME("iface %p, color 0x%08x stub!\n", iface, color);
 
@@ -1903,6 +1661,13 @@ 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_frame3_SetSceneFogParams(IDirect3DRMFrame3 *iface,
         D3DVALUE start, D3DVALUE end, D3DVALUE density)
 {
@@ -1911,6 +1676,14 @@ 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_frame3_SetColor(IDirect3DRMFrame3 *iface, D3DCOLOR color)
 {
     FIXME("iface %p, color 0x%08x stub!\n", iface, color);
@@ -1918,6 +1691,13 @@ 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_frame3_SetColorRGB(IDirect3DRMFrame3 *iface,
         D3DVALUE red, D3DVALUE green, D3DVALUE blue)
 {
@@ -1926,6 +1706,14 @@ 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 D3DRMZBUFFERMODE WINAPI d3drm_frame3_GetZbufferMode(IDirect3DRMFrame3 *iface)
 {
     FIXME("iface %p stub!\n", iface);
@@ -1933,6 +1721,13 @@ 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 HRESULT WINAPI d3drm_frame3_SetMaterialMode(IDirect3DRMFrame3 *iface, D3DRMMATERIALMODE mode)
 {
     FIXME("iface %p, mode %#x stub!\n", iface, mode);
@@ -1940,6 +1735,13 @@ 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_frame3_SetOrientation(IDirect3DRMFrame3 *iface, IDirect3DRMFrame3 *reference,
         D3DVALUE dx, D3DVALUE dy, D3DVALUE dz, D3DVALUE ux, D3DVALUE uy, D3DVALUE uz)
 {
@@ -1949,6 +1751,15 @@ 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_frame3_SetPosition(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z)
 {
@@ -1957,6 +1768,14 @@ 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_frame3_SetRotation(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, D3DVALUE theta)
 {
@@ -1966,6 +1785,15 @@ 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_frame3_SetSortMode(IDirect3DRMFrame3 *iface, D3DRMSORTMODE mode)
 {
     FIXME("iface %p, mode %#x stub!\n", iface, mode);
@@ -1973,6 +1801,13 @@ 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_frame3_SetTexture(IDirect3DRMFrame3 *iface, IDirect3DRMTexture3 *texture)
 {
     FIXME("iface %p, texture %p stub!\n", iface, texture);
@@ -1980,6 +1815,20 @@ 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_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_frame3_SetVelocity(IDirect3DRMFrame3 *iface,
         IDirect3DRMFrame3 *reference, D3DVALUE x, D3DVALUE y, D3DVALUE z, BOOL with_rotation)
 {
@@ -1989,6 +1838,15 @@ 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_frame3_SetZbufferMode(IDirect3DRMFrame3 *iface, D3DRMZBUFFERMODE mode)
 {
     FIXME("iface %p, mode %#x stub!\n", iface, mode);
@@ -1996,6 +1854,13 @@ 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_frame3_Transform(IDirect3DRMFrame3 *iface, D3DVECTOR *d, D3DVECTOR *s)
 {
     FIXME("iface %p, d %p, s %p stub!\n", iface, d, s);
@@ -2003,6 +1868,21 @@ 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_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);
@@ -2010,6 +1890,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);
@@ -2017,6 +1904,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);
@@ -2024,6 +1918,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);
@@ -2031,6 +1932,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);
@@ -2038,6 +1946,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);
@@ -2045,6 +1960,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);
@@ -2261,6 +2183,86 @@ 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 inline struct d3drm_frame *unsafe_impl_from_IDirect3DRMFrame3(IDirect3DRMFrame3 *iface)
 {
     if (!iface)
-- 
2.3.2 (Apple Git-55)




More information about the wine-patches mailing list