| 1234567891011121314151617181920212223242526272829303132333435 |
- #include "Common.hlsl"
- Texture2D<float4> textures[] : register(t0, space1);
- SamplerState gSampler : register(s0, space0);
- struct VertexData
- {
- float2 texcoord;
- float3 normal;
- };
- StructuredBuffer<int> textureIdBuffer : register(t1, space2);
- StructuredBuffer<int> indexBuffer : register(t1, space3);
- StructuredBuffer<VertexData> vertexData : register(t1, space4);
- StructuredBuffer<int> 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());
- }
|