Skip to content
Snippets Groups Projects
Commit e30d8c8a authored by Vanessa Karolek's avatar Vanessa Karolek
Browse files

[#42] update main files for trackball showcase

Just comment/uncomment lines to switch between normal camera and trackball camera (:
parent edba5695
No related branches found
No related tags found
1 merge request!35Resolve "Kamera - Trackballkamera"
Pipeline #25317 passed
...@@ -147,8 +147,10 @@ int main(int argc, const char** argv) { ...@@ -147,8 +147,10 @@ int main(int argc, const char** argv) {
auto end = std::chrono::system_clock::now(); auto end = std::chrono::system_clock::now();
auto deltatime = end - start; auto deltatime = end - start;
start = end; start = end;
cameraManager.getCamera().updateView(std::chrono::duration<double>(deltatime).count()); // cameraManager.getCamera().updateView(std::chrono::duration<double>(deltatime).count());
const glm::mat4 mvp = cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView(); // const glm::mat4 mvp = cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView();
cameraManager.getTrackballCamera().updateView(std::chrono::duration<double>(deltatime).count());
const glm::mat4 mvp = cameraManager.getTrackballCamera().getProjection() * cameraManager.getTrackballCamera().getView();
core.renderMesh( core.renderMesh(
trianglePass, trianglePass,
......
...@@ -5,161 +5,163 @@ ...@@ -5,161 +5,163 @@
#include <chrono> #include <chrono>
int main(int argc, const char** argv) { int main(int argc, const char** argv) {
const char* applicationName = "First Triangle"; const char* applicationName = "First Triangle";
const int windowWidth = 800; const int windowWidth = 800;
const int windowHeight = 600; const int windowHeight = 600;
vkcv::Window window = vkcv::Window::create( vkcv::Window window = vkcv::Window::create(
applicationName, applicationName,
windowWidth, windowWidth,
windowHeight, windowHeight,
false false
); );
vkcv::CameraManager cameraManager(window, windowWidth, windowHeight); vkcv::CameraManager cameraManager(window, windowWidth, windowHeight);
cameraManager.getTrackballCamera().setPosition(glm::vec3(0.0f,0.5f,0.0f));
window.initEvents(); cameraManager.getTrackballCamera().setCenter(glm::vec3(0.0f,0.0f,-1.0f));
vkcv::Core core = vkcv::Core::create( window.initEvents();
window,
applicationName, vkcv::Core core = vkcv::Core::create(
VK_MAKE_VERSION(0, 0, 1), window,
{ vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute }, applicationName,
{}, VK_MAKE_VERSION(0, 0, 1),
{ "VK_KHR_swapchain" } { vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute },
); {},
{ "VK_KHR_swapchain" }
const auto& context = core.getContext(); );
const vk::Instance& instance = context.getInstance();
const vk::PhysicalDevice& physicalDevice = context.getPhysicalDevice(); const auto& context = core.getContext();
const vk::Device& device = context.getDevice(); const vk::Instance& instance = context.getInstance();
const vk::PhysicalDevice& physicalDevice = context.getPhysicalDevice();
struct vec3 { const vk::Device& device = context.getDevice();
float x, y, z;
}; struct vec3 {
float x, y, z;
const size_t n = 5027; };
auto testBuffer = core.createBuffer<vec3>(vkcv::BufferType::VERTEX, n, vkcv::BufferMemoryType::DEVICE_LOCAL); const size_t n = 5027;
vec3 vec_data[n];
auto testBuffer = core.createBuffer<vec3>(vkcv::BufferType::VERTEX, n, vkcv::BufferMemoryType::DEVICE_LOCAL);
for (size_t i = 0; i < n; i++) { vec3 vec_data[n];
vec_data[i] = { 42, static_cast<float>(i), 7 };
} for (size_t i = 0; i < n; i++) {
vec_data[i] = { 42, static_cast<float>(i), 7 };
testBuffer.fill(vec_data); }
auto triangleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, n, vkcv::BufferMemoryType::DEVICE_LOCAL); testBuffer.fill(vec_data);
uint16_t indices[3] = { 0, 1, 2 };
triangleIndexBuffer.fill(&indices[0], sizeof(indices)); auto triangleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, n, vkcv::BufferMemoryType::DEVICE_LOCAL);
uint16_t indices[3] = { 0, 1, 2 };
/*vec3* m = buffer.map(); triangleIndexBuffer.fill(&indices[0], sizeof(indices));
m[0] = { 0, 0, 0 };
m[1] = { 0, 0, 0 }; /*vec3* m = buffer.map();
m[2] = { 0, 0, 0 }; m[0] = { 0, 0, 0 };
buffer.unmap();*/ m[1] = { 0, 0, 0 };
m[2] = { 0, 0, 0 };
vkcv::SamplerHandle sampler = core.createSampler( buffer.unmap();*/
vkcv::SamplerFilterType::NEAREST,
vkcv::SamplerFilterType::NEAREST, vkcv::SamplerHandle sampler = core.createSampler(
vkcv::SamplerMipmapMode::NEAREST, vkcv::SamplerFilterType::NEAREST,
vkcv::SamplerAddressMode::REPEAT vkcv::SamplerFilterType::NEAREST,
); vkcv::SamplerMipmapMode::NEAREST,
vkcv::SamplerAddressMode::REPEAT
std::cout << "Physical device: " << physicalDevice.getProperties().deviceName << std::endl; );
switch (physicalDevice.getProperties().vendorID) { std::cout << "Physical device: " << physicalDevice.getProperties().deviceName << std::endl;
case 0x1002: std::cout << "Running AMD huh? You like underdogs, are you a Linux user?" << std::endl; break;
case 0x10DE: std::cout << "An NVidia GPU, how predictable..." << std::endl; break; switch (physicalDevice.getProperties().vendorID) {
case 0x8086: std::cout << "Poor child, running on an Intel GPU, probably integrated..." case 0x1002: std::cout << "Running AMD huh? You like underdogs, are you a Linux user?" << std::endl; break;
"or perhaps you are from the future with a dedicated one?" << std::endl; break; case 0x10DE: std::cout << "An NVidia GPU, how predictable..." << std::endl; break;
case 0x13B5: std::cout << "ARM? What the hell are you running on, next thing I know you're trying to run Vulkan on a leg..." << std::endl; break; case 0x8086: std::cout << "Poor child, running on an Intel GPU, probably integrated..."
default: std::cout << "Unknown GPU vendor?! Either you're on an exotic system or your driver is broken..." << std::endl; "or perhaps you are from the future with a dedicated one?" << std::endl; break;
} case 0x13B5: std::cout << "ARM? What the hell are you running on, next thing I know you're trying to run Vulkan on a leg..." << std::endl; break;
default: std::cout << "Unknown GPU vendor?! Either you're on an exotic system or your driver is broken..." << std::endl;
// an example attachment for passes that output to the window }
const vkcv::AttachmentDescription present_color_attachment(
vkcv::AttachmentLayout::UNDEFINED, // an example attachment for passes that output to the window
vkcv::AttachmentLayout::COLOR_ATTACHMENT, const vkcv::AttachmentDescription present_color_attachment(
vkcv::AttachmentLayout::PRESENTATION, vkcv::AttachmentLayout::UNDEFINED,
vkcv::AttachmentOperation::STORE, vkcv::AttachmentLayout::COLOR_ATTACHMENT,
vkcv::AttachmentOperation::CLEAR, vkcv::AttachmentLayout::PRESENTATION,
core.getSwapchainImageFormat()); vkcv::AttachmentOperation::STORE,
vkcv::AttachmentOperation::CLEAR,
vkcv::PassConfig trianglePassDefinition({ present_color_attachment }); core.getSwapchainImageFormat());
vkcv::PassHandle trianglePass = core.createPass(trianglePassDefinition);
vkcv::PassConfig trianglePassDefinition({ present_color_attachment });
if (!trianglePass) vkcv::PassHandle trianglePass = core.createPass(trianglePassDefinition);
{
std::cout << "Error. Could not create renderpass. Exiting." << std::endl; if (!trianglePass)
return EXIT_FAILURE; {
} std::cout << "Error. Could not create renderpass. Exiting." << std::endl;
return EXIT_FAILURE;
vkcv::ShaderProgram triangleShaderProgram{}; }
triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv")); vkcv::ShaderProgram triangleShaderProgram{};
triangleShaderProgram.reflectShader(vkcv::ShaderStage::VERTEX); triangleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
triangleShaderProgram.reflectShader(vkcv::ShaderStage::FRAGMENT); triangleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path("shaders/frag.spv"));
triangleShaderProgram.reflectShader(vkcv::ShaderStage::VERTEX);
const vkcv::PipelineConfig trianglePipelineDefinition( triangleShaderProgram.reflectShader(vkcv::ShaderStage::FRAGMENT);
triangleShaderProgram,
windowWidth, const vkcv::PipelineConfig trianglePipelineDefinition(
windowHeight, triangleShaderProgram,
trianglePass, windowWidth,
{}, windowHeight,
{}); trianglePass,
vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition); {},
{});
if (!trianglePipeline) vkcv::PipelineHandle trianglePipeline = core.createGraphicsPipeline(trianglePipelineDefinition);
{
std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl; if (!trianglePipeline)
return EXIT_FAILURE; {
} std::cout << "Error. Could not create graphics pipeline. Exiting." << std::endl;
return EXIT_FAILURE;
std::vector<vkcv::VertexBufferBinding> vertexBufferBindings; }
/* std::vector<vkcv::VertexBufferBinding> vertexBufferBindings;
* BufferHandle triangleVertices = core.createBuffer(vertices);
* BufferHandle triangleIndices = core.createBuffer(indices); /*
* * BufferHandle triangleVertices = core.createBuffer(vertices);
* // triangle Model creation goes here * BufferHandle triangleIndices = core.createBuffer(indices);
* *
* * // triangle Model creation goes here
* // attachment creation goes here *
* PassHandle trianglePass = core.CreatePass(presentationPass); *
* * // attachment creation goes here
* // shader creation goes here * PassHandle trianglePass = core.CreatePass(presentationPass);
* // material creation goes here *
* * // shader creation goes here
* PipelineHandle trianglePipeline = core.CreatePipeline(trianglePipeline); * // material creation goes here
*/ *
* PipelineHandle trianglePipeline = core.CreatePipeline(trianglePipeline);
*/
auto start = std::chrono::system_clock::now(); auto start = std::chrono::system_clock::now();
while (window.isWindowOpen()) while (window.isWindowOpen())
{ {
core.beginFrame(); core.beginFrame();
window.pollEvents(); window.pollEvents();
auto end = std::chrono::system_clock::now(); auto end = std::chrono::system_clock::now();
auto deltatime = end - start; auto deltatime = end - start;
start = end; start = end;
// cameraManager.getCamera().updateView(std::chrono::duration<double>(deltatime).count()); // cameraManager.getCamera().updateView(std::chrono::duration<double>(deltatime).count());
// const glm::mat4 mvp = cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView(); // const glm::mat4 mvp = cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView();
cameraManager.getTrackballCamera().updateView(std::chrono::duration<double>(deltatime).count()); cameraManager.getTrackballCamera().updateView(std::chrono::duration<double>(deltatime).count());
const glm::mat4 mvp = cameraManager.getTrackballCamera().getProjection() * cameraManager.getTrackballCamera().getView(); const glm::mat4 mvp = cameraManager.getTrackballCamera().getProjection() * cameraManager.getTrackballCamera().getView();
core.renderMesh( core.renderMesh(
trianglePass, trianglePass,
trianglePipeline, trianglePipeline,
windowWidth, windowWidth,
windowHeight, windowHeight,
sizeof(mvp), sizeof(mvp),
&mvp, &mvp,
vertexBufferBindings, vertexBufferBindings,
triangleIndexBuffer.getHandle(), triangleIndexBuffer.getHandle(),
3, 3,
vkcv::ResourcesHandle(), vkcv::ResourcesHandle(),
0); 0);
core.endFrame(); core.endFrame();
} }
return 0; return 0;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment