diff --git a/examples/RenderTest/main.cpp b/examples/RenderTest/main.cpp index 129a95031..d74fb15b5 100644 --- a/examples/RenderTest/main.cpp +++ b/examples/RenderTest/main.cpp @@ -8,6 +8,64 @@ #include #include +const char shaderSource[] = R"( +[[layout(std140)]] +struct Data +{ + projectionMatrix: mat4, + worldMatrix: mat4, + viewMatrix: mat4 +} + +external +{ + [[binding(0), layout(std140)]] viewerData: uniform, + [[binding(1)]] tex: sampler2D +} + +struct VertIn +{ + [[location(0)]] position: vec3, + [[location(1)]] normal: vec3, + [[location(2)]] uv: vec2 +} + +struct VertOut +{ + [[builtin(position)]] position: vec4, + [[location(0)]] normal: vec3, + [[location(1)]] uv: vec2 +} + +struct FragOut +{ + [[location(0)]] color: vec4 +} + +[[entry(frag)]] +fn main(fragIn: VertOut) -> FragOut +{ + let lightDir: vec3 = vec3(0.0, -0.707, 0.707); + let lightFactor: f32 = dot(fragIn.normal, lightDir); + + let fragOut: FragOut; + fragOut.color = lightFactor * tex.Sample(fragIn.uv); + + return fragOut; +} + +[[entry(vert)]] +fn main(vertIn: VertIn) -> VertOut +{ + let vertOut: VertOut; + vertOut.position = viewerData.projectionMatrix * viewerData.viewMatrix * viewerData.worldMatrix * vec4(vertIn.position, 1.0); + vertOut.normal = vertIn.normal; + vertOut.uv = vertIn.uv; + + return vertOut; +} +)"; + int main() { Nz::Renderer::Config rendererConfig; @@ -34,17 +92,10 @@ int main() std::shared_ptr device = window.GetRenderDevice(); - auto fragmentShader = device->InstantiateShaderStage(Nz::ShaderStageType::Fragment, Nz::ShaderLanguage::NazaraBinary, "frag.shader"); - if (!fragmentShader) + auto fragVertShader = device->InstantiateShaderModule(Nz::ShaderStageType::Fragment | Nz::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraShader, shaderSource, sizeof(shaderSource)); + if (!fragVertShader) { - std::cout << "Failed to instantiate fragment shader" << std::endl; - return __LINE__; - } - - auto vertexShader = device->InstantiateShaderStage(Nz::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraBinary, "vert.shader"); - if (!vertexShader) - { - std::cout << "Failed to instantiate fragment shader" << std::endl; + std::cout << "Failed to instantiate shader" << std::endl; return __LINE__; } @@ -146,8 +197,7 @@ int main() pipelineInfo.pipelineLayout = renderPipelineLayout; pipelineInfo.depthBuffer = true; - pipelineInfo.shaderStages.emplace_back(fragmentShader); - pipelineInfo.shaderStages.emplace_back(vertexShader); + pipelineInfo.shaderModules.emplace_back(fragVertShader); auto& vertexBuffer = pipelineInfo.vertexBuffers.emplace_back(); vertexBuffer.binding = 0;