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); }
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); }