mirror of
https://github.com/love2d/love.git
synced 2026-08-17 19:23:38 +02:00
Merge branch 'vulkan' of https://github.com/nikeinikei/love into vulkan
This commit is contained in:
@@ -58,32 +58,19 @@ namespace love {
|
|||||||
|
|
||||||
void Graphics::initVulkan() {
|
void Graphics::initVulkan() {
|
||||||
if (!init) {
|
if (!init) {
|
||||||
std::cout << "initVulkan" << std::endl;
|
|
||||||
init = true;
|
init = true;
|
||||||
createVulkanInstance();
|
createVulkanInstance();
|
||||||
std::cout << "create vulkan instance" << std::endl;
|
|
||||||
createSurface();
|
createSurface();
|
||||||
std::cout << "create surface" << std::endl;
|
|
||||||
pickPhysicalDevice();
|
pickPhysicalDevice();
|
||||||
std::cout << "create physical device" << std::endl;
|
|
||||||
createLogicalDevice();
|
createLogicalDevice();
|
||||||
std::cout << "create logical device" << std::endl;
|
|
||||||
createSwapChain();
|
createSwapChain();
|
||||||
std::cout << "create swap chain" << std::endl;
|
|
||||||
createImageViews();
|
createImageViews();
|
||||||
std::cout << "create image views" << std::endl;
|
|
||||||
createRenderPass();
|
createRenderPass();
|
||||||
std::cout << "create render pass" << std::endl;
|
|
||||||
createGraphicsPipeline();
|
createGraphicsPipeline();
|
||||||
std::cout << "create graphics pipeline" << std::endl;
|
|
||||||
createFramebuffers();
|
createFramebuffers();
|
||||||
std::cout << "create frame buffers" << std::endl;
|
|
||||||
createCommandPool();
|
createCommandPool();
|
||||||
std::cout << "create command pool" << std::endl;
|
|
||||||
createCommandBuffers();
|
createCommandBuffers();
|
||||||
std::cout << "create command buffers" << std::endl;
|
|
||||||
createSyncObjects();
|
createSyncObjects();
|
||||||
std::cout << "create sync objects" << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,7 +79,7 @@ namespace love {
|
|||||||
}
|
}
|
||||||
|
|
||||||
love::graphics::Buffer* Graphics::newBuffer(const love::graphics::Buffer::Settings& settings, const std::vector<love::graphics::Buffer::DataDeclaration>& format, const void* data, size_t size, size_t arraylength) {
|
love::graphics::Buffer* Graphics::newBuffer(const love::graphics::Buffer::Settings& settings, const std::vector<love::graphics::Buffer::DataDeclaration>& format, const void* data, size_t size, size_t arraylength) {
|
||||||
return new Buffer(this, settings, format, data, size, arraylength);
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::present(void* screenshotCallbackdata) {
|
void Graphics::present(void* screenshotCallbackdata) {
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
#include "Graphics.h"
|
#include "Graphics.h"
|
||||||
|
|
||||||
#include <shaderc/shaderc.hpp>
|
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
@@ -11,28 +9,12 @@
|
|||||||
namespace love {
|
namespace love {
|
||||||
namespace graphics {
|
namespace graphics {
|
||||||
namespace vulkan {
|
namespace vulkan {
|
||||||
static shaderc_shader_kind getShaderStage(ShaderStageType stage) {
|
|
||||||
switch (stage) {
|
|
||||||
case SHADERSTAGE_VERTEX: return shaderc_vertex_shader;
|
|
||||||
case SHADERSTAGE_PIXEL: return shaderc_fragment_shader;
|
|
||||||
case SHADERSTAGE_COMPUTE: return shaderc_compute_shader;
|
|
||||||
default:
|
|
||||||
throw love::Exception("unknown exception");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderStage::ShaderStage(love::graphics::Graphics* gfx, ShaderStageType stage, const std::string& glsl, bool gles, const std::string& cachekey)
|
ShaderStage::ShaderStage(love::graphics::Graphics* gfx, ShaderStageType stage, const std::string& glsl, bool gles, const std::string& cachekey)
|
||||||
: love::graphics::ShaderStage(gfx, stage, glsl, gles, cachekey) {
|
: love::graphics::ShaderStage(gfx, stage, glsl, gles, cachekey) {
|
||||||
using namespace shaderc;
|
|
||||||
|
|
||||||
Compiler compiler{};
|
|
||||||
auto result = compiler.CompileGlslToSpv(glsl, shaderc_vertex_shader, "shader.glsl");
|
|
||||||
std::vector<uint32_t> code(result.begin(), result.end());
|
|
||||||
|
|
||||||
VkShaderModuleCreateInfo createInfo{};
|
VkShaderModuleCreateInfo createInfo{};
|
||||||
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||||
createInfo.codeSize = code.size() * sizeof(unsigned int);
|
createInfo.codeSize = 0;
|
||||||
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
|
createInfo.pCode = nullptr;
|
||||||
|
|
||||||
Graphics* vkGfx = (Graphics*)gfx;
|
Graphics* vkGfx = (Graphics*)gfx;
|
||||||
device = vkGfx->getDevice();
|
device = vkGfx->getDevice();
|
||||||
|
|||||||
Reference in New Issue
Block a user