예제 #1
0
파일: Effect.cs 프로젝트: aalmada/bonsai
        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);
        }
예제 #2
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;
        }
예제 #3
0
 protected void CreateShaderState(
     IEnumerable <StateConfiguration> renderState,
     IEnumerable <UniformConfiguration> shaderUniforms,
     IEnumerable <BufferBindingConfiguration> bufferBindings,
     FramebufferConfiguration framebuffer)
 {
     program = CreateShader();
     GL.UseProgram(program);
     shaderState = new ShaderState(this, shaderWindow.ResourceManager, renderState, shaderUniforms, bufferBindings, framebuffer);
 }
예제 #4
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);
        }
예제 #5
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);
            }
        }
예제 #6
0
        public ShaderState(
            Shader shaderTarget,
            ResourceManager resourceManager,
            IEnumerable <StateConfiguration> renderStateConfiguration,
            IEnumerable <UniformConfiguration> shaderUniforms,
            IEnumerable <BufferBindingConfiguration> bufferBindingConfiguration,
            FramebufferConfiguration framebufferConfiguration)
        {
            if (shaderTarget == null)
            {
                throw new ArgumentNullException("shaderTarget");
            }

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

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

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

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

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

            shader          = shaderTarget;
            renderState     = renderStateConfiguration.ToList();
            uniformBindings = shaderUniforms.Select(configuration => new UniformBinding(shader, configuration)).ToList();
            bufferBindings  = bufferBindingConfiguration.Select(configuration => configuration.CreateBufferBinding(shader, resourceManager)).ToList();
            framebuffer     = new FramebufferState(shader.Window, framebufferConfiguration);
        }
예제 #7
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)
 {
 }