created shader modules and stage definitions
This commit is contained in:
parent
d596dfc579
commit
5a1dcf9151
1 changed files with 50 additions and 14 deletions
64
src/main.c
64
src/main.c
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue