示例#1
0
        public unsafe PipelineBase(VulkanRenderer gd, Device device)
        {
            Gd     = gd;
            Device = device;

            var pipelineCacheCreateInfo = new PipelineCacheCreateInfo()
            {
                SType = StructureType.PipelineCacheCreateInfo
            };

            gd.Api.CreatePipelineCache(device, pipelineCacheCreateInfo, null, out PipelineCache).ThrowOnError();

            _descriptorSetUpdater = new DescriptorSetUpdater(gd, this);

            _transformFeedbackBuffers = new BufferState[Constants.MaxTransformFeedbackBuffers];
            _vertexBuffers            = new BufferState[Constants.MaxVertexBuffers + 1];

            const int EmptyVbSize = 16;

            using var emptyVb = gd.BufferManager.Create(gd, EmptyVbSize);
            emptyVb.SetData(0, new byte[EmptyVbSize]);
            _vertexBuffers[0]         = new BufferState(emptyVb.GetBuffer(), 0, EmptyVbSize, 0UL);
            _needsVertexBuffersRebind = true;

            ClearScissor = new Rectangle <int>(0, 0, 0xffff, 0xffff);

            var defaultScale = new Vector4 <float> {
                X = 1f, Y = 0f, Z = 0f, W = 0f
            };

            new Span <Vector4 <float> >(_renderScale).Fill(defaultScale);

            _newState.Initialize();
            _newState.LineWidth    = 1f;
            _newState.SamplesCount = 1;
        }