You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.1 KiB

#include <metal_stdlib>
using namespace metal;
struct VertexIn {
float3 position [[attribute(0)]];
float4 color [[attribute(1)]];
float2 texCoord [[attribute(2)]];
};
struct TransformData{
float4x4 modelMatrix;
float4 color;
};
struct CameraData{
float4x4 viewProjectionMatrix;
float3 cameraPosition;
float padding;
};
struct VertexOut{
float4 position [[position]];
float4 color;
float2 texCoord;
};
vertex VertexOut vertexShader(const VertexIn in [[stage_in]],
constant CameraData& cameraData [[buffer(1)]],
constant TransformData& transformData [[buffer(2)]]){
VertexOut out;
float4 worldPosition=transformData.modelMatrix*float4(in.position,1.0);
out.position=cameraData.viewProjectionMatrix*worldPosition;
out.color=transformData.color;
out.texCoord=in.texCoord;
return out;
}
fragment float4 fragmentShader(VertexOut in [[stage_in]],texture2d<float> texture[[texture(0)]]){
constexpr sampler textureSampler(mag_filter::linear,min_filter::linear);
float4 textureColor=texture.sample(textureSampler,in.texCoord);
return textureColor;
//return in.color;
}