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 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU_8XZ#=yWJp1k%11A}#tr;B4qMO^ZqUteF> zw*?wVF)dcaL6mSXF1r{Y$J=;OKmselSk-zUgFVG$ZExFw42~Wwgh5Z4gPZU{?2*GaR-HNW5+6QQL;o4Z9$2*oe~&ASYbL;l7@>10Ntx2pM&POg9YOWlXef+^0<3v6nifXW!f0ARZtD}1BN8NeUqhSl3g#?3 zcJ6d%&NpFkb53Y!J8*q{y!+!iFwcbL1Q)nR&|*w>kD&1)--!$<>^&AxSEf$Uz>3*u z)+%@B1gM>EsH_)aOp9eFTs&en>I52x!T}?xm9Xw-fZ~U*udiP`AP??pE)aO|?3o?h#+hjWH16ouexCA53;1;8#FEh+GjHo@V&*GNu;1>K9-0ZjuJ3G}fpSK>27i6h=biUd^!e}UYMoY)h(h*!7q7kE|<7nwP!b-=6RFgF*qtz;{4E+53ZRPuGemaE+2&|qi zWbGFG7&>Ul^Ibq2Pk4lkQ!a%WiA7 zmH()V_gmg?izUmUVcV9)(Q~e$XW3n_^RW<&bXiGtx5W-Igx=DA;Kj0!7j+N|&>YS~ z5^p~F5e^C#(5kcB@TkC8{KcMP!iy1MFjYMJ1tdVOM4BKna7y@c?cGHeL-@3T!)nNc z#5T-$gN8R<>ZuapUl~Z*_y9*^<1X1+gPYzb-D+|?v%Vbrd9epJjWq!hvYZ1NvI(Gd zhyO2jK+6EeBBzGgvu7`AV4h~bn9*K}DTJFbXZD_zdneXdxL(irCwsOA>|AD1NN&4_ zD^3aLHfqF2zLUJ~Rj`A=1hWv+V)N#HwLP%hG*i)F7fZIu(|+XXQDi4y&}9MT`p#Tv zBEd{OpeZIcOkt?{ws=S;eg(4;UX()TJ3*QFh1wUC$x8)AgDUTz8HZrS{X|J{sjFEJ zH59`(Q1Okw)CJ9tnjms5I_r;9LJ3=nNhtZ@FzN(Q7fdhq-*-ps$D z$L$p~mM2Iv#qY0^<%JhM@S;FLlf`X%La*8ke1!yP-8M?|3|9St6AoRO~;GM>HKjZM^T_>kb`)Df_zPR-@H0dSq zgZmGsV0Dg?(}Ep4Doo~}RU|6}m~<8|w1AaTmMjU2ubhzO`7$wkf{X``+v0ZdZRa?* zUCgifmH6!N8Mo)kw>wYQPT9d7t8e-4c-sE}1NQJ=?*7t0{xr?2OQ^|7O9=MPvgn-_ z1#|Tjh^y-$t}fw7cy06Gbx#9R_l=tZIkMs6 zKCd~yaB|sufg5{zPWSFOG&iC!OQj?x&-q`@ouP=mX$G6NsoUaC*@wqP4VRn~STNgpjrJ5;squW3c$j z-y4_M^tKB4Nyt>flt?Czc2cxhqZ$A75Wz|KEKvQbVMmm0`ujNE;r%ds2G; zB+kmi6iYE(fozeuVghwhvjR(%`}Lpw%MK$-7(pR$qr$Tm>`E*Is79|6e2Cm!g{B{P zN0SP@PW&bKAgDw}odDWyG#Uz{p#bYNjHZRrv@n_$pj9il(jCnaLnTKnh~{8m5Me3} Vy}@L>g@J*A!PC{xWt~$(69C7thTQ-F 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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