created shader modules and stage definitions

This commit is contained in:
Warwick New 2025-01-06 15:19:05 +00:00
parent d596dfc579
commit 5a1dcf9151

View file

@ -637,7 +637,8 @@ ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) {
fileLocation);
exit(EXIT_FAILURE);
}
buf.buffer = malloc(sizeof(char) * (buf.bufferSize)); // Not '\0' terminting ourselves
buf.buffer =
malloc(sizeof(char) * (buf.bufferSize)); // Not '\0' terminting ourselves
size_t tempSize = fread(buf.buffer, sizeof(char), buf.bufferSize, file);
if (ferror(file) != 0) {
@ -649,20 +650,55 @@ ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) {
return buf;
}
void createGraphicsPipeline(Application *app) {
ShaderBuffer vertShader = loadShaderIntoBuffer("shaders/shader.vert.spv");
for (int i = 0; i < vertShader.bufferSize;i++){
printf("%c",vertShader.buffer[i]);
}
printf("\n");
ShaderBuffer fragShader = loadShaderIntoBuffer("shaders/shader.frag.spv");
for (int i = 0; i < fragShader.bufferSize;i++){
printf("%c",fragShader.buffer[i]);
}
printf("\n");
VkShaderModule createShaderModule(VkDevice device, ShaderBuffer code) {
VkShaderModuleCreateInfo createInfo = {0};
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
createInfo.codeSize = code.bufferSize;
createInfo.pCode = (uint32_t *)code.buffer;
free(vertShader.buffer);
free(fragShader.buffer);
VkShaderModule shaderModule;
if (vkCreateShaderModule(device, &createInfo, NULL, &shaderModule) !=
VK_SUCCESS) {
fprintf(stderr, "Failed to create shaderModule from Shader Code!");
exit(EXIT_FAILURE);
}
return shaderModule;
}
void createGraphicsPipeline(Application *app) {
ShaderBuffer vertShaderCode = loadShaderIntoBuffer("shaders/shader.vert.spv");
ShaderBuffer fragShaderCode = loadShaderIntoBuffer("shaders/shader.frag.spv");
VkShaderModule vertShaderModule =
createShaderModule(app->device, vertShaderCode);
VkShaderModule fragShaderModule =
createShaderModule(app->device, fragShaderCode);
free(vertShaderCode.buffer);
free(fragShaderCode.buffer);
VkPipelineShaderStageCreateInfo vertShaderStageInfo = {0};
vertShaderStageInfo.sType =
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
vertShaderStageInfo.module = vertShaderModule;
vertShaderStageInfo.pName = "main";
vertShaderStageInfo.pSpecializationInfo = NULL;
VkPipelineShaderStageCreateInfo fragShaderStageInfo = {0};
fragShaderStageInfo.sType =
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
fragShaderStageInfo.module = fragShaderModule;
fragShaderStageInfo.pName = "main";
vertShaderStageInfo.pSpecializationInfo = NULL;
VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo,
fragShaderStageInfo};
vkDestroyShaderModule(app->device, fragShaderModule, NULL);
vkDestroyShaderModule(app->device, vertShaderModule, NULL);
}
void initVulkan(Application *app) {