#ifdef _arch_dreamcast #include "GL/glkos.h" #include "GL/glu.h" #include "GL/glext.h" #include "kos.h" #else #include "GL/gl.h" #endif #include "stdio.h" #include "dirent.h" #include "string.h" #include "../../include/base.h" const unsigned char font6x8_ascii[128][6] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x00 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x01 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x02 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x03 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x04 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x05 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x06 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x07 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x08 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x09 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0A {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0B {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0C {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0D {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0E {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x0F {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x10 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x11 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x12 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x13 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x14 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x15 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x16 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x17 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x18 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x19 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1A {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1B {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1C {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1D {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1E {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x1F {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 0x20 (space) {0x00, 0x00, 0x00, 0x2F, 0x00, 0x00}, // 0x21 (!) {0x00, 0x00, 0x03, 0x00, 0x03, 0x00}, // 0x22 (") {0x00, 0x14, 0x3E, 0x14, 0x3E, 0x14}, // 0x23 (#) {0x00, 0x04, 0x2A, 0x7F, 0x2A, 0x10}, // 0x24 ($) {0x00, 0x26, 0x10, 0x08, 0x04, 0x32}, // 0x25 (%) {0x00, 0x1A, 0x25, 0x29, 0x10, 0x28}, // 0x26 (&) {0x00, 0x00, 0x00, 0x03, 0x00, 0x00}, // 0x27 (') {0x00, 0x00, 0x3E, 0x41, 0x41, 0x00}, // 0x28 (() {0x00, 0x00, 0x41, 0x41, 0x3E, 0x00}, // 0x29 ()) {0x00, 0x28, 0x18, 0x0E, 0x18, 0x28}, // 0x2A (*) {0x00, 0x08, 0x08, 0x3E, 0x08, 0x08}, // 0x2B (+) {0x00, 0x00, 0x20, 0x10, 0x00, 0x00}, // 0x2C (,) {0x00, 0x08, 0x08, 0x08, 0x08, 0x08}, // 0x2D (-) {0x00, 0x00, 0x00, 0x10, 0x00, 0x00}, // 0x2E (.) {0x00, 0x20, 0x10, 0x08, 0x04, 0x02}, // 0x2F (/) {0x00, 0x00, 0x1E, 0x21, 0x21, 0x1E}, // 0x30 (0) {0x00, 0x00, 0x00, 0x22, 0x3F, 0x20}, // 0x31 (1) {0x00, 0x00, 0x22, 0x31, 0x29, 0x26}, // 0x32 (2) {0x00, 0x00, 0x12, 0x21, 0x25, 0x1A}, // 0x33 (3) {0x00, 0x00, 0x0C, 0x0A, 0x3F, 0x08}, // 0x34 (4) {0x00, 0x00, 0x17, 0x25, 0x25, 0x19}, // 0x35 (5) {0x00, 0x00, 0x1C, 0x26, 0x25, 0x18}, // 0x36 (6) {0x00, 0x00, 0x01, 0x39, 0x05, 0x03}, // 0x37 (7) {0x00, 0x00, 0x1A, 0x25, 0x25, 0x1A}, // 0x38 (8) {0x00, 0x00, 0x06, 0x09, 0x29, 0x1E}, // 0x39 (9) {0x00, 0x00, 0x00, 0x14, 0x00, 0x00}, // 0x3A (:) {0x00, 0x00, 0x20, 0x14, 0x00, 0x00}, // 0x3B (;) {0x00, 0x00, 0x08, 0x14, 0x22, 0x00}, // 0x3C (<) {0x00, 0x00, 0x14, 0x14, 0x14, 0x00}, // 0x3D (=) {0x00, 0x00, 0x22, 0x14, 0x08, 0x00}, // 0x3E (>) {0x00, 0x02, 0x01, 0x29, 0x06, 0x00}, // 0x3F (?) {0x00, 0x1E, 0x21, 0x2D, 0x2E, 0x00}, // 0x40 (@) {0x00, 0x30, 0x0C, 0x0B, 0x0C, 0x30}, // 0x41 (A) {0x00, 0x00, 0x3F, 0x25, 0x25, 0x1A}, // 0x42 (B) {0x00, 0x00, 0x1E, 0x21, 0x21, 0x12}, // 0x43 (C) {0x00, 0x00, 0x3F, 0x21, 0x21, 0x1E}, // 0x44 (D) {0x00, 0x00, 0x3F, 0x25, 0x25, 0x25}, // 0x45 (E) {0x00, 0x00, 0x3F, 0x05, 0x05, 0x05}, // 0x46 (F) {0x00, 0x00, 0x1E, 0x21, 0x29, 0x1A}, // 0x47 (G) {0x00, 0x00, 0x3F, 0x04, 0x04, 0x3F}, // 0x48 (H) {0x00, 0x00, 0x21, 0x3F, 0x21, 0x00}, // 0x49 (I) {0x00, 0x18, 0x20, 0x21, 0x1F, 0x00}, // 0x4A (J) {0x00, 0x00, 0x3F, 0x0C, 0x12, 0x21}, // 0x4B (K) {0x00, 0x00, 0x3F, 0x20, 0x20, 0x20}, // 0x4C (L) {0x00, 0x3F, 0x06, 0x08, 0x06, 0x3F}, // 0x4D (M) {0x00, 0x00, 0x3F, 0x06, 0x18, 0x3F}, // 0x4E (N) {0x00, 0x00, 0x1E, 0x21, 0x21, 0x1E}, // 0x4F (O) {0x00, 0x00, 0x3F, 0x09, 0x09, 0x06}, // 0x50 (P) {0x00, 0x1E, 0x21, 0x21, 0x5E, 0x00}, // 0x51 (Q) {0x00, 0x00, 0x3F, 0x09, 0x19, 0x26}, // 0x52 (R) {0x00, 0x00, 0x12, 0x25, 0x29, 0x12}, // 0x53 (S) {0x00, 0x01, 0x01, 0x3F, 0x01, 0x01}, // 0x54 (T) {0x00, 0x1F, 0x20, 0x20, 0x20, 0x1F}, // 0x55 (U) {0x00, 0x0F, 0x10, 0x20, 0x10, 0x0F}, // 0x56 (V) {0x00, 0x1F, 0x20, 0x1C, 0x20, 0x1F}, // 0x57 (W) {0x00, 0x21, 0x12, 0x0C, 0x12, 0x21}, // 0x58 (X) {0x00, 0x03, 0x04, 0x38, 0x04, 0x03}, // 0x59 (Y) {0x00, 0x00, 0x31, 0x29, 0x25, 0x23}, // 0x5A (Z) {0x00, 0x00, 0x3F, 0x21, 0x21, 0x00}, // 0x5B ([) {0x00, 0x02, 0x04, 0x08, 0x10, 0x20}, // 0x5C (\) {0x00, 0x00, 0x21, 0x21, 0x3F, 0x00}, // 0x5D (]) {0x00, 0x04, 0x02, 0x01, 0x02, 0x04}, // 0x5E (^) {0x00, 0x40, 0x40, 0x40, 0x40, 0x40}, // 0x5F (_) {0x00, 0x00, 0x00, 0x01, 0x02, 0x00}, // 0x60 (`) {0x00, 0x18, 0x24, 0x24, 0x18, 0x20}, // 0x61 (a) {0x00, 0x00, 0x3F, 0x24, 0x24, 0x18}, // 0x62 (b) {0x00, 0x00, 0x18, 0x24, 0x24, 0x00}, // 0x63 (c) {0x00, 0x00, 0x18, 0x24, 0x24, 0x3F}, // 0x64 (d) {0x00, 0x00, 0x1C, 0x2A, 0x2A, 0x0C}, // 0x65 (e) {0x00, 0x04, 0x04, 0x3E, 0x05, 0x05}, // 0x66 (f) {0x00, 0x00, 0x0C, 0x52, 0x52, 0x3E}, // 0x67 (g) {0x00, 0x00, 0x3F, 0x04, 0x04, 0x38}, // 0x68 (h) {0x00, 0x00, 0x24, 0x3D, 0x20, 0x00}, // 0x69 (i) {0x00, 0x20, 0x40, 0x44, 0x3D, 0x00}, // 0x6A (j) {0x00, 0x00, 0x3F, 0x08, 0x14, 0x22}, // 0x6B (k) {0x00, 0x00, 0x1F, 0x20, 0x20, 0x10}, // 0x6C (l) {0x00, 0x3E, 0x04, 0x18, 0x04, 0x3E}, // 0x6D (m) {0x00, 0x00, 0x3C, 0x02, 0x02, 0x3C}, // 0x6E (n) {0x00, 0x00, 0x1C, 0x22, 0x22, 0x1C}, // 0x6F (o) {0x00, 0x00, 0x7E, 0x12, 0x12, 0x0C}, // 0x70 (p) {0x00, 0x00, 0x0C, 0x12, 0x12, 0x7E}, // 0x71 (q) {0x00, 0x00, 0x04, 0x38, 0x04, 0x04}, // 0x72 (r) {0x00, 0x00, 0x04, 0x2A, 0x2A, 0x10}, // 0x73 (s) {0x00, 0x00, 0x04, 0x1E, 0x24, 0x10}, // 0x74 (t) {0x00, 0x1C, 0x20, 0x20, 0x20, 0x1C}, // 0x75 (u) {0x00, 0x0C, 0x10, 0x20, 0x10, 0x0C}, // 0x76 (v) {0x00, 0x1C, 0x20, 0x18, 0x20, 0x1C}, // 0x77 (w) {0x00, 0x22, 0x14, 0x08, 0x14, 0x22}, // 0x78 (x) {0x00, 0x04, 0x48, 0x30, 0x08, 0x04}, // 0x79 (y) {0x00, 0x00, 0x24, 0x34, 0x2C, 0x24}, // 0x7A (z) {0x00, 0x08, 0x08, 0x36, 0x41, 0x41}, // 0x7B ({) {0x00, 0x00, 0x00, 0x7F, 0x00, 0x00}, // 0x7C (|) {0x00, 0x41, 0x41, 0x36, 0x08, 0x08}, // 0x7D (}) {0x00, 0x08, 0x04, 0x08, 0x10, 0x08}, // 0x7E (~) {0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // 0x7F }; void DrawText(const char* text, float x, float y, float scale, Color color) { if (!text) return; glPushMatrix(); glTranslatef(x, y, 0.0f); glScalef(scale, scale, 1.0f); glColor4f(color.r / 255.0f, color.g / 255.0f, color.b / 255.0f, color.a / 255.0f); glDisable(GL_TEXTURE_2D); const float charWidth = 6.0f; const float charHeight = 8.0f; const float lineHeight = charHeight * 1.0f; float startX = 0.0f; float currentY = 0.0f; for (const char* c = text; *c; c++) { if (*c == '\n') { glPopMatrix(); glPushMatrix(); glTranslatef(x, y - currentY - lineHeight, 0.0f); glScalef(scale, scale, 1.0f); currentY -= lineHeight; startX = 0.0f; continue; } if (*c < 0 || *c >= 128) { continue; } const unsigned char* bitmap = font6x8_ascii[(int)*c]; for (int row = 0; row < charHeight; row++) { for (int col = 0; col < charWidth; col++) { if (bitmap[col] & (1 << row)) { glBegin(GL_QUADS); glVertex2f(startX + col, currentY - row); glVertex2f(startX + col + 1, currentY - row); glVertex2f(startX + col + 1, currentY - row + 1); glVertex2f(startX + col, currentY - row + 1); glEnd(); } } } startX += charWidth + 1; } glPopMatrix(); } #include "../../include/textures.h" Texture fontTextures[256]; void LoadFont(char* pathToFolder) { DIR *fontFolder; struct dirent *entry; printf("%s\n", "loading font"); fontFolder = opendir(pathToFolder); if (fontFolder == NULL) { perror("directory cant be opened"); return; } int currentSymbol = 0; while ((entry = readdir(fontFolder)) != NULL) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } char fullPath[512]; strcpy(fullPath, pathToFolder); if (fullPath[strlen(fullPath)-1] != '/') { strcat(fullPath, "/"); } strcat(fullPath, entry->d_name); printf("%s\n", fullPath); fontTextures[currentSymbol] = LoadTexture(fullPath); currentSymbol++; } closedir(fontFolder); return; } void DrawTextWithFont(unsigned char* text, int x, int y, float fontSize, Color color) { unsigned int currentSymbol = 0; unsigned int currentX = x; while (text[currentSymbol] != '\0') { DrawTexture(fontTextures[text[currentSymbol]], currentX, y, fontSize, color); currentX = currentX + fontTextures[text[currentSymbol]].width*fontSize; currentSymbol++; } } void UnloadFont() { int currentTexture = 0; while (currentTexture < 256) { UnloadTexture(fontTextures[currentTexture]); currentTexture++; } }