Example #1
0
/**
 * This is more of a temporary workaround to an issue with getting the render target
 * size from the RenderManager. On the game thread, we can't get the render target sizes
 * unless we have already initialized the render manager, which we can only do on the render
 * thread. In the future, we'll move those RenderManager APIs to OSVR-Core so we can call
 * them from any thread with access to the client context.
 */
static void GetRenderTargetSize_GameThread(float windowWidth, float windowHeight, float &width, float &height)
{
    auto clientContext = IOSVR::Get().GetEntryPoint()->GetClientContext();
    size_t length;
    osvrClientGetStringParameterLength(clientContext, "/renderManagerConfig", &length);
    if (length > 0)
    {
        char* renderManagerConfigStr = new char[length];
        osvrClientGetStringParameter(clientContext, "/renderManagerConfig", renderManagerConfigStr, length);

        auto reader = TJsonReaderFactory<>::Create(renderManagerConfigStr);
        TSharedPtr<FJsonObject> jsonObject;
        if (FJsonSerializer::Deserialize(reader, jsonObject))
        {
            auto subObj = jsonObject->GetObjectField("renderManagerConfig");
            double renderOverfillFactor = subObj->GetNumberField("renderOverfillFactor");
            double renderOversampleFactor = subObj->GetNumberField("renderOversampleFactor");
            width = windowWidth * renderOverfillFactor * renderOversampleFactor;
            height = windowHeight * renderOverfillFactor * renderOversampleFactor;
        }
        delete[] renderManagerConfigStr;
    }
    else
    {
        width = windowWidth;
        height = windowHeight;
    }
}
bool OSVRHMDDescription::Init(OSVR_ClientContext OSVRClientContext)
{
	Valid = false;

	static const char* Path = "/display";

#if OSVR_ENABLED
	size_t Length;
	if (osvrClientGetStringParameterLength(OSVRClientContext, Path, &Length) == OSVR_RETURN_FAILURE)
		return false;

	FMemMark MemStackMark(FMemStack::Get());

	char* Buffer = new (FMemStack::Get()) char[Length];

	if (osvrClientGetStringParameter(OSVRClientContext, Path, Buffer, Length) == OSVR_RETURN_FAILURE)
		return false;

	Valid = GetData(Data).InitFromJSON(Buffer);
#endif // OSVR_ENABLED

	return Valid;
}