Добавил шейдеры
This commit is contained in:
parent
2957cfd399
commit
e7cd030fe0
|
@ -38,6 +38,7 @@ class Vulkan
|
||||||
void createWindowSurface(GLFWwindow* window); // Создание поверхности окна
|
void createWindowSurface(GLFWwindow* window); // Создание поверхности окна
|
||||||
void createSwapchain(GLFWwindow* window); // Создание цепочки показа
|
void createSwapchain(GLFWwindow* window); // Создание цепочки показа
|
||||||
void createRenderpass(); // Создание проходов рендера
|
void createRenderpass(); // Создание проходов рендера
|
||||||
|
VkShaderModule createShaderModule(const char * filename); // Создание шейдерного модуля
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VK_H
|
#endif // VK_H
|
|
@ -0,0 +1,9 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(location = 0) in vec3 fragColor;
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 outColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
outColor = vec4(fragColor, 1.0);
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(location = 0) in vec2 inPosition;
|
||||||
|
layout(location = 1) in vec3 inColor;
|
||||||
|
|
||||||
|
layout(location = 0) out vec3 fragColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = vec4(inPosition, 0.0, 1.0);
|
||||||
|
fragColor = inColor;
|
||||||
|
}
|
48
src/vk.cpp
48
src/vk.cpp
|
@ -513,4 +513,52 @@ void Vulkan::createRenderpass()
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Unable to create render pass");
|
throw std::runtime_error("Unable to create render pass");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
// Считывание бинарного файла, содержащего шейдер
|
||||||
|
void readFile(const char * filename, std::vector<char>& buffer)
|
||||||
|
{
|
||||||
|
// откроем файл как бинарный и установим курсор в конец файла
|
||||||
|
std::ifstream file(filename, std::ios::ate | std::ios::binary);
|
||||||
|
// если файл не открыт - генерируем исключение
|
||||||
|
if (!file.is_open())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Can't open file");
|
||||||
|
}
|
||||||
|
// определим размер файла
|
||||||
|
size_t fileSize = (size_t) file.tellg();
|
||||||
|
// создадим буфер
|
||||||
|
buffer.resize(fileSize);
|
||||||
|
|
||||||
|
// перенесем курсор в начало файла
|
||||||
|
file.seekg(0);
|
||||||
|
// считаем данные в буфер
|
||||||
|
file.read(buffer.data(), fileSize);
|
||||||
|
// закроем файл
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Создание шейдерного модуля
|
||||||
|
VkShaderModule Vulkan::createShaderModule(const char * filename)
|
||||||
|
{
|
||||||
|
// буфер для чтения из файла
|
||||||
|
std::vector<char> buffer;
|
||||||
|
// считаем шейдер из файла
|
||||||
|
readFile(filename, buffer);
|
||||||
|
|
||||||
|
// Информация о создаваемом шейдерном модуле
|
||||||
|
VkShaderModuleCreateInfo createInfo{};
|
||||||
|
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||||
|
createInfo.codeSize = buffer.size();
|
||||||
|
createInfo.pCode = reinterpret_cast<const uint32_t*>(buffer.data());
|
||||||
|
|
||||||
|
// Создание шейдерного модуля
|
||||||
|
VkShaderModule shaderModule;
|
||||||
|
if (vkCreateShaderModule(logicalDevice, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {
|
||||||
|
throw std::runtime_error("Unable to create shader module");
|
||||||
|
}
|
||||||
|
|
||||||
|
return shaderModule;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue