From 997170a317bb8077cb96d3fc757c6cde0c0ea466 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Thu, 27 Aug 2015 16:13:31 +0200 Subject: [PATCH] Examples reviewed --- examples/audio_music_stream.c | 7 +- ...res_compressed_dds.c => core_3d_picking.c} | 44 ++++++----- examples/core_basic_window.c | 4 +- examples/makefile | 10 --- examples/text_font_select.c | 36 ++++++--- examples/text_rbmf_fonts.c | 72 +++++++++++------- examples/textures_compressed_dds.png | Bin 15243 -> 0 bytes examples/textures_image_loading.c | 4 +- examples/textures_mipmaps.c | 66 ---------------- examples/textures_mipmaps.png | Bin 17234 -> 0 bytes 10 files changed, 107 insertions(+), 136 deletions(-) rename examples/{textures_compressed_dds.c => core_3d_picking.c} (57%) delete mode 100644 examples/textures_compressed_dds.png delete mode 100644 examples/textures_mipmaps.c delete mode 100644 examples/textures_mipmaps.png diff --git a/examples/audio_music_stream.c b/examples/audio_music_stream.c index 560347e6a..3add91daa 100644 --- a/examples/audio_music_stream.c +++ b/examples/audio_music_stream.c @@ -7,7 +7,7 @@ * This example has been created using raylib 1.1 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) +* Copyright (c) 2014 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -58,7 +58,12 @@ int main() SetMusicVolume(volume); } */ + if (IsWindowMinimized()) PauseMusicStream(); + else ResumeMusicStream(); + timePlayed = GetMusicTimePlayed() / GetMusicTimeLength() * 100 * 4; // We scale by 4 to fit 400 pixels + + UpdateMusicStream(); //---------------------------------------------------------------------------------- // Draw diff --git a/examples/textures_compressed_dds.c b/examples/core_3d_picking.c similarity index 57% rename from examples/textures_compressed_dds.c rename to examples/core_3d_picking.c index 1092d5caf..a7a96fa9f 100644 --- a/examples/textures_compressed_dds.c +++ b/examples/core_3d_picking.c @@ -1,11 +1,8 @@ /******************************************************************************************* * -* raylib [textures] example - DDS Texture loading and drawing (compressed and uncompressed) +* raylib [core] example - Picking in 3d mode * -* NOTE: This example requires raylib OpenGL 3.3+ or ES2 versions for compressed texture, -* OpenGL 1.1 does not support compressed textures, only uncompressed version. -* -* This example has been created using raylib 1.2 (www.raylib.com) +* This example has been created using raylib 1.0 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * * Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) @@ -21,33 +18,48 @@ int main() int screenWidth = 800; int screenHeight = 450; - InitWindow(screenWidth, screenHeight, "raylib [textures] example - DDS texture loading and drawing"); + InitWindow(screenWidth, screenHeight, "raylib [core] example - 3d picking"); - // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) + // Define the camera to look into our 3d world + Camera camera = {{ 0.0, 10.0, 10.0 }, { 0.0, 0.0, 0.0 }, { 0.0, 1.0, 0.0 }}; + + Vector3 cubePosition = { 0.0, 0.0, 0.0 }; - Texture2D texture = LoadTexture("resources/raylib_logo.dds"); // Texture loading (compressed) + Ray pickingLine; + + SetCameraMode(CAMERA_FREE); - SetTargetFPS(60); // Set our game to run at 60 frames-per-second - //--------------------------------------------------------------------------------------- + SetTargetFPS(60); + //-------------------------------------------------------------------------------------- // Main game loop while (!WindowShouldClose()) // Detect window close button or ESC key { // Update //---------------------------------------------------------------------------------- - // TODO: Update your variables here + camera = UpdateCamera(0); + + if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) pickingLine = GetMouseRay(GetMousePosition(), camera); //---------------------------------------------------------------------------------- // Draw //---------------------------------------------------------------------------------- - BeginDrawing(); ClearBackground(RAYWHITE); - DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE); + Begin3dMode(camera); - DrawText("this may be a compressed texture!", 320, 370, 10, GRAY); + DrawCube(cubePosition, 2, 2, 2, RED); + DrawCubeWires(cubePosition, 2, 2, 2, MAROON); + + DrawGrid(10.0, 1.0); + + DrawRay(pickingLine, MAROON); + + End3dMode(); + + DrawFPS(10, 10); EndDrawing(); //---------------------------------------------------------------------------------- @@ -55,9 +67,7 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context + CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- return 0; diff --git a/examples/core_basic_window.c b/examples/core_basic_window.c index c6ad8445c..b039e53f5 100644 --- a/examples/core_basic_window.c +++ b/examples/core_basic_window.c @@ -15,7 +15,7 @@ * This example has been created using raylib 1.0 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) +* Copyright (c) 2014 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -52,7 +52,7 @@ int main() } // De-Initialization - //-------------------------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/makefile b/examples/makefile index 9b0c9d4c2..f351fbad9 100644 --- a/examples/makefile +++ b/examples/makefile @@ -164,8 +164,6 @@ EXAMPLES = \ textures_logo_raylib \ textures_image_loading \ textures_rectangle \ - textures_compressed_dds \ - textures_mipmaps \ textures_srcrec_dstrec \ text_sprite_fonts \ text_rbmf_fonts \ @@ -253,14 +251,6 @@ textures_image_loading: textures_image_loading.c textures_rectangle: textures_rectangle.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) -# compile [textures] example - compressed texture loading (DDS) -textures_compressed_dds: textures_compressed_dds.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - -# compile [textures] example - texture mipmaps generation -textures_mipmaps: textures_mipmaps.c - $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) - # compile [textures] example - texture source and destination rectangles textures_srcrec_dstrec: textures_srcrec_dstrec.c $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS) diff --git a/examples/text_font_select.c b/examples/text_font_select.c index 62538ebce..25825aba6 100644 --- a/examples/text_font_select.c +++ b/examples/text_font_select.c @@ -5,7 +5,7 @@ * This example has been created using raylib 1.0 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) +* Copyright (c) 2014 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -16,7 +16,7 @@ int main() // Initialization //-------------------------------------------------------------------------------------- int screenWidth = 800; - int screenHeight = 150; + int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - font selector"); @@ -45,12 +45,14 @@ int main() Vector2 mousePoint; - Rectangle btnNextRec = { 673, 18, 109, 44 }; // Button rectangle (useful for collision) - Color btnNextOutColor = DARKBLUE; // Button color (outside line) Color btnNextInColor = SKYBLUE; // Button color (inside) int framesCounter = 0; // Useful to count frames button is 'active' = clicked + + int positionY = 180; // Text selector and button Y position + + Rectangle btnNextRec = { 673, positionY, 109, 44 }; // Button rectangle (useful for collision) SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -71,6 +73,15 @@ int main() { if (currentFont > 0) currentFont--; } + + if (IsKeyPressed('0')) currentFont = 0; + else if (IsKeyPressed('1')) currentFont = 1; + else if (IsKeyPressed('2')) currentFont = 2; + else if (IsKeyPressed('3')) currentFont = 3; + else if (IsKeyPressed('4')) currentFont = 4; + else if (IsKeyPressed('5')) currentFont = 5; + else if (IsKeyPressed('6')) currentFont = 6; + else if (IsKeyPressed('7')) currentFont = 7; // Mouse-based font selection (NEXT button logic) mousePoint = GetMousePosition(); @@ -115,18 +126,21 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); + + DrawText("font selector - use arroys, button or numbers", 160, 80, 20, DARKGRAY); + DrawLine(120, 120, 680, 120, DARKGRAY); - DrawRectangle(18, 18, 644, 44, DARKGRAY); - DrawRectangle(20, 20, 640, 40, LIGHTGRAY); - DrawText(fontNames[currentFont], 30, 31, 20, BLACK); - DrawText("< >", 610, 26, 30, BLACK); + DrawRectangle(18, positionY, 644, 44, DARKGRAY); + DrawRectangle(20, positionY + 2, 640, 40, LIGHTGRAY); + DrawText(fontNames[currentFont], 30, positionY + 13, 20, BLACK); + DrawText("< >", 610, positionY + 8, 30, BLACK); DrawRectangleRec(btnNextRec, btnNextOutColor); - DrawRectangle(675, 20, 105, 40, btnNextInColor); - DrawText("NEXT", 700, 31, 20, btnNextOutColor); + DrawRectangle(675, positionY + 2, 105, 40, btnNextInColor); + DrawText("NEXT", 700, positionY + 13, 20, btnNextOutColor); DrawTextEx(fonts[currentFont], text, (Vector2){ screenWidth/2 - textSize.x/2, - 75 + (70 - textSize.y)/2 }, GetFontBaseSize(fonts[currentFont])*3, + 260 + (70 - textSize.y)/2 }, GetFontBaseSize(fonts[currentFont])*3, 1, colors[currentFont]); EndDrawing(); diff --git a/examples/text_rbmf_fonts.c b/examples/text_rbmf_fonts.c index 02c773676..a521862bd 100644 --- a/examples/text_rbmf_fonts.c +++ b/examples/text_rbmf_fonts.c @@ -18,20 +18,43 @@ int main() { // Initialization //-------------------------------------------------------------------------------------- - int screenWidth = 560; - int screenHeight = 800; + int screenWidth = 800; + int screenHeight = 450; InitWindow(screenWidth, screenHeight, "raylib [text] example - rBMF fonts"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - SpriteFont font1 = LoadSpriteFont("resources/fonts/alagard.rbmf"); // rBMF font loading - SpriteFont font2 = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // rBMF font loading - SpriteFont font3 = LoadSpriteFont("resources/fonts/mecha.rbmf"); // rBMF font loading - SpriteFont font4 = LoadSpriteFont("resources/fonts/setback.rbmf"); // rBMF font loading - SpriteFont font5 = LoadSpriteFont("resources/fonts/romulus.rbmf"); // rBMF font loading - SpriteFont font6 = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // rBMF font loading - SpriteFont font7 = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // rBMF font loading - SpriteFont font8 = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // rBMF font loading + SpriteFont fonts[8]; + + fonts[0] = LoadSpriteFont("resources/fonts/alagard.rbmf"); // rBMF font loading + fonts[1] = LoadSpriteFont("resources/fonts/pixelplay.rbmf"); // rBMF font loading + fonts[2] = LoadSpriteFont("resources/fonts/mecha.rbmf"); // rBMF font loading + fonts[3] = LoadSpriteFont("resources/fonts/setback.rbmf"); // rBMF font loading + fonts[4] = LoadSpriteFont("resources/fonts/romulus.rbmf"); // rBMF font loading + fonts[5] = LoadSpriteFont("resources/fonts/pixantiqua.rbmf"); // rBMF font loading + fonts[6] = LoadSpriteFont("resources/fonts/alpha_beta.rbmf"); // rBMF font loading + fonts[7] = LoadSpriteFont("resources/fonts/jupiter_crash.rbmf"); // rBMF font loading + + const char *messages[8] = { "ALAGARD FONT designed by Hewett Tsoi", + "PIXELPLAY FONT designed by Aleksander Shevchuk", + "MECHA FONT designed by Captain Falcon", + "SETBACK FONT designed by Brian Kent (AEnigma)", + "ROMULUS FONT designed by Hewett Tsoi", + "PIXANTIQUA FONT designed by Gerhard Grossmann", + "ALPHA_BETA FONT designed by Brian Kent (AEnigma)", + "JUPITER_CRASH FONT designed by Brian Kent (AEnigma)" }; + + const int spacings[8] = { 2, 4, 8, 4, 3, 4, 4, 1 }; + + Vector2 positions[8]; + + for (int i = 0; i < 8; i++) + { + positions[i].x = screenWidth/2 - MeasureTextEx(fonts[i], messages[i], GetFontBaseSize(fonts[i])*2, spacings[i]).x/2; + positions[i].y = 60 + GetFontBaseSize(fonts[i]) + 50*i; + } + + Color colors[8] = { MAROON, ORANGE, DARKGREEN, DARKBLUE, DARKPURPLE, LIME, GOLD }; //-------------------------------------------------------------------------------------- // Main game loop @@ -47,15 +70,14 @@ int main() BeginDrawing(); ClearBackground(RAYWHITE); - - DrawTextEx(font1, "TESTING ALAGARD FONT", (Vector2){ 100, 100 }, GetFontBaseSize(font1)*2, 2, MAROON); - DrawTextEx(font2, "TESTING PIXELPLAY FONT", (Vector2){ 100, 180 }, GetFontBaseSize(font2)*2, 4, ORANGE); - DrawTextEx(font3, "TESTING MECHA FONT", (Vector2){ 100, 260 }, GetFontBaseSize(font3)*2, 8, DARKGREEN); - DrawTextEx(font4, "TESTING SETBACK FONT", (Vector2){ 100, 350 }, GetFontBaseSize(font4)*2, 4, DARKBLUE); - DrawTextEx(font5, "TESTING ROMULUS FONT", (Vector2){ 100, 430 }, GetFontBaseSize(font5)*2, 3, DARKPURPLE); - DrawTextEx(font6, "TESTING PIXANTIQUA FONT", (Vector2){ 100, 510 }, GetFontBaseSize(font6)*2, 4, LIME); - DrawTextEx(font7, "TESTING ALPHA_BETA FONT", (Vector2){ 100, 590 }, GetFontBaseSize(font7)*2, 4, GOLD); - DrawTextEx(font8, "TESTING JUPITER_CRASH FONT", (Vector2){ 100, 660 }, GetFontBaseSize(font8)*2, 1, RED); + + DrawText("free fonts included with raylib", 250, 20, 20, DARKGRAY); + DrawLine(220, 50, 590, 50, DARKGRAY); + + for (int i = 0; i < 8; i++) + { + DrawTextEx(fonts[i], messages[i], positions[i], GetFontBaseSize(fonts[i])*2, spacings[i], colors[i]); + } EndDrawing(); //---------------------------------------------------------------------------------- @@ -63,14 +85,10 @@ int main() // De-Initialization //-------------------------------------------------------------------------------------- - UnloadSpriteFont(font1); // SpriteFont unloading - UnloadSpriteFont(font2); // SpriteFont unloading - UnloadSpriteFont(font3); // SpriteFont unloading - UnloadSpriteFont(font4); // SpriteFont unloading - UnloadSpriteFont(font5); // SpriteFont unloading - UnloadSpriteFont(font6); // SpriteFont unloading - UnloadSpriteFont(font7); // SpriteFont unloading - UnloadSpriteFont(font8); // SpriteFont unloading + for (int i = 0; i < 8; i++) + { + UnloadSpriteFont(fonts[i]); // SpriteFont unloading + } CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- diff --git a/examples/textures_compressed_dds.png b/examples/textures_compressed_dds.png deleted file mode 100644 index 89922baea1f9d5400d32f03335350220b3890da9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15243 zcmeHOeM}Q~7`}c43bt~>6ez2-YA|LhRSMz|?b_N(P=|u?V{@K@%J`fH(69mpp+GDG z>c9yuxN`*j#HolxLKPL9;ygt`iA+XhOeT{BoFLQPU3;{A6gH-~Ex&)7Ybm|A&-*^l z@BM13&r$`)l4}V;5XWngY&irm_z*<9$TGuUvGqSz1wkImy<{KwZU4l-r@ON?PQ6UX zrK1894-qU{KISu#6OX}mgFeurleB^60it7RYHc7(GsuHb6D5}0Tp0Y1_&*eliO1|S zFqx+*GsI_MyC*7*Q?W@KN_94zG-(52!fg}w;U+xQncxRZz#RclAi@!#08jwBK#Dd{ zN8(%qC;$|w^ajKNhy@S}#<~7qVFY5&Y1OCj{5i~$bLSL{a1m23MH1E8+7s&(O|j%N z5wpsYtOycaMqClZV`HlVxr0|ML@5(15Wdftz5lR6isxci`&|JO2p$0x01A|xf>;2t0Ak^9zR9(p z_(oeg>cU40qm3(D<7TKTOdu?^h!OQ!%7HQk;$Jp(Vi2$QwpyOzZ}hw5 z+*I`Tec8KVZPe#(XAY=CZ90)}vv)6P=qQQFy??gA*SZ{a_))R*IN6gvh@2}8IvdsGl z=NW3hO^>ZQh^4uKyY&IpQt$PGepEsml})M#iSrFD^u%OsOMW{x-Jsy&?{&c&K5~Z> zun=2k^`<;S?yPaB8Qy?*vCCmQ!b+n7kx+tk+-<{TvwEo{KB5~)6c6;99`8}h6-r*}OMXv$0trAsEPR`dV zM%Dt9wt!3b8$%1pIbT?osdQgh8~Bn}tt8E5jMuTPVSu;vZXBKIOgPTAI|lq1)^v2v zj&!H<6s5kzWseywdX#QF9yK=k<_spm`qWTUf=7;+%uEKAdYz8MkEuHjM&cHyjy}Un zzCal5-4%F|lKV`1Qgx@rnKFWq@1a$fn2(AKtnGi*BS9j}0z@lDjsq}(a1M?FJ|ewK zMVya7TV3tReNH{stI_1?G7Omx-V?RXlb_W^l&4i`a5B*|zwGMKKnx>|Wnoab5n? zzo+$;g_NEzVmf9g=w#HfKDJ z3kj2^Zw_$1Jmq?BCbt2_a}M3_7}$4oMG%!O^Jg)Os>N`y%$YOC%EmwHSGexH=2}|G z#RIFh1Wk$fI854>=;I;n+!f~TI0GetP_HKQ&^;X#VPSd;T2tnidm&FWDTNnW=~^LN zWleXBduX{$*}iP?ju?-U>&$N$Ya%5n7U|gHd3xZaIGypF;pa&5xRxbDTg?;pnZ4&K zM^kx?mE&g}x&i0qNRK)exSkRR?OT5;J6DL-{84wyZ06Yux5h?KO|)}iZ4^tQc1>7M zAy*?&wYS!uc%?v%5|Pi6paN|5JoeHC?#!2V)sEDgx%3*{Pb6wYdW&}OnbC^cuJrs0 zgTjo%b0NGY^okiOsfZreXq>M0-_d#vRp-zO{x3L0fC)sy5}*K3po#_%3m_IiEa;C` k^3Vm0_^&Vm?=?cuJM_pEb##~0_>XKMuZ2rx$0bO@pU1I=-2eap diff --git a/examples/textures_image_loading.c b/examples/textures_image_loading.c index 7c6aae522..47eb58afa 100644 --- a/examples/textures_image_loading.c +++ b/examples/textures_image_loading.c @@ -7,7 +7,7 @@ * This example has been created using raylib 1.1 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * -* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) +* Copyright (c) 2014 Ramon Santamaria (@raysan5) * ********************************************************************************************/ @@ -25,7 +25,7 @@ int main() // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) Image image = LoadImage("resources/raylib_logo.png"); // Loaded in CPU memory (RAM) - Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) + Texture2D texture = LoadTextureFromImage(image); // Image converted to texture, GPU memory (VRAM) UnloadImage(image); // Once image has been converted to texture and uploaded to VRAM, it can be unloaded from RAM //--------------------------------------------------------------------------------------- diff --git a/examples/textures_mipmaps.c b/examples/textures_mipmaps.c deleted file mode 100644 index 6b7a64f01..000000000 --- a/examples/textures_mipmaps.c +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************************* -* -* raylib [textures] example - Texture loading with mipmaps, mipmaps generation -* -* NOTE: On OpenGL 1.1, mipmaps are calculated 'manually', original image must be power-of-two -* On OpenGL 3.3 and ES2, mipmaps are generated automatically -* -* This example has been created using raylib 1.1 (www.raylib.com) -* raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) -* -* Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com) -* -********************************************************************************************/ - -#include "raylib.h" - -int main() -{ - // Initialization - //-------------------------------------------------------------------------------------- - int screenWidth = 800; - int screenHeight = 450; - - InitWindow(screenWidth, screenHeight, "raylib [textures] example - texture mipmaps generation"); - - // NOTE: To generate mipmaps for an image, image must be loaded first and converted to texture - - Image image = LoadImage("resources/raylib_logo.png"); // Load image to CPU memory (RAM) - Texture2D texture = LoadTextureFromImage(image); // Load texture into GPU memory (VRAM) - GenTextureMipmaps(texture); // Generate mipmaps for texture - - UnloadImage(image); // Once texture has been created, we can unload image data from RAM - //-------------------------------------------------------------------------------------- - - // Main game loop - while (!WindowShouldClose()) // Detect window close button or ESC key - { - // Update - //---------------------------------------------------------------------------------- - // TODO: Update your variables here - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - BeginDrawing(); - - ClearBackground(RAYWHITE); - - DrawTexture(texture, screenWidth/2 - texture.width/2, - screenHeight/2 - texture.height/2 - 30, WHITE); - - DrawText("this IS a texture with mipmaps! really!", 210, 360, 20, GRAY); - - EndDrawing(); - //---------------------------------------------------------------------------------- - } - - // De-Initialization - //-------------------------------------------------------------------------------------- - UnloadTexture(texture); // Texture unloading - - CloseWindow(); // Close window and OpenGL context - //-------------------------------------------------------------------------------------- - - return 0; -} \ No newline at end of file diff --git a/examples/textures_mipmaps.png b/examples/textures_mipmaps.png deleted file mode 100644 index d8f2448cce0b46591cc43637f72bc834d24d0abd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17234 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