示例#1
0
        public void init()
        {
            renderer = new OpenGLRenderer();

            renderer.setSize(width, height);

            camera            = new PerspectiveCamera((float)(System.Math.PI / 180.0f) * 70.0f, width / (float)height, 1.0f, 100.0f);
            camera.position.Z = 400.0f;

            scene = new Scene();

            CubeGeometry geometry = new CubeGeometry(200, 200, 200);


            Texture texture = (new ImageUtils()).loadTexture("textures/crate.gif");

            texture.anisotropy = renderer.getMaxAnisotropy();


            MeshBasicMaterial material = new MeshBasicMaterial(texture);

            mesh = new Mesh(geometry, material);
            scene.add(mesh);

            renderer.render(scene, camera);
        }
示例#2
0
        public TextureManager(OpenGLRenderer renderer)
        {
            _renderer = renderer;

            _textures = Array.Empty <Texture>();
            _count    = 0;
        }
        public void InitializeWithNullReferences()
        {
            IRenderer renderer = new OpenGLRenderer(new OpenGLGraphicsFactory(), new ShaderSettings());

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.Init(null, null));
        }
示例#4
0
文件: Program.cs 项目: ckarcz/Ryujinx
        static void Main(string[] args)
        {
            Config.Read();

            AOptimizations.DisableMemoryChecks = !Config.EnableMemoryChecks;

            Console.Title = "Ryujinx Console";

            IGalRenderer Renderer = new OpenGLRenderer();

            IAalOutput AudioOut = new OpenALAudioOut();

            Switch Ns = new Switch(Renderer, AudioOut);

            if (args.Length == 1)
            {
                if (Directory.Exists(args[0]))
                {
                    string[] RomFsFiles = Directory.GetFiles(args[0], "*.istorage");

                    if (RomFsFiles.Length > 0)
                    {
                        Logging.Info("Loading as cart with RomFS.");

                        Ns.LoadCart(args[0], RomFsFiles[0]);
                    }
                    else
                    {
                        Logging.Info("Loading as cart WITHOUT RomFS.");

                        Ns.LoadCart(args[0]);
                    }
                }
                else if (File.Exists(args[0]))
                {
                    Logging.Info("Loading as homebrew.");

                    Ns.LoadProgram(args[0]);
                }
            }
            else
            {
                Logging.Error("Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
            }

            using (GLScreen Screen = new GLScreen(Ns, Renderer))
            {
                Ns.Finish += (Sender, Args) =>
                {
                    Screen.Exit();
                };

                Screen.Run(60.0);
            }

            Environment.Exit(0);
        }
示例#5
0
        public TextureStorage(OpenGLRenderer renderer, TextureCreateInfo info, float scaleFactor)
        {
            _renderer = renderer;
            Info      = info;

            Handle      = GL.GenTexture();
            ScaleFactor = scaleFactor;

            CreateImmutableStorage();
        }
示例#6
0
 protected Call(int image, Path[] paths, int triangleOffset, uint triangleCount, int uniformOffset, Blend blendFunc, OpenGLRenderer renderer)
 {
     this.image          = image;
     this.paths          = paths;
     this.triangleOffset = triangleOffset;
     this.triangleCount  = triangleCount;
     this.uniformOffset  = uniformOffset;
     this.blendFunc      = blendFunc;
     this.renderer       = renderer;
 }
示例#7
0
        static void Main(string[] args)
        {
            Config.Read();

            Console.Title = "Ryujinx Console";

            IGalRenderer Renderer = new OpenGLRenderer();

            Switch Ns = new Switch(Renderer);

            if (args.Length == 1)
            {
                if (Directory.Exists(args[0]))
                {
                    string[] RomFsFiles = Directory.GetFiles(args[0], "*.istorage");

                    if (RomFsFiles.Length > 0)
                    {
                        Logging.Info("Loading as cart with RomFS.");

                        Ns.Os.LoadCart(args[0], RomFsFiles[0]);
                    }
                    else
                    {
                        Logging.Info("Loading as cart WITHOUT RomFS.");

                        Ns.Os.LoadCart(args[0]);
                    }
                }
                else if (File.Exists(args[0]))
                {
                    Logging.Info("Loading as homebrew.");

                    Ns.Os.LoadProgram(args[0]);
                }
            }
            else
            {
                Logging.Error("Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
            }

            using (GLScreen Screen = new GLScreen(Ns, Renderer))
            {
                Ns.Finish += (Sender, Args) =>
                {
                    Screen.Exit();
                };

                Screen.Run(60.0);
            }

            Ns.Os.FinalizeAllProcesses();

            Ns.Dispose();
        }
        public void SetSceneWithNullReferences()
        {
            IRenderer renderer = new OpenGLRenderer(new OpenGLGraphicsFactory(), new ShaderSettings());

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.SetScene(new OrthographicCamera(0, 0), null));

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.SetScene(null, null));

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.SetScene(null));
        }
        public void DrawWithNullReferences()
        {
            IRenderer renderer = new OpenGLRenderer(new OpenGLGraphicsFactory(), new ShaderSettings());

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.Draw(null, null, Matrix4.Identity));

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.Draw(null, new OpenGLVertexArray(), Matrix4.Identity));

            Assert.Throws <ArgumentNullException>(() =>
                                                  renderer.Draw(null));
        }
示例#10
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            Config.Read();

            IGalRenderer Renderer = new OpenGLRenderer();

            Switch Ns = new Switch(Renderer);

            view = new GLScreen(this, Ns, Renderer);

            SetContentView(Resource.Layout.activity_main);

            DisplayMetrics displayMetrics = new DisplayMetrics();

            WindowManager.DefaultDisplay.GetRealMetrics(displayMetrics);

            nxLog = FindViewById <TextView>(Resource.Id.nxLog);

            nxLog.MovementMethod = new ScrollingMovementMethod();

            nxLog.LayoutParameters.Width  = displayMetrics.WidthPixels;
            nxLog.LayoutParameters.Height = displayMetrics.HeightPixels;

            Button loadRomBtn     = FindViewById <Button>(Resource.Id.loadRom);
            Button viewDisplayBtn = FindViewById <Button>(Resource.Id.viewDisplay);

            loadRomBtn.Click += async delegate {
                try
                {
                    FileData FileInput = await CrossFilePicker.Current.PickFile();

                    if (FileInput == null)
                    {
                        return;
                    }

                    Ns.Os.LoadProgram(FileInput.FileName, FileInput.GetStream());
                }
                catch (Exception e)
                {
                    Logging.Error($"An exception has occured: {e.ToString()}");
                }
            };

            viewDisplayBtn.Click += delegate {
                SetContentView(view);
            };
        }
示例#11
0
        public TextureView(
            OpenGLRenderer renderer,
            TextureStorage parent,
            TextureCreateInfo info,
            int firstLayer,
            int firstLevel) : base(info, parent.ScaleFactor)
        {
            _renderer = renderer;
            _parent   = parent;

            FirstLayer = firstLayer;
            FirstLevel = firstLevel;

            CreateView();
        }
示例#12
0
        public Shader(string name, bool edgeAA, OpenGLRenderer renderer)
        {
            _renderer = renderer;
            _gl       = _renderer.Gl;

            _programmeID      = _gl.CreateProgram();
            _vertexShaderID   = _gl.CreateShader(Silk.NET.OpenGL.ShaderType.VertexShader);
            _fragmentShaderID = _gl.CreateShader(Silk.NET.OpenGL.ShaderType.FragmentShader);
            _gl.ShaderSource(_vertexShaderID, ShaderCode.VERTEX_SHADER_CODE);
            _gl.ShaderSource(_fragmentShaderID, edgeAA ? ShaderCode.FRAGMENT_SHADER_EDGE_AA_CODE : ShaderCode.FRAGMENT_SHADER_CODE);

            _gl.CompileShader(_vertexShaderID);
            _gl.GetShader(_vertexShaderID, ShaderParameterName.CompileStatus, out int status);
            if (status != (int)GLEnum.True)
            {
                DumpShaderError(_vertexShaderID, Silk.NET.OpenGL.ShaderType.VertexShader);
                Status = false;
                return;
            }

            _gl.CompileShader(_fragmentShaderID);
            _gl.GetShader(_fragmentShaderID, ShaderParameterName.CompileStatus, out status);
            if (status != (int)GLEnum.True)
            {
                DumpShaderError(_fragmentShaderID, Silk.NET.OpenGL.ShaderType.FragmentShader);
                Status = false;
                return;
            }

            _gl.AttachShader(_programmeID, _vertexShaderID);
            _gl.AttachShader(_programmeID, _fragmentShaderID);

            _gl.BindAttribLocation(_programmeID, 0, "vertex");
            _gl.BindAttribLocation(_programmeID, 1, "tcoord");
            _gl.BindAttribLocation(_programmeID, 2, "colour");

            _gl.LinkProgram(_programmeID);
            _gl.GetProgram(_programmeID, ProgramPropertyARB.LinkStatus, out status);
            if (status != (int)GLEnum.True)
            {
                DumpProgrammeError();
                Status = false;
                return;
            }

            Status = true;
        }
