#include "bindless_structs.hlsli" struct FS_Input { float4 inPosition : POSITION; float4 inColor : COLOR0; float2 inUV : TEXCOORD0; }; struct FS_Output { float4 outColor : SV_Target0; }; float4 ArrayToVector(float arr[4]) { return float4(arr[0], arr[1], arr[2], arr[3]); } float4 ArrayToVector(float4 arr) { return arr; } float4 GetAlbedo(uint materialBufferId, int materialId, float2 uv) { uint albedoTexId = materialsBuffer[materialBufferId][materialId].m_AlbedoTex; if (albedoTexId == INVALID_HANDLE) { return (float4) materialsBuffer[materialBufferId][materialId].m_AlbedoFactor; } else { return textures[albedoTexId].Sample(immutableSamplers[albedoTexId], uv); } } FS_Output main(FS_Input stage_input) { FS_Output output; output.outColor = pcb.m_MaterialIdx < 0 ? stage_input.inColor : GetAlbedo(pcb.materialBufferHandle, pcb.m_MaterialIdx, stage_input.inUV); return output; }