On 2016-08-06 16:29, Aaryaman Vasishta wrote:
> + while (!done)
> + {
> + if (FAILED(hr = IDirect3DRMFrame3_GetParent(frame, &parent_frame))) What happens if GetScene is called on the root frame? Does it return itself or NULL or an error?
> + return hr;
> + if (parent_frame)
> + {
> + frame = parent_frame;
> + IDirect3DRMFrame3_Release(parent_frame);
> + }
> + else
> + done = TRUE;
> + }
You can eliminate the done variable from this loop by replacing it with a break:
for (;;)
{
if (FAILED(hr = IDirect3DRMFrame3_GetParent(frame, &parent_frame))) return hr;
if (parent_frame)
{
frame = parent_frame;
IDirect3DRMFrame3_Release(parent_frame);
}
else
break;
}
I originally thought about a do {} while(parent_frame); kind of construct but that doesn't gain you much because you need the if check anyway to release parent_frame.
It's not nice to call GetParent in the next iteration after you release the frame, but so far I haven't come up with an implementation that avoids that and isn't terribly ugly. I'll keep thinking.