summaryrefslogtreecommitdiff
path: root/src/assets.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2026-01-11 16:20:15 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2026-01-11 16:20:15 +0100
commit1ab0d5fb96624e0fb92b961fc02b3e6344126033 (patch)
tree78aa653a5ca9c894ec6c4dc2000d1e6115c4c5b8 /src/assets.cpp
parent08d42688d851eb134da496be721e234f53ff8d0b (diff)
add icons for external providers
Diffstat (limited to 'src/assets.cpp')
-rw-r--r--src/assets.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/assets.cpp b/src/assets.cpp
new file mode 100644
index 0000000..7ea3cdb
--- /dev/null
+++ b/src/assets.cpp
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2025 Aldrik Ramaekers <aldrik.ramaekers@gmail.com>
+*
+* Permission to use, copy, modify, and/or distribute this software for any
+* purpose with or without fee is hereby granted, provided that the above
+* copyright notice and this permission notice appear in all copies.
+*
+* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include <GLFW/glfw3.h>
+#include <stb/stb_image.h>
+
+#include "assets.hpp"
+#include "strops.hpp"
+
+#include "assets/splash.h"
+
+#include "assets/logos/MailSender.h"
+#include "assets/logos/Perplexity.h"
+#include "assets/logos/OpenAI.h"
+#include "assets/logos/Gemini.h"
+
+#define MAX_IMAGE_COUNT 5
+
+image _image_dict[MAX_IMAGE_COUNT] = {
+ (image){-1, "img/splash", (const void*)img_splash, img_splash_length},
+ (image){-1, "img/logos/mailsender", (const void*)img_mailsender, img_mailsender_length},
+ (image){-1, "img/logos/openai", (const void*)img_openai, img_openai_length},
+ (image){-1, "img/logos/perplexity", (const void*)img_perplexity, img_perplexity_length},
+ (image){-1, "img/logos/gemini", (const void*)img_gemini, img_gemini_length},
+};
+
+static int _load_image(image img)
+{
+ int width, height, channels;
+ unsigned char* data = stbi_load_from_memory((const stbi_uc*)img.data_start, img.data_length, &width, &height, &channels, 0);
+
+ if (!data)
+ {
+ printf("%s\n", stbi_failure_reason());
+ return 0;
+ }
+
+ GLuint textureID;
+ glGenTextures(1, &textureID);
+ glBindTexture(GL_TEXTURE_2D, textureID);
+
+ // Set texture parameters
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+
+ // Upload texture data
+ GLenum format = (channels == 4) ? GL_RGBA : GL_RGB;
+ glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data);
+ //glGenerateMipmap(GL_TEXTURE_2D);
+
+ // Free image memory
+ stbi_image_free(data);
+
+ return textureID;
+}
+
+s32 assets::load_image(const char* name)
+{
+ for (u32 i = 0; i < MAX_IMAGE_COUNT; i++)
+ {
+ if (strops::equals(_image_dict[i].name, name)) {
+
+ if (_image_dict[i].img_id == -1) {
+ _image_dict[i].img_id = _load_image(_image_dict[i]);
+ }
+ return _image_dict[i].img_id;
+ }
+ }
+
+ return 0;
+} \ No newline at end of file