The shaders are pretty standard stuff really. Here is the vertex and pixel shaders:
struct sVertexInput
{
packed_float3 m_cPosition;
packed_float2 m_cTextureCoords;
};
struct sVertexOutput
{
float4 m_cPosition [[position]];
float2 m_cTextureCoords;
};
//==============================================================================
// Diffuse vertex shader
//
// psVertices - input vertices
// rsUniforms - uniforms buffer
// iVertexID - vertex index
//
// Returns: sVertexOutput - vertex output
//==============================================================================
vertex sVertexOutput diffuse_vp_main_vs (const device sVertexInput *psVertices [[buffer (0)]],
constant sVPUniforms &rsUniforms [[buffer (1)]],
uint iVertexID [[vertex_id]])
{
sVertexOutput sVertexOutput; float4 cPosition = float4 (psVertices [iVertexID].m_cPosition, 1.0f);
sVertexOutput.m_cPosition = cPosition * rsUniforms.m_cViewProjection; sVertexOutput.m_cTextureCoords = psVertices [iVertexID].m_cTextureCoords;
return sVertexOutput;
}
//==============================================================================
// Diffuse fragment shader
//
// sVertex - output vertex from vertex shader
// cDiffuseTexture - diffuse texture
// smplDiffuse - diffuse sampler
//
// Returns: half4 - sampled diffuse texture
//==============================================================================
fragment half4 diffuse_main_ps (sVertexOutput sVertex [[stage_in]],
texture2d float cDiffuseTexture [[texture (0)]],
sampler smplDiffuse [[sampler (0)]])
{
// sample the diffuse texture
half4 cColor = (half4) (cDiffuseTexture.sample (smplDiffuse, sVertex.m_cTextureCoords)); return cColor;
}
Topic:
Graphics & Games
SubTopic:
General
Tags: