Пример #1
0
        internal ViewportEffect(
            string name,
            ShaderWindow window,
            string fragmentShader,
            IEnumerable <StateConfiguration> renderState,
            IEnumerable <UniformConfiguration> shaderUniforms,
            IEnumerable <BufferBindingConfiguration> bufferBindings,
            FramebufferConfiguration framebuffer,
            Mesh texturedQuad)
            : base(name,
                   window,
                   VertexShader,
                   null,
                   fragmentShader,
                   renderState,
                   shaderUniforms,
                   bufferBindings,
                   framebuffer)
        {
            if (texturedQuad == null)
            {
                throw new ArgumentNullException("texturedQuad");
            }

            mesh = texturedQuad;
        }
Пример #2
0
        internal Effect(
            string name,
            ShaderWindow window,
            string vertexShader,
            string geometryShader,
            string fragmentShader,
            IEnumerable <StateConfiguration> renderState,
            IEnumerable <UniformConfiguration> shaderUniforms,
            IEnumerable <BufferBindingConfiguration> bufferBindings,
            FramebufferConfiguration framebuffer)
            : base(name, window)
        {
            if (vertexShader == null)
            {
                throw new ArgumentNullException("vertexShader", "No vertex shader was specified for material " + name + ".");
            }

            if (fragmentShader == null)
            {
                throw new ArgumentNullException("fragmentShader", "No fragment shader was specified for material " + name + ".");
            }

            vertexSource   = vertexShader;
            geometrySource = geometryShader;
            fragmentSource = fragmentShader;
            CreateShaderState(renderState, shaderUniforms, bufferBindings, framebuffer);
        }
Пример #3
0
 private void Process(ShaderWindow window)
 {
     foreach (var state in renderState)
     {
         state.Execute(window);
     }
 }
Пример #4
0
        internal Shader(string name, ShaderWindow window)
        {
            if (window == null)
            {
                throw new ArgumentNullException("window");
            }

            Name         = name;
            shaderWindow = window;
        }
Пример #5
0
        static float GetAspectRatio(ShaderWindow window)
        {
            if (window == null)
            {
                throw new ArgumentNullException("window");
            }

            var viewport = window.Viewport;

            return(GetAspectRatio(viewport.Width * window.Width, viewport.Height * window.Height));
        }
Пример #6
0
 protected virtual void Dispose(bool disposing)
 {
     if (program != 0)
     {
         if (disposing)
         {
             shaderState.Dispose();
             GL.DeleteProgram(program);
             shaderWindow = null;
             update       = null;
             program      = 0;
         }
     }
 }
Пример #7
0
            public FramebufferAttachment(ShaderWindow window, FramebufferAttachmentConfiguration attachmentConfiguration)
            {
                textureName    = attachmentConfiguration.TextureName;
                textureWidth   = attachmentConfiguration.Width.GetValueOrDefault(window.Width);
                textureHeight  = attachmentConfiguration.Height.GetValueOrDefault(window.Height);
                attachment     = attachmentConfiguration.Attachment;
                internalFormat = attachmentConfiguration.InternalFormat;
                format         = attachmentConfiguration.Format;
                type           = attachmentConfiguration.Type;
                clearColor     = attachmentConfiguration.ClearColor;
                clearMask      = attachmentConfiguration.ClearMask;

                texture = window.ResourceManager.Load <Texture>(attachmentConfiguration.TextureName);
                ClearTexture(texture.Id, textureWidth, textureHeight);
            }
Пример #8
0
        internal ComputeProgram(
            string name,
            ShaderWindow window,
            string computeShader,
            IEnumerable <StateConfiguration> renderState,
            IEnumerable <UniformConfiguration> shaderUniforms,
            IEnumerable <BufferBindingConfiguration> bufferBindings,
            FramebufferConfiguration framebuffer)
            : base(name, window)
        {
            if (computeShader == null)
            {
                throw new ArgumentNullException("computeShader", "No compute shader was specified for compute program " + name + ".");
            }

            computeSource = computeShader;
            CreateShaderState(renderState, shaderUniforms, bufferBindings, framebuffer);
        }
Пример #9
0
        public FramebufferState(ShaderWindow window, FramebufferConfiguration framebufferConfiguration)
        {
            if (window == null)
            {
                throw new ArgumentNullException("window");
            }

            if (framebufferConfiguration == null)
            {
                throw new ArgumentNullException("framebufferConfiguration");
            }

            framebufferWidth       = 0;
            framebufferHeight      = 0;
            framebufferWindow      = window;
            framebufferAttachments = framebufferConfiguration.FramebufferAttachments
                                     .Select(configuration => new FramebufferAttachment(window, configuration))
                                     .ToList();
            if (framebufferAttachments.Count > 0)
            {
                foreach (var attachment in framebufferAttachments)
                {
                    var width  = attachment.Width;
                    var height = attachment.Height;
                    if (framebufferWidth == 0 || width < framebufferWidth)
                    {
                        framebufferWidth = width;
                    }

                    if (framebufferHeight == 0 || height < framebufferHeight)
                    {
                        framebufferHeight = height;
                    }
                }

                GL.GenFramebuffers(1, out fbo);
                GL.BindFramebuffer(FramebufferTarget.Framebuffer, fbo);
                foreach (var attachment in framebufferAttachments)
                {
                    attachment.Attach();
                }
                GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
            }
        }
Пример #10
0
 internal Material(
     string name,
     ShaderWindow window,
     string vertexShader,
     string geometryShader,
     string fragmentShader,
     IEnumerable <StateConfiguration> renderState,
     IEnumerable <UniformConfiguration> shaderUniforms,
     IEnumerable <BufferBindingConfiguration> bufferBindings,
     FramebufferConfiguration framebuffer)
     : base(name,
            window,
            vertexShader,
            geometryShader,
            fragmentShader,
            renderState,
            shaderUniforms,
            bufferBindings,
            framebuffer)
 {
 }
Пример #11
0
        internal static IObservable <ShaderWindow> CreateWindow(ShaderWindowSettings configuration)
        {
            return(Observable.Create <ShaderWindow>(observer =>
            {
                // return Task.Factory.StartNew(() =>
                // {
                // GraphicsContext.ShareContexts = false;
                using (var window = new ShaderWindow(configuration))
                    // using (var notification = cancellationToken.Register(window.Close))
                    using (var disposable = SubjectManager.ReserveSubject())
                    {
                        var subject = disposable.Subject;
                        window.Load += delegate
                        {
                            observer.OnNext(window);
                            subject.OnNext(window);
                        };

                        window.Unload += delegate
                        {
                            subject.OnCompleted();
                            observer.OnCompleted();
                        };

                        try { window.Run(); }
                        catch (Exception ex)
                        {
                            observer.OnError(ex);
                            subject.OnError(ex);
                        }
                    }
                // },
                // cancellationToken,
                // TaskCreationOptions.LongRunning,
                // TaskScheduler.Default);
                return Disposable.Empty;
            }));
        }
Пример #12
0
 internal WindowManager(ShaderWindow window)
 {
     Window = window;
 }
Пример #13
0
 internal WindowManagerConfiguration(ShaderWindow owner)
 {
     Name   = string.Empty;
     window = owner;
 }
Пример #14
0
 internal FrameEvent(ShaderWindow sender, double elapsedTime, FrameEventArgs e)
     : base(sender, e)
 {
     TimeStep = new TimeStep(elapsedTime, e.Time);
 }