Beispiel #1
0
static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTargetView *iface,
        ID3D10Resource **resource)
{
    struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface);
    struct wined3d_resource *wined3d_resource;
    IUnknown *parent;
    HRESULT hr;

    TRACE("iface %p, resource %p\n", iface, resource);

    wined3d_resource = wined3d_rendertarget_view_get_resource(This->wined3d_view);
    if (!wined3d_resource)
    {
        ERR("Failed to get wined3d resource.\n");
        *resource = NULL;
        return;
    }

    parent = wined3d_resource_get_parent(wined3d_resource);
    hr = IUnknown_QueryInterface(parent, &IID_ID3D10Resource, (void **)&resource);
    if (FAILED(hr))
    {
        ERR("Resource parent isn't a d3d10 resource, hr %#x\n", hr);
        *resource = NULL;
        return;
    }
}
Beispiel #2
0
struct d3d10_rendertarget_view *unsafe_impl_from_ID3D10RenderTargetView(ID3D10RenderTargetView *iface)
{
    if (!iface)
        return NULL;
    assert(iface->lpVtbl == &d3d10_rendertarget_view_vtbl);

    return impl_from_ID3D10RenderTargetView(iface);
}
Beispiel #3
0
static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetDesc(ID3D10RenderTargetView *iface,
        D3D10_RENDER_TARGET_VIEW_DESC *desc)
{
    struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface);

    TRACE("iface %p, desc %p\n", iface, desc);

    *desc = This->desc;
}
Beispiel #4
0
static ULONG STDMETHODCALLTYPE d3d10_rendertarget_view_AddRef(ID3D10RenderTargetView *iface)
{
    struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface);
    ULONG refcount = InterlockedIncrement(&This->refcount);

    TRACE("%p increasing refcount to %u\n", This, refcount);

    return refcount;
}
Beispiel #5
0
static void STDMETHODCALLTYPE d3d10_rendertarget_view_GetResource(ID3D10RenderTargetView *iface,
        ID3D10Resource **resource)
{
    struct d3d10_rendertarget_view *view = impl_from_ID3D10RenderTargetView(iface);

    TRACE("iface %p, resource %p\n", iface, resource);

    *resource = view->resource;
    ID3D10Resource_AddRef(*resource);
}
Beispiel #6
0
static ULONG STDMETHODCALLTYPE d3d10_rendertarget_view_Release(ID3D10RenderTargetView *iface)
{
    struct d3d10_rendertarget_view *This = impl_from_ID3D10RenderTargetView(iface);
    ULONG refcount = InterlockedDecrement(&This->refcount);

    TRACE("%p decreasing refcount to %u\n", This, refcount);

    if (!refcount)
    {
        wined3d_rendertarget_view_decref(This->wined3d_view);
        HeapFree(GetProcessHeap(), 0, This);
    }

    return refcount;
}