Added helper function for loading shaders into buffers

This commit is contained in:
Warwick New 2025-01-06 14:51:40 +00:00
parent fc9768f859
commit d596dfc579

View file

@ -183,17 +183,12 @@ void createInstance(Application *app) {
} }
} }
// This currently leaks memory :( // This currently leaks memory on laptop :(
VkResult result = vkCreateInstance(&createInfo, NULL, &app->instance); VkResult result = vkCreateInstance(&createInfo, NULL, &app->instance);
if (result != VK_SUCCESS) { if (result != VK_SUCCESS) {
fprintf(stderr, "Failed to create vulkan instance\n"); fprintf(stderr, "Failed to create vulkan instance\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
//printf("Instance Extentions Available:\n");
//for (uint i = 0; i < extensionCount; i++) {
// printf("\t%s\n", extensions[i].extensionName);
//}
} }
void initWindow(Application *app) { void initWindow(Application *app) {
@ -615,6 +610,61 @@ void createImageViews(Application *app) {
} }
} }
// Buffer should be freed
typedef struct {
char *buffer;
size_t bufferSize;
} ShaderBuffer;
ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) {
ShaderBuffer buf = {.buffer = NULL, .bufferSize = 0};
FILE *file = fopen(fileLocation, "r");
if (file == NULL) {
fprintf(stderr, "Could not open file \"%s\"!\n", fileLocation);
exit(EXIT_FAILURE);
}
if (fseek(file, 0L, SEEK_END) != 0) {
fprintf(stderr, "Could not seek to the end of file \"%s\"!\n",
fileLocation);
exit(EXIT_FAILURE);
}
buf.bufferSize = ftell(file);
if (fseek(file, 0L, SEEK_SET) != 0) {
fprintf(stderr, "Could not seek to the start of file \"%s\"!\n",
fileLocation);
exit(EXIT_FAILURE);
}
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) {
fprintf(stderr, "Error reading file into buffer \"%s\"!\n", fileLocation);
exit(EXIT_FAILURE);
}
fclose(file);
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");
free(vertShader.buffer);
free(fragShader.buffer);
}
void initVulkan(Application *app) { void initVulkan(Application *app) {
createInstance(app); createInstance(app);
setupDebugMessenger(app); setupDebugMessenger(app);
@ -623,6 +673,7 @@ void initVulkan(Application *app) {
createLogicalDevice(app); createLogicalDevice(app);
createSwapChain(app); createSwapChain(app);
createImageViews(app); createImageViews(app);
createGraphicsPipeline(app);
} }
void mainLoop(Application *app) { void mainLoop(Application *app) {