Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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);
            }
        }