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);
|
fileLocation);
|
||||||
exit(EXIT_FAILURE);
|
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);
|
size_t tempSize = fread(buf.buffer, sizeof(char), buf.bufferSize, file);
|
||||||
if (ferror(file) != 0) {
|
if (ferror(file) != 0) {
|
||||||
|
|
@ -649,20 +650,55 @@ ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) {
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
void createGraphicsPipeline(Application *app) {
|
VkShaderModule createShaderModule(VkDevice device, ShaderBuffer code) {
|
||||||
ShaderBuffer vertShader = loadShaderIntoBuffer("shaders/shader.vert.spv");
|
VkShaderModuleCreateInfo createInfo = {0};
|
||||||
for (int i = 0; i < vertShader.bufferSize;i++){
|
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
|
||||||
printf("%c",vertShader.buffer[i]);
|
createInfo.codeSize = code.bufferSize;
|
||||||
}
|
createInfo.pCode = (uint32_t *)code.buffer;
|
||||||
printf("\n");
|
|
||||||
ShaderBuffer fragShader = loadShaderIntoBuffer("shaders/shader.frag.spv");
|
|
||||||
for (int i = 0; i < fragShader.bufferSize;i++){
|
|
||||||
printf("%c",fragShader.buffer[i]);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
free(vertShader.buffer);
|
VkShaderModule shaderModule;
|
||||||
free(fragShader.buffer);
|
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) {
|
void initVulkan(Application *app) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue