import Common; import BRDF; import MaterialParameter; import Scene; //interface IMaterial //{ // associatedtype BRDF : IBRDF; // BRDF prepare(MaterialParameter input); //}; struct MaterialResources { StructuredBuffer floatArray; Texture2D textureArray[512]; SamplerState samplerArray[512]; }; layout(set=4) ParameterBlock pResources; Texture2D getMaterialTextureParameter(uint index) { return pResources.textureArray[pOffsets.textureOffset + index]; } SamplerState getMaterialSamplerParameter(uint index) { return pResources.samplerArray[pOffsets.samplerOffset + index]; } float getMaterialFloatParameter(uint index) { return pResources.floatArray[pOffsets.floatOffset + index]; } float3 getMaterialVectorParameter(uint index) { return float3( pResources.floatArray[pOffsets.floatOffset + index], pResources.floatArray[pOffsets.floatOffset + index + 1], pResources.floatArray[pOffsets.floatOffset + index + 2] ); }