示例#13
0
        public SceneWindow()
        {
            InitializeComponent();


            if (CommandArguments.TryGetArgument("ether"))
            {
                SceneWindowContainer.Children.Remove(OpenGL_Viewport);
            }
            else
            {
                SceneWindowContainer.Children.Remove(Ether_Viewport);
                Renderer  = new OpenGLRenderer(OpenGL_Viewport);
                Unloaded += OnUnload;
                Loaded   += OnLoad;
            }
        }
示例#14
0
        static void Main(string[] args)
        {
            IGalRenderer Renderer = new OpenGLRenderer();

            Switch Ns = new Switch(Renderer);

            if (args.Length == 1)
            {
                if (Directory.Exists(args[0]))
                {
                    string[] RomFsFiles = Directory.GetFiles(args[0], "*.istorage");

                    if (RomFsFiles.Length > 0)
                    {
                        Console.WriteLine("Loading as cart with RomFS.");

                        Ns.Os.LoadCart(args[0], RomFsFiles[0]);
                    }
                    else
                    {
                        Console.WriteLine("Loading as cart WITHOUT RomFS.");

                        Ns.Os.LoadCart(args[0]);
                    }
                }
                else if (File.Exists(args[0]))
                {
                    Console.WriteLine("Loading as homebrew.");

                    Ns.Os.LoadProgram(args[0]);
                }
            }
            else
            {
                Console.WriteLine("Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
            }

            using (GLScreen Screen = new GLScreen(Ns, Renderer))
            {
                Screen.Run(60.0);
            }

            Ns.Os.StopAllProcesses();

            Ns.Dispose();
        }
示例#15
0
        public Blend(CompositeOperationState compositeOperation, OpenGLRenderer renderer)
        {
            GLEnum srcRgb   = ConvertBlend(compositeOperation.SrcRgb);
            GLEnum dstRgb   = ConvertBlend(compositeOperation.DstRgb);
            GLEnum srcAlpha = ConvertBlend(compositeOperation.SrcAlpha);
            GLEnum dstAlpha = ConvertBlend(compositeOperation.DstAlpha);

            if (srcRgb == GLEnum.InvalidEnum || dstRgb == GLEnum.InvalidEnum ||
                srcAlpha == GLEnum.InvalidEnum || dstAlpha == GLEnum.InvalidEnum)
            {
                srcRgb   = GLEnum.One;
                dstRgb   = GLEnum.OneMinusSrcAlpha;
                srcAlpha = GLEnum.One;
                dstAlpha = GLEnum.OneMinusDstAlpha;
            }
            _srcRgb   = srcRgb;
            _dstRgb   = dstRgb;
            _srcAlpha = srcAlpha;
            _dstAlpha = dstAlpha;

            _renderer = renderer;
        }
示例#16
0
        public FragUniforms(Paint paint, Scissor scissor, float width, float fringe, float strokeThr, OpenGLRenderer renderer)
        {
            Matrix3X2 <float> invtransform;

            _innerCol = paint.InnerColour.Premult();
            _outerCol = paint.OuterColour.Premult();

            if (scissor.Extent.X < -0.5f || scissor.Extent.Y < -0.5f)
            {
                _scissorMat   = new Matrix3X4 <float>();
                _scissorExt   = new Vector2D <float>(1.0f);
                _scissorScale = new Vector2D <float>(1.0f);
            }
            else
            {
                _             = Matrix3X2.Invert(scissor.Transform, out invtransform);
                _scissorMat   = new Matrix3X4 <float>(invtransform);
                _scissorExt   = scissor.Extent;
                _scissorScale = new Vector2D <float>(
                    MathF.Sqrt(scissor.Transform.M11 * scissor.Transform.M11 + scissor.Transform.M21 * scissor.Transform.M21) / fringe,
                    MathF.Sqrt(scissor.Transform.M21 * scissor.Transform.M21 + scissor.Transform.M22 * scissor.Transform.M22) / fringe
                    );
            }

            _extent     = paint.Extent;
            _strokeMult = (width * 0.5f + fringe * 0.5f) / fringe;
            _strokeThr  = strokeThr;

            if (paint.Image != 0)
            {
                ref var tex = ref renderer.TextureManager.FindTexture(paint.Image);
                if (tex.Id == 0)
                {
                    _type    = (int)ShaderType.Fillgrad;
                    _radius  = paint.Radius;
                    _feather = paint.Feather;
                    _texType = 0;

                    _ = Matrix3X2.Invert(paint.Transform, out invtransform);
                }
                else
                {
                    if (tex.HasFlag(ImageFlags.FlipY))
                    {
                        Matrix3X2 <float> m1, m2;
                        m1 = Matrix3X2.CreateTranslation(new Vector2D <float>(0.0f, _extent.Y * 0.5f));
                        m1 = Transforms.NvgTransforms.Multiply(m1, paint.Transform);
                        m2 = Matrix3X2.CreateScale(new Vector2D <float>(1.0f, -1.0f));
                        m2 = Transforms.NvgTransforms.Multiply(m2, m1);
                        m1 = Matrix3X2.CreateTranslation(new Vector2D <float>(0.0f, -_extent.Y * 0.5f));
                        m1 = Transforms.NvgTransforms.Multiply(m1, m2);
                        _  = Matrix3X2.Invert(m1, out invtransform);
                    }
                    else
                    {
                        _ = Matrix3X2.Invert(paint.Transform, out invtransform);
                    }
                    _type = (int)ShaderType.FillImg;

                    if (tex.TextureType == Texture.Rgba)
                    {
                        _texType = tex.HasFlag(ImageFlags.Premultiplied) ? 0 : 1;
                    }
                    else
                    {
                        _texType = 2;
                    }

                    _radius = _feather = 0.0f;
                }
            }
示例#17
0
 public TextureBuffer(OpenGLRenderer renderer, TextureCreateInfo info) : base(info)
 {
     _renderer = renderer;
 }
示例#18
0
 public IntermmediatePool(OpenGLRenderer renderer)
 {
     _renderer = renderer;
     _entries  = new List <TextureView>();
 }
示例#19
0
 public FillCall(int image, Path[] paths, int triangleOffset, int uniformOffset, CompositeOperationState op, OpenGLRenderer renderer)
     : base(image, paths, triangleOffset, 4, uniformOffset, new Blend(op, renderer), renderer)
 {
 }
示例#20
0
        public void InitializeData()
        {
            this.loading.LoadComplete += this.Loading_LoadComplete;

            this.UpdateLoadingText(LoadType.Data, 100);
            this.UpdateLoadingText(LoadType.Graphics, 0);
            switch (ShanghaiEXE.Config.RenderEngine)
            {
            case "DirectX9":
                var dgRenderer = new MySlimDG(this);
                dgRenderer.ProgressUpdated += this.TextureLoad_ProgressUpdate;
                this.dg = dgRenderer;
                break;

            case "OpenGL":
                var renderControl = new OpenGLRenderer("ShaGResource.tcd", "sasanasi", "{0}.png", this.scaleFactorX, this.scaleFactorY);
                renderControl.GetPanel().SetSize(Constants.ScreenSize);
                renderControl.ProgressUpdated += this.TextureLoad_ProgressUpdate;
                this.dg = renderControl;
                var renderPanel = renderControl.GetPanel();
                if (ShanghaiEXE.Config.Fullscreen)
                {
                    renderPanel.SizeChanged += (s, e) =>
                    {
                        renderPanel.Location = new Point((this.Width - renderPanel.Width) / 2, (this.Height - renderPanel.Height) / 2);
                    };
                    this.SizeChanged += (s, e) =>
                    {
                        renderPanel.Location = new Point((this.Width - renderPanel.Width) / 2, (this.Height - renderPanel.Height) / 2);
                    };
                }
                this.Controls.Add(renderPanel);
                this.BackColor = Color.Black;
                break;
            }
            ShanghaiEXE.measurer = this.dg.GetTextMeasurer();

            this.UpdateLoadingText(LoadType.Audio, 25);
            switch (ShanghaiEXE.Config.AudioEngine)
            {
            case "DirectSound":
                this.ad = new MyAudio(this.volSE);
                break;

            case "OpenAL":
                this.ad = new OpenALAudio(this.volSE, "ShaSResource.tcd", "sasanasi", "{0}.wav");
                break;
            }
            this.ad.BGMVolume         = this.volBGM;
            this.ad.SoundEffectVolume = this.volSE;
            this.ad.ProgressUpdated  += this.AudioLoad_ProgressUpdate;
            this.UpdateLoadingText(LoadType.Audio, 100);

            this.UpdateLoadingText(LoadType.Device, 25);
            this.mk = new MyKeyBoard(this);
            this.co = new Controller(this);
            Input.FormSetting(this);
            this.UpdateLoadingText(LoadType.Device, 100);

            this.UpdateLoadingText(LoadType.Save, 25);
            this.savedata = new SaveData();
            this.savedata.Init();
            this.UpdateLoadingText(LoadType.Save, 50);
            this.savedata.Load(this);
            this.UpdateLoadingText(LoadType.Save, 100);
        }
示例#21
0
        static void Main(string[] args)
        {
            Console.Title = "Ryujinx Console";

            IGalRenderer Renderer = new OpenGLRenderer();

            IAalOutput AudioOut = new OpenALAudioOut();

            Switch Ns = new Switch(Renderer, AudioOut);

            Config.Read(Ns.Log);

            Ns.Log.Updated += ConsoleLog.PrintLog;

            if (args.Length == 1)
            {
                if (Directory.Exists(args[0]))
                {
                    string[] RomFsFiles = Directory.GetFiles(args[0], "*.istorage");

                    if (RomFsFiles.Length == 0)
                    {
                        RomFsFiles = Directory.GetFiles(args[0], "*.romfs");
                    }

                    if (RomFsFiles.Length > 0)
                    {
                        Console.WriteLine("Loading as cart with RomFS.");

                        Ns.LoadCart(args[0], RomFsFiles[0]);
                    }
                    else
                    {
                        Console.WriteLine("Loading as cart WITHOUT RomFS.");

                        Ns.LoadCart(args[0]);
                    }
                }
                else if (File.Exists(args[0]))
                {
                    Console.WriteLine("Loading as homebrew.");

                    Ns.LoadProgram(args[0]);
                }
            }
            else
            {
                Console.WriteLine("Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
            }

            using (GLScreen Screen = new GLScreen(Ns, Renderer))
            {
                Ns.Finish += (Sender, Args) =>
                {
                    Screen.Exit();
                };

                Screen.Run(60.0);
            }

            Environment.Exit(0);
        }
示例#22
0
 public TextureCopy(OpenGLRenderer renderer)
 {
     _renderer         = renderer;
     IntermmediatePool = new IntermmediatePool(renderer);
 }
示例#23
0
 public StrokeCall(int image, Path[] paths, int uniformOffset, CompositeOperationState op, OpenGLRenderer renderer)
     : base(image, paths, 0, 0, uniformOffset, new Blend(op, renderer), renderer)
 {
 }
示例#24
0
 public unsafe Texture(OpenGLRenderer renderer)
     : this()
 {
     _renderer = renderer;
     _gl       = _renderer.Gl;
 }
示例#25
0
 public TrianglesCall(int image, Blend blend, int triangleOffset, uint triangleCount, int uniformOffset, OpenGLRenderer renderer)
     : base(image, null, triangleOffset, triangleCount, uniformOffset, blend, renderer)
 {
 }
示例#26
0
 public Game(GameWindow window)
 {
     renderer    = graphicsFactory.CreateOpenGLRenderer(window);
     input       = inputFactory.CreateOpenGLInputHandler();
     this.window = window;
 }