public override void Generate(ShaderContext context) { foreach (var snippet in snippets) { snippet.Generate(context); } }
public override void Generate(ShaderContext context) { base.Generate(context); result?.Assign(expression); }
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); }
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(); }
public override bool getAvailableImages(ShaderContext context, string uvSetName, MStringArray imageNames) { MGlobal.displayInfo("testHLSLShader::getAvailableImages"); return(base.getAvailableImages(context, uvSetName, imageNames)); }
public override bool getAvailableImages( ShaderContext context, string uvSetName, MStringArray imageNames) { MGlobal.displayInfo("testHLSLShader::getAvailableImages"); return base.getAvailableImages(context, uvSetName, imageNames); }
public override void Generate(ShaderContext context) => context.Condition(expression, trueSnippet, falseSnippet);
public override void Generate(ShaderContext context) { base.Generate(context); action(context); }
protected Shader() { RefShaders(); _context = new ShaderContext(GetShaderType()); }