#include "Common.hlsl" Texture2D textures[] : register(t0, space1); SamplerState gSampler : register(s0, space0); struct VertexData { float2 texcoord; float3 normal; }; StructuredBuffer textureIdBuffer : register(t1, space2); StructuredBuffer indexBuffer : register(t1, space3); StructuredBuffer vertexData : register(t1, space4); StructuredBuffer polygonSizeBuffer : register(t1, space5); [shader("closesthit")] void ClosestHit(inout HitInfo payload, Attributes attrib) { //payload.colorAndDistance = float4(1, 1, 1, 1.0); int currentTriangle = PrimitiveIndex(); int textureId = 0; for (int i = 0; currentTriangle >= 0; i++) { currentTriangle -= polygonSizeBuffer[i]; textureId = textureIdBuffer[i]; } int index = PrimitiveIndex() * 3; VertexData v0 = vertexData[indexBuffer[index]]; VertexData v1 = vertexData[indexBuffer[index + 1]]; VertexData v2 = vertexData[indexBuffer[index + 2]]; float2 texcoord = v0.texcoord * (1 - attrib.bary.x - attrib.bary.y) + v1.texcoord * attrib.bary.x + v2.texcoord * attrib.bary.y; float4 color = textures[textureId].SampleLevel(gSampler, texcoord, 0); payload.colorAndDistance = float4(color.rgb, RayTCurrent()); }