From 8d78eefeee41e21e9d1a476fb2ce9891ff10e97a Mon Sep 17 00:00:00 2001 From: Per Hultqvist Date: Thu, 31 Oct 2024 13:06:59 +0100 Subject: [PATCH] New example: font_filters --- examples/text/font_filters/KAISG.ttf | Bin 0 -> 79912 bytes examples/text/font_filters/main.go | 125 +++++++++++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 examples/text/font_filters/KAISG.ttf create mode 100644 examples/text/font_filters/main.go diff --git a/examples/text/font_filters/KAISG.ttf b/examples/text/font_filters/KAISG.ttf new file mode 100644 index 0000000000000000000000000000000000000000..04478b25ceb5a5e0e74b0d6da7dbb16c68fdbb32 GIT binary patch literal 79912 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 literal 0 HcmV?d00001 diff --git a/examples/text/font_filters/main.go b/examples/text/font_filters/main.go new file mode 100644 index 0000000..dc6bb82 --- /dev/null +++ b/examples/text/font_filters/main.go @@ -0,0 +1,125 @@ +/******************************************************************************************* +* +* raylib [text] example - Font filters +* +* NOTE: After font loading, font texture atlas filter could be configured for a softer +* display of the font when scaling it to different sizes, that way, it's not required +* to generate multiple fonts at multiple sizes (as long as the scaling is not very different) +* +* Example originally created with raylib 1.3, last time updated with raylib 4.2 +* +* Example licensed under an unmodified zlib/libpng license, which is an OSI-certified, +* BSD-like license that allows static linking with closed source software +* +* Copyright (c) 2015-2024 Ramon Santamaria (@raysan5) +* +********************************************************************************************/ +package main + +import ( + "fmt" + "path/filepath" + + rl "github.com/gen2brain/raylib-go/raylib" +) + +const ( + screenWidth = 800 + screenHeight = 450 +) + +func main() { + rl.InitWindow(screenWidth, screenHeight, "raylib [text] example - font filters") + msg := "Loaded Font" + + // NOTE: Textures/Fonts MUST be loaded after Window initialization (OpenGL context is required) + + // TTF Font loading with custom generation parameters + font := rl.LoadFontEx("KAISG.ttf", 96, nil, 0) + + // Generate mipmap levels to use trilinear filtering + // NOTE: On 2D drawing it won't be noticeable, it looks like FILTER_BILINEAR + rl.GenTextureMipmaps(&font.Texture) + + fontSize := float32(font.BaseSize) + fontPosition := rl.Vector2{X: 40.0, Y: screenHeight/2.0 - 80.0} + textSize := rl.Vector2{} + + // Setup texture scaling filter + rl.SetTextureFilter(font.Texture, rl.FilterPoint) + currentFontFilter := 0 // TEXTURE_FILTER_POINT + + rl.SetTargetFPS(60) // Set our game to run at 60 frames-per-second + for !rl.WindowShouldClose() { // Detect window close button or ESC key + fontSize += rl.GetMouseWheelMove() * 4.0 + + // Choose font texture filter method + if rl.IsKeyPressed(rl.KeyOne) { + rl.SetTextureFilter(font.Texture, rl.FilterPoint) + currentFontFilter = 0 + } else if rl.IsKeyPressed(rl.KeyTwo) { + rl.SetTextureFilter(font.Texture, rl.FilterBilinear) + currentFontFilter = 1 + } else if rl.IsKeyPressed(rl.KeyThree) { + // NOTE: Trilinear filter won't be noticed on 2D drawing + rl.SetTextureFilter(font.Texture, rl.FilterTrilinear) + currentFontFilter = 2 + } + + textSize = rl.MeasureTextEx(font, msg, fontSize, 0) + + if rl.IsKeyDown(rl.KeyLeft) { + fontPosition.X -= 10 + } else if rl.IsKeyDown(rl.KeyRight) { + fontPosition.X += 10 + } + + // Load a dropped TTF file dynamically (at current fontSize) + if rl.IsFileDropped() { + droppedFiles := rl.LoadDroppedFiles() + + // NOTE: We only support first ttf file dropped + if filepath.Ext(droppedFiles[0]) == ".ttf" { + rl.UnloadFont(font) + font = rl.LoadFontEx(droppedFiles[0], int32(fontSize), nil, 0) + } + + rl.UnloadDroppedFiles() // Unload file paths from memory + } + + // Draw + rl.BeginDrawing() + rl.ClearBackground(rl.RayWhite) + + rl.DrawText("Use mouse wheel to change font size", 20, 20, 10, rl.Gray) + rl.DrawText("Use KEY_RIGHT and KEY_LEFT to move text", 20, 40, 10, rl.Gray) + rl.DrawText("Use 1, 2, 3 to change texture filter", 20, 60, 10, rl.Gray) + rl.DrawText("Drop a new TTF font for dynamic loading", 20, 80, 10, rl.DarkGray) + rl.DrawTextEx(font, msg, fontPosition, fontSize, 0, rl.Black) + + // TODO: It seems texSize measurement is not accurate due to chars offsets... + //rl.DrawRectangleLines(fontPosition.X, fontPosition.Y, textSize.X, textSize.Y, rl.Red); + + rl.DrawRectangle(0, screenHeight-80, screenWidth, 80, rl.LightGray) + text := fmt.Sprintf("Font size: %02.02f", fontSize) + rl.DrawText(text, 20, screenHeight-50, 10, rl.DarkGray) + text = fmt.Sprintf("Text size: [%02.02f, %02.02f]", textSize.X, textSize.Y) + rl.DrawText(text, 20, screenHeight-30, 10, rl.DarkGray) + rl.DrawText("CURRENT TEXTURE FILTER:", 250, 400, 20, rl.Gray) + + switch currentFontFilter { + case 0: + rl.DrawText("POINT", 570, 400, 20, rl.Black) + case 1: + rl.DrawText("BILINEAR", 570, 400, 20, rl.Black) + case 2: + rl.DrawText("TRILINEAR", 570, 400, 20, rl.Black) + } + + rl.EndDrawing() + } + + // De-Initialization + rl.UnloadFont(font) // Font unloading + rl.CloseWindow() // Close window and OpenGL context +}