Ejemplo n.º 1
0
        public Result CreateGraphicsPipelines(IMgPipelineCache pipelineCache, MgGraphicsPipelineCreateInfo[] pCreateInfos, IMgAllocationCallbacks allocator, out IMgPipeline[] pPipelines)
        {
            var output = new List <IMgPipeline> ();

            foreach (var info in pCreateInfos)
            {
                var bLayout = (IGLPipelineLayout)info.Layout;
                if (bLayout == null)
                {
                    throw new ArgumentException("pCreateInfos[].Layout");
                }

                if (info.VertexInputState == null)
                {
                    throw new ArgumentNullException("pCreateInfos[].VertexInputState");
                }

                if (info.InputAssemblyState == null)
                {
                    throw new ArgumentNullException("pCreateInfos[].InputAssemblyState");
                }

                if (info.RasterizationState == null)
                {
                    throw new ArgumentNullException("pCreateInfos[].RasterizationState");
                }

                var programId = mEntrypoint.GraphicsCompiler.Compile(info);

                var blocks        = mEntrypoint.GraphicsCompiler.Inspect(programId);
                var arrayMapper   = new GLInternalCacheArrayMapper(bLayout, blocks);
                var internalCache = new GLInternalCache(bLayout, blocks, arrayMapper);

                /// MAKE SURE ACTIVE UNIFORMS ARE AVAILABLE
                //int noOfActiveUniforms = mEntrypoint.GraphicsPipeline.GetActiveUniforms(programId);

                // var names = mEntrypoint.GraphicsPipeline.GetUniformBlocks(programId);

                //var binder = ConstructBinder(bLayout, programId, noOfActiveUniforms);

                var pipeline = new GLGraphicsPipeline(
                    mEntrypoint.GraphicsPipeline,
                    programId,
                    info,
                    internalCache,
                    bLayout
                    );

                // TODO : BASE PIPELINE / CHILD

                output.Add(pipeline);
            }
            pPipelines = output.ToArray();
            return(Result.SUCCESS);
        }
Ejemplo n.º 2
0
        public GLGraphicsPipeline(
            IGLGraphicsPipelineEntrypoint entrypoint,
            int programId,
            MgGraphicsPipelineCreateInfo info,
            GLInternalCache internalCache,
            IGLPipelineLayout layout
            )
        {
            mEntrypoint = entrypoint;

            if (info.VertexInputState == null)
            {
                throw new ArgumentNullException("info.VertexInputState");
            }

            if (info.InputAssemblyState == null)
            {
                throw new ArgumentNullException("info.InputAssemblyState");
            }

            if (info.RasterizationState == null)
            {
                throw new ArgumentNullException("info.RasterizationState");
            }

            ProgramID     = programId;
            InternalCache = internalCache;
            Layout        = layout;

            PopulateVertexDefinition(info.VertexInputState);

            PopulatePipelineConstants(info.RasterizationState);

            PopulateCmdFallbacks(info.RasterizationState);

            PopulateInputAssembly(info.InputAssemblyState);

            PopulateDepthStencilState(info.DepthStencilState);

            PopulateDynamicStates(info.DynamicState);

            PopulateColorBlend(info.ColorBlendState);

            PopulateViewports(info.ViewportState);
        }