public void RenderDownscale(ViewportRenderingContext context, Component_RenderingPipeline.IFrameData frameData, Vector2I destinationSize, ref Component_Image actualTexture) { if (Technique.Value >= TechniqueEnum.SSAAx2 && Technique.Value <= TechniqueEnum.SSAAx4 && context.Owner.SizeInPixels != actualTexture.Result.ResultSize) { var rescaledTexture = context.RenderTarget2D_Alloc(context.Owner.SizeInPixels, actualTexture.Result.ResultFormat); //copy to scene texture with downscale { context.SetViewport(rescaledTexture.Result.GetRenderTarget().Viewports[0]); CanvasRenderer.ShaderItem shader = new CanvasRenderer.ShaderItem(); shader.VertexProgramFileName = @"Base\Shaders\EffectsCommon_vs.sc"; shader.FragmentProgramFileName = @"Base\Shaders\Effects\DownscaleAntialiasing_fs.sc"; shader.Defines.Add(new CanvasRenderer.ShaderItem.DefineItem(Technique.Value.ToString().ToUpper())); var multiplier = new Vector2F(1, 1) / destinationSize.ToVector2F() * (float)DownscaleSamplerMultiplier.Value; shader.Parameters.Set("antialiasing_multiplier", multiplier); shader.Parameters.Set(new ViewportRenderingContext.BindTextureData(0 /*"sourceTexture"*/, actualTexture, TextureAddressingMode.Clamp, FilterOption.Linear, FilterOption.Linear, FilterOption.None)); context.RenderQuadToCurrentViewport(shader); } context.DynamicTexture_Free(actualTexture); actualTexture = rescaledTexture; } }
CefMouseEvent GetCurrentMouseEvent() { Vector2 pos = viewSize.ToVector2F() * MousePosition; var mouseEvent = new CefMouseEvent((int)pos.X, (int)pos.Y, GetCurrentKeyboardModifiers()); return(mouseEvent); }
///////////////////////////////////////// protected virtual Vector2I GetDemandedSize() { Vector2I result; Vector2I viewportSize = ParentContainer.Viewport.SizeInPixels; result = ( viewportSize.ToVector2F() * GetScreenSize() ).ToVector2I(); if( result.X < 1 ) result.X = 1; if( result.Y < 1 ) result.Y = 1; //fix max texture size if( result.X > RenderingSystem.Capabilities.MaxTextureSize || result.Y > RenderingSystem.Capabilities.MaxTextureSize ) { double divideX = (double)result.X / (double)RenderingSystem.Capabilities.MaxTextureSize; double divideY = (double)result.Y / (double)RenderingSystem.Capabilities.MaxTextureSize; double divide = Math.Max( Math.Max( divideX, divideY ), 1 ); if( divide != 1 ) { result = ( result.ToVector2() / divide ).ToVector2I(); if( result.X > RenderingSystem.Capabilities.MaxTextureSize ) result.X = RenderingSystem.Capabilities.MaxTextureSize; if( result.Y > RenderingSystem.Capabilities.MaxTextureSize ) result.Y = RenderingSystem.Capabilities.MaxTextureSize; } } return result; }
Vector2I GetNeededSize() { Vector2I result; //!!!!3D //UIContainerScreen screenControlManager = ParentContainer as UIContainerScreen; //if( screenControlManager != null ) { //screen gui Vector2I viewportSize = ParentContainer.Viewport.SizeInPixels; Vector2 size = viewportSize.ToVector2F() * GetScreenSize(); //if( screenControlManager.CanvasRenderer._OutGeometryTransformEnabled ) // size *= screenControlManager.CanvasRenderer._OutGeometryTransformScale; result = size.ToVector2I(); //result = new Vec2I( (int)( size.X + .9999f ), (int)( size.Y + .9999f ) ); } //else //{ // //in-game gui // //!!!! // int height = 800;// renderingIn3DHeightInPixels; // Vector2 screenSize = GetScreenSize(); // double width = (double)height * ( screenSize.X / screenSize.Y ) * ParentContainer.AspectRatio; // result = new Vector2I( (int)( width + .9999f ), height ); // //int height = inGame3DGuiHeightInPixels; // //if( height > RenderSystem.Instance.Capabilities.MaxTextureSize ) // // height = RenderSystem.Instance.Capabilities.MaxTextureSize; // //Vec2 screenSize = GetScreenSize(); // //double width = (double)height * ( screenSize.X / screenSize.Y ) * GetControlManager().AspectRatio; // //result = new Vec2I( (int)( width + .9999f ), height ); //} if (result.X < 1) { result.X = 1; } if (result.Y < 1) { result.Y = 1; } //fix max texture size if (result.X > RenderingSystem.Capabilities.MaxTextureSize || result.Y > RenderingSystem.Capabilities.MaxTextureSize) { double divideX = (double)result.X / (double)RenderingSystem.Capabilities.MaxTextureSize; double divideY = (double)result.Y / (double)RenderingSystem.Capabilities.MaxTextureSize; double divide = Math.Max(Math.Max(divideX, divideY), 1); if (divide != 1) { result = (result.ToVector2() / divide).ToVector2I(); if (result.X > RenderingSystem.Capabilities.MaxTextureSize) { result.X = RenderingSystem.Capabilities.MaxTextureSize; } if (result.Y > RenderingSystem.Capabilities.MaxTextureSize) { result.Y = RenderingSystem.Capabilities.MaxTextureSize; } } } return(result); }