private static int CameraBuildPerspClipPlanesImpl(RWCamera *rwCamera) { try { // The current aspect ratio. float currentAspectRatio = GetCurrentAspectRatio(); float aspectRatioScale = currentAspectRatio / OriginalAspectRatio; float aspectLimitMultipler = OriginalAspectRatio / _graphicsSettings.AspectRatioLimit; // Stretch X or Y depending on aspect ratio. if (currentAspectRatio >= _graphicsSettings.AspectRatioLimit) { (*rwCamera).viewWindow.x = (*rwCamera).viewWindow.x * aspectRatioScale; } else { if (_graphicsSettings.AlternateAspectScaling) { (*rwCamera).viewWindow.x = (*rwCamera).viewWindow.x / (aspectLimitMultipler); (*rwCamera).viewWindow.y = (*rwCamera).viewWindow.y * ((1F / aspectLimitMultipler) / aspectRatioScale); } else { (*rwCamera).viewWindow.y = (*rwCamera).viewWindow.y * (1F / aspectRatioScale); } } // Call original int result = _cameraBuildPerspClipPlanesHook.OriginalFunction(rwCamera); // Unstretch X or Y depending on aspect ratio. if (currentAspectRatio >= _graphicsSettings.AspectRatioLimit) { (*rwCamera).viewWindow.x = (*rwCamera).viewWindow.x / aspectRatioScale; } else { if (_graphicsSettings.AlternateAspectScaling) { (*rwCamera).viewWindow.x = (*rwCamera).viewWindow.x * (aspectLimitMultipler); (*rwCamera).viewWindow.y = (*rwCamera).viewWindow.y / ((1F / aspectLimitMultipler) / aspectRatioScale); } else { (*rwCamera).viewWindow.y = (*rwCamera).viewWindow.y / (1F / aspectRatioScale); } } return(result); } catch { return(_cameraBuildPerspClipPlanesHook.OriginalFunction(rwCamera)); } }
private static void RwCameraSetViewWindowImpl(RWCamera *cameraPointer, RWAspect.RWView *view) { if (!_resizeHookSetup) { SetupResizeHook(); } try { _rwCameraSetViewWindowHook.OriginalFunction(cameraPointer, view); // Get aspect. float currentAspectRatio = GetCurrentAspectRatio(); float aspectRatioScale = currentAspectRatio / OriginalAspectRatio; float aspectLimitMultipler = OriginalAspectRatio / _graphicsSettings.AspectRatioLimit; // Forced aspect ratio. // Unstretch X or Y depending on aspect ratio. if (currentAspectRatio >= _graphicsSettings.AspectRatioLimit) { (*cameraPointer).recipViewWindow.x = (*cameraPointer).recipViewWindow.x / aspectRatioScale; } else { if (_graphicsSettings.AlternateAspectScaling) { // Squish X as if the window was of the aspect ratio of aspectLimitMultipler regardless of whether it is or not. // Then Squish Y accordingly. (*cameraPointer).recipViewWindow.x = (*cameraPointer).recipViewWindow.x * (aspectLimitMultipler); (*cameraPointer).recipViewWindow.y = (*cameraPointer).recipViewWindow.y / ((1F / aspectLimitMultipler) / aspectRatioScale); } else { // Squish more contents in from the top. (*cameraPointer).recipViewWindow.y = (*cameraPointer).recipViewWindow.y / (1F / aspectRatioScale); } } } catch { _rwCameraSetViewWindowHook.OriginalFunction(cameraPointer, view); } }