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
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;
|
|
}
|
|
|