Add fullscreen vertex shader module
This commit is contained in:
@@ -359,10 +359,6 @@ int main()
|
||||
light.radius = radiusDis(randomEngine);
|
||||
}
|
||||
|
||||
|
||||
const std::shared_ptr<const Nz::VertexDeclaration>& fullscreenVertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XY_UV);
|
||||
|
||||
|
||||
unsigned int offscreenWidth = windowSize.x;
|
||||
unsigned int offscreenHeight = windowSize.y;
|
||||
|
||||
@@ -384,10 +380,6 @@ int main()
|
||||
Nz::RenderPipelineInfo fullscreenPipelineInfoViewer;
|
||||
fullscreenPipelineInfoViewer.primitiveMode = Nz::PrimitiveMode::TriangleList;
|
||||
fullscreenPipelineInfoViewer.pipelineLayout = device->InstantiateRenderPipelineLayout(fullscreenPipelineLayoutInfoViewer);
|
||||
fullscreenPipelineInfoViewer.vertexBuffers.push_back({
|
||||
0,
|
||||
fullscreenVertexDeclaration
|
||||
});
|
||||
|
||||
fullscreenPipelineInfoViewer.shaderModules.push_back(device->InstantiateShaderModule(nzsl::ShaderStageType::Fragment | nzsl::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraShader, shaderDir / "bloom_bright.nzsl", states));
|
||||
|
||||
@@ -477,10 +469,6 @@ int main()
|
||||
bloomBlendPipelineInfo.blend.srcColor = Nz::BlendFunc::One;
|
||||
bloomBlendPipelineInfo.primitiveMode = Nz::PrimitiveMode::TriangleList;
|
||||
bloomBlendPipelineInfo.pipelineLayout = device->InstantiateRenderPipelineLayout(bloomBlendPipelineLayoutInfo);
|
||||
bloomBlendPipelineInfo.vertexBuffers.push_back({
|
||||
0,
|
||||
fullscreenVertexDeclaration
|
||||
});
|
||||
|
||||
bloomBlendPipelineInfo.shaderModules.push_back(device->InstantiateShaderModule(nzsl::ShaderStageType::Fragment | nzsl::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraShader, shaderDir / "bloom_final.nzsl", states));
|
||||
|
||||
@@ -501,10 +489,6 @@ int main()
|
||||
Nz::RenderPipelineInfo fullscreenPipelineInfo;
|
||||
fullscreenPipelineInfo.primitiveMode = Nz::PrimitiveMode::TriangleList;
|
||||
fullscreenPipelineInfo.pipelineLayout = device->InstantiateRenderPipelineLayout(fullscreenPipelineLayoutInfo);
|
||||
fullscreenPipelineInfo.vertexBuffers.push_back({
|
||||
0,
|
||||
fullscreenVertexDeclaration
|
||||
});
|
||||
|
||||
fullscreenPipelineInfo.shaderModules.push_back(device->InstantiateShaderModule(nzsl::ShaderStageType::Fragment | nzsl::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraShader, shaderDir / "gamma.nzsl", states));
|
||||
|
||||
@@ -535,10 +519,6 @@ int main()
|
||||
Nz::RenderPipelineInfo godraysPipelineInfo;
|
||||
godraysPipelineInfo.primitiveMode = Nz::PrimitiveMode::TriangleList;
|
||||
godraysPipelineInfo.pipelineLayout = device->InstantiateRenderPipelineLayout(godraysPipelineLayoutInfo);
|
||||
godraysPipelineInfo.vertexBuffers.push_back({
|
||||
0,
|
||||
fullscreenVertexDeclaration
|
||||
});
|
||||
|
||||
godraysPipelineInfo.shaderModules.push_back(device->InstantiateShaderModule(nzsl::ShaderStageType::Fragment | nzsl::ShaderStageType::Vertex, Nz::ShaderLanguage::NazaraShader, shaderDir / "god_rays.nzsl", states));
|
||||
|
||||
@@ -622,46 +602,6 @@ int main()
|
||||
|
||||
std::vector<std::shared_ptr<Nz::ShaderBinding>> lightingShaderBindings;
|
||||
|
||||
std::array<Nz::VertexStruct_XY_UV, 3> vertexData = {
|
||||
{
|
||||
{
|
||||
Nz::Vector2f(-1.f, 1.f),
|
||||
Nz::Vector2f(0.0f, 1.0f),
|
||||
},
|
||||
{
|
||||
Nz::Vector2f(-1.f, -3.f),
|
||||
Nz::Vector2f(0.0f, -1.0f),
|
||||
},
|
||||
{
|
||||
Nz::Vector2f(3.f, 1.f),
|
||||
Nz::Vector2f(2.0f, 1.0f),
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/*std::array<Nz::VertexStruct_XYZ_UV, 4> vertexData = {
|
||||
{
|
||||
{
|
||||
Nz::Vector3f(-1.f, -1.f, 0.0f),
|
||||
Nz::Vector2f(0.0f, 0.0f),
|
||||
},
|
||||
{
|
||||
Nz::Vector3f(1.f, -1.f, 0.0f),
|
||||
Nz::Vector2f(1.0f, 0.0f),
|
||||
},
|
||||
{
|
||||
Nz::Vector3f(-1.f, 1.f, 0.0f),
|
||||
Nz::Vector2f(0.0f, 1.0f),
|
||||
},
|
||||
{
|
||||
Nz::Vector3f(1.f, 1.f, 0.0f),
|
||||
Nz::Vector2f(1.0f, 1.0f),
|
||||
},
|
||||
}
|
||||
};*/
|
||||
|
||||
std::shared_ptr<Nz::RenderBuffer> fullscreenVertexBuffer = device->InstantiateBuffer(Nz::BufferType::Vertex, fullscreenVertexDeclaration->GetStride() * vertexData.size(), Nz::BufferUsage::DeviceLocal | Nz::BufferUsage::Write, vertexData.data());
|
||||
|
||||
std::shared_ptr<Nz::ShaderBinding> bloomSkipBlit;
|
||||
std::shared_ptr<Nz::ShaderBinding> finalBlitBinding;
|
||||
|
||||
@@ -973,7 +913,6 @@ int main()
|
||||
builder.BindShaderBinding(0, *godRaysShaderBinding);
|
||||
|
||||
builder.BindPipeline(*godraysPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
@@ -990,7 +929,6 @@ int main()
|
||||
builder.BindShaderBinding(0, *bloomBrightShaderBinding);
|
||||
|
||||
builder.BindPipeline(*bloomBrightPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
@@ -1013,7 +951,6 @@ int main()
|
||||
|
||||
builder.BindShaderBinding(0, *gaussianBlurShaderBinding[i * 2 + 0]);
|
||||
builder.BindPipeline(*gaussianBlurPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
@@ -1034,7 +971,6 @@ int main()
|
||||
|
||||
builder.BindShaderBinding(0, *gaussianBlurShaderBinding[i * 2 + 1]);
|
||||
builder.BindPipeline(*gaussianBlurPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
@@ -1053,7 +989,6 @@ int main()
|
||||
{
|
||||
builder.SetScissor(env.renderRect);
|
||||
builder.SetViewport(env.renderRect);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
// Blend bloom
|
||||
builder.BindPipeline(*bloomBlendPipeline);
|
||||
@@ -1092,7 +1027,6 @@ int main()
|
||||
|
||||
builder.BindShaderBinding(0, *toneMappingShaderBinding);
|
||||
builder.BindPipeline(*toneMappingPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
});
|
||||
@@ -1592,7 +1526,7 @@ int main()
|
||||
|
||||
builder.BindShaderBinding(0, *finalBlitBinding);
|
||||
builder.BindPipeline(*fullscreenPipeline);
|
||||
builder.BindVertexBuffer(0, *fullscreenVertexBuffer);
|
||||
|
||||
builder.Draw(3);
|
||||
}
|
||||
builder.EndDebugRegion();
|
||||
|
||||
@@ -12,51 +12,24 @@
|
||||
|
||||
NAZARA_REQUEST_DEDICATED_GPU()
|
||||
|
||||
const char barModuleSource[] = R"(
|
||||
const char shaderSource[] = R"(
|
||||
[nzsl_version("1.0")]
|
||||
module Test.Bar;
|
||||
module;
|
||||
|
||||
fn dummy() {}
|
||||
option red: bool = false;
|
||||
|
||||
[export]
|
||||
[layout(std140)]
|
||||
struct Bar
|
||||
{
|
||||
}
|
||||
)";
|
||||
|
||||
const char dataModuleSource[] = R"(
|
||||
[nzsl_version("1.0")]
|
||||
module Test.Data;
|
||||
|
||||
import Test.Bar;
|
||||
|
||||
struct Foo {}
|
||||
|
||||
[export]
|
||||
[layout(std140)]
|
||||
struct Data
|
||||
{
|
||||
projectionMatrix: mat4[f32],
|
||||
worldMatrix: mat4[f32],
|
||||
viewMatrix: mat4[f32],
|
||||
pilier: Bar
|
||||
viewMatrix: mat4[f32]
|
||||
}
|
||||
)";
|
||||
|
||||
const char shaderSource[] = R"(
|
||||
[nzsl_version("1.0")]
|
||||
module;
|
||||
|
||||
import Test.Data;
|
||||
import Test.Bar;
|
||||
|
||||
option red: bool = false;
|
||||
|
||||
[set(0)]
|
||||
external
|
||||
{
|
||||
[binding(0)] viewerData: uniform[Data]
|
||||
[binding(0)] data: uniform[Data]
|
||||
}
|
||||
|
||||
[set(1)]
|
||||
@@ -100,7 +73,7 @@ fn main(fragIn: VertOut) -> FragOut
|
||||
fn main(vertIn: VertIn) -> VertOut
|
||||
{
|
||||
let vertOut: VertOut;
|
||||
vertOut.position = viewerData.projectionMatrix * viewerData.viewMatrix * viewerData.worldMatrix * vec4[f32](vertIn.position, 1.0);
|
||||
vertOut.position = data.projectionMatrix * data.viewMatrix * data.worldMatrix * vec4[f32](vertIn.position, 1.0);
|
||||
vertOut.normal = vertIn.normal;
|
||||
vertOut.uv = vertIn.uv;
|
||||
|
||||
@@ -110,9 +83,9 @@ fn main(vertIn: VertIn) -> VertOut
|
||||
|
||||
int main()
|
||||
{
|
||||
std::filesystem::path resourceDir = "resources";
|
||||
if (!std::filesystem::is_directory(resourceDir) && std::filesystem::is_directory(".." / resourceDir))
|
||||
resourceDir = ".." / resourceDir;
|
||||
std::filesystem::path resourceDir = "assets/examples";
|
||||
if (!std::filesystem::is_directory(resourceDir) && std::filesystem::is_directory("../.." / resourceDir))
|
||||
resourceDir = "../.." / resourceDir;
|
||||
|
||||
Nz::Renderer::Config rendererConfig;
|
||||
std::cout << "Run using Vulkan? (y/n)" << std::endl;
|
||||
@@ -141,26 +114,8 @@ int main()
|
||||
return __LINE__;
|
||||
}
|
||||
|
||||
auto directoryModuleResolver = std::make_shared<nzsl::FilesystemModuleResolver>();
|
||||
directoryModuleResolver->RegisterModule(std::string_view(barModuleSource));
|
||||
directoryModuleResolver->RegisterModule(std::string_view(dataModuleSource));
|
||||
|
||||
nzsl::Ast::SanitizeVisitor::Options sanitizeOpt;
|
||||
sanitizeOpt.moduleResolver = directoryModuleResolver;
|
||||
|
||||
shaderModule = nzsl::Ast::Sanitize(*shaderModule, sanitizeOpt);
|
||||
if (!shaderModule)
|
||||
{
|
||||
std::cout << "Failed to compile shader module" << std::endl;
|
||||
return __LINE__;
|
||||
}
|
||||
|
||||
nzsl::LangWriter langWriter;
|
||||
std::string output = langWriter.Generate(*shaderModule);
|
||||
std::cout << output << std::endl;
|
||||
assert(nzsl::Ast::Sanitize(*nzsl::Parse(output)));
|
||||
|
||||
nzsl::ShaderWriter::States states;
|
||||
states.optionValues[Nz::CRC32("red")] = false; //< Try enabling this!
|
||||
states.optimize = true;
|
||||
|
||||
auto fragVertShader = device->InstantiateShaderModule(nzsl::ShaderStageType::Fragment | nzsl::ShaderStageType::Vertex, *shaderModule, states);
|
||||
@@ -176,14 +131,14 @@ int main()
|
||||
meshParams.matrix = Nz::Matrix4f::Rotate(Nz::EulerAnglesf(0.f, -90.f, 0.f)) * Nz::Matrix4f::Scale(Nz::Vector3f(0.002f));
|
||||
meshParams.vertexDeclaration = Nz::VertexDeclaration::Get(Nz::VertexLayout::XYZ_Normal_UV);
|
||||
|
||||
std::shared_ptr<Nz::Mesh> drfreak = Nz::Mesh::LoadFromFile(resourceDir / "Spaceship/spaceship.obj", meshParams);
|
||||
if (!drfreak)
|
||||
std::shared_ptr<Nz::Mesh> spaceship = Nz::Mesh::LoadFromFile(resourceDir / "Spaceship/spaceship.obj", meshParams);
|
||||
if (!spaceship)
|
||||
{
|
||||
NazaraError("Failed to load model");
|
||||
return __LINE__;
|
||||
}
|
||||
|
||||
std::shared_ptr<Nz::StaticMesh> spaceshipMesh = std::static_pointer_cast<Nz::StaticMesh>(drfreak->GetSubMesh(0));
|
||||
std::shared_ptr<Nz::StaticMesh> spaceshipMesh = std::static_pointer_cast<Nz::StaticMesh>(spaceship->GetSubMesh(0));
|
||||
|
||||
const std::shared_ptr<Nz::VertexBuffer>& meshVB = spaceshipMesh->GetVertexBuffer();
|
||||
const std::shared_ptr<const Nz::IndexBuffer>& meshIB = spaceshipMesh->GetIndexBuffer();
|
||||
|
||||
Reference in New Issue
Block a user