Exemplo n.º 1
0
 public override void Generate(ShaderContext context)
 {
     foreach (var snippet in snippets)
     {
         snippet.Generate(context);
     }
 }
Exemplo n.º 2
0
 public override void Generate(ShaderContext context)
 {
     base.Generate(context);
     result?.Assign(expression);
 }
Exemplo n.º 3
0
 public ShaderFieldVariable(ShaderContext context, ShaderVariable baseVariable, ShaderType.Field field)
     : base(context, $"{baseVariable.Name}_field_{field.Name}", field.ShaderTypeName, baseVariable.ArrayCount)
 {
     reference = new Reference(baseVariable, field);
 }
Exemplo n.º 4
0
        private static void PrepareDeviceForRender(ref ShaderContext shaderContext, ref MyRenderElement renderElement)
        {
            //    m_renderProfiler.StartProfilingBlock("PrepareDeviceForRender");

            int lod = (int)m_currentLodDrawPass;

            System.Diagnostics.Debug.Assert(renderElement.Entity != null);

            bool needBegin = false;

            //Material change
            bool voxelMaterialChanged = shaderContext.CurrentVoxelBatch == null && renderElement.VoxelBatch != null;
            bool voxelTechniqueChanged = false;
            
            if (renderElement.VoxelBatch != null && shaderContext.CurrentVoxelBatch != null) 
            {
                voxelMaterialChanged = renderElement.VoxelBatch.SortOrder != shaderContext.CurrentVoxelBatch.SortOrder;
                voxelTechniqueChanged = renderElement.VoxelBatch.Type != shaderContext.CurrentVoxelBatch.Type;
            }
            if ((shaderContext.CurrentMaterial.GetHashCode() != renderElement.Material.GetHashCode())
                || voxelMaterialChanged || voxelTechniqueChanged)
            {
                MyPerformanceCounter.PerCameraDraw.MaterialChanges[lod]++;
                shaderContext.CurrentMaterial = renderElement.Material;
                shaderContext.CurrentVoxelBatch = renderElement.VoxelBatch;

                MyEffectBase oldShader = shaderContext.CurrentShader;
                shaderContext.CurrentShader = MyRender.SetupShaderForMaterial(renderElement.Material, renderElement.VoxelBatch);

                if (shaderContext.CurrentDrawTechnique != (byte)renderElement.DrawTechnique || voxelTechniqueChanged)
                {
                    if (oldShader != null)
                        oldShader.End();
                    
                    needBegin = true;
                    
                    MyPerformanceCounter.PerCameraDraw.TechniqueChanges[lod]++;

                    shaderContext.CurrentDrawTechnique = (byte)renderElement.DrawTechnique;

                    MyRender.SetupShaderPerDraw(shaderContext.CurrentShader, renderElement.DrawTechnique);
                }
            }

            //VB change
            if (!object.ReferenceEquals(shaderContext.CurrentVertexBuffer, renderElement.VertexBuffer))
            {
                MyPerformanceCounter.PerCameraDraw.VertexBufferChanges[lod]++;

                //Now we have IB+VB 1:1 everywhere, subsets are done through offsets
                shaderContext.CurrentVertexBuffer = renderElement.VertexBuffer;
                m_device.Indices = renderElement.IndexBuffer;

                m_device.SetStreamSource(0, renderElement.VertexBuffer, 0, renderElement.VertexStride);
                m_device.VertexDeclaration = renderElement.VertexDeclaration;

                shaderContext.IBChangesStats++;
            }

            //Entity changed
            if (shaderContext.CurrentEntity != renderElement.Entity)
            {
                MyPerformanceCounter.PerCameraDraw.EntityChanges[lod]++;

                shaderContext.CurrentEntity = renderElement.Entity;

                SetupShaderForEntity(shaderContext.CurrentShader, renderElement);
            }

            if (needBegin)
            {
                BeginShader(shaderContext.CurrentShader, ref renderElement);
                shaderContext.CurrentShader.Begin();
            }
            else
                shaderContext.CurrentShader.D3DEffect.CommitChanges();

            //    m_renderProfiler.EndProfilingBlock();
        }
Exemplo n.º 5
0
 public override bool getAvailableImages(ShaderContext context, string uvSetName, MStringArray imageNames)
 {
     MGlobal.displayInfo("testHLSLShader::getAvailableImages");
     return(base.getAvailableImages(context, uvSetName, imageNames));
 }
Exemplo n.º 6
0
 public override bool getAvailableImages( ShaderContext context, string uvSetName, MStringArray imageNames)
 {
     MGlobal.displayInfo("testHLSLShader::getAvailableImages");
     return base.getAvailableImages(context, uvSetName, imageNames);
 }
Exemplo n.º 7
0
 public override void Generate(ShaderContext context)
 => context.Condition(expression, trueSnippet, falseSnippet);
Exemplo n.º 8
0
 public override void Generate(ShaderContext context)
 {
     base.Generate(context);
     action(context);
 }
Exemplo n.º 9
0
 protected Shader()
 {
     RefShaders();
     _context = new ShaderContext(GetShaderType());
 }