| @ -0,0 +1,102 @@ | |||
| /******************************************************************************************* | |||
| * | |||
| * raylib example - Bunnymark | |||
| * | |||
| * This example has been created using raylib 1.6 (www.raylib.com) | |||
| * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) | |||
| * | |||
| * Copyright (c) 2014 Ramon Santamaria (@raysan5) | |||
| * | |||
| ********************************************************************************************/ | |||
| #include "raylib.h" | |||
| #include <stdlib.h> // Required for: malloc(), free() | |||
| #define MAX_BUNNIES 100000 // 100K bunnies | |||
| typedef struct Bunny { | |||
| Vector2 position; | |||
| Vector2 speed; | |||
| Color color; | |||
| } Bunny; | |||
| int main() | |||
| { | |||
| // Initialization | |||
| //-------------------------------------------------------------------------------------- | |||
| int screenWidth = 1280; | |||
| int screenHeight = 960; | |||
| InitWindow(screenWidth, screenHeight, "raylib example - Bunnymark"); | |||
| Texture2D texBunny = LoadTexture("resources/wabbit_alpha.png"); | |||
| Bunny *bunnies = (Bunny *)malloc(MAX_BUNNIES*sizeof(Bunny)); // Bunnies array | |||
| int bunniesCount = 0; // Bunnies counter | |||
| SetTargetFPS(60); | |||
| //-------------------------------------------------------------------------------------- | |||
| // Main game loop | |||
| while (!WindowShouldClose()) // Detect window close button or ESC key | |||
| { | |||
| // Update | |||
| //---------------------------------------------------------------------------------- | |||
| if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) | |||
| { | |||
| // Create more bunnies | |||
| for (int i = 0; i < 100; i++) | |||
| { | |||
| bunnies[bunniesCount].position = GetMousePosition(); | |||
| bunnies[bunniesCount].speed.x = (float)GetRandomValue(250, 500)/60.0f; | |||
| bunnies[bunniesCount].speed.y = (float)(GetRandomValue(250, 500) - 500)/60.0f; | |||
| bunniesCount++; | |||
| } | |||
| } | |||
| // Update bunnies | |||
| for (int i = 0; i < bunniesCount; i++) | |||
| { | |||
| bunnies[i].position.x += bunnies[i].speed.x; | |||
| bunnies[i].position.y += bunnies[i].speed.y; | |||
| if ((bunnies[i].position.x > GetScreenWidth()) || (bunnies[i].position.x < 0)) bunnies[i].speed.x *= -1; | |||
| if ((bunnies[i].position.y > GetScreenHeight()) || (bunnies[i].position.y < 0)) bunnies[i].speed.y *= -1; | |||
| } | |||
| //---------------------------------------------------------------------------------- | |||
| // Draw | |||
| //---------------------------------------------------------------------------------- | |||
| BeginDrawing(); | |||
| ClearBackground(RAYWHITE); | |||
| for (int i = 0; i <= bunniesCount; i++) | |||
| { | |||
| // NOTE: When internal QUADS batch limit is reached, a draw call is launched and | |||
| // batching buffer starts being filled again; before launching the draw call, | |||
| // updated vertex data from internal buffer is send to GPU... it seems it generates | |||
| // a stall and consequently a frame drop, limiting number of bunnies drawn at 60 fps | |||
| DrawTexture(texBunny, bunnies[i].position.x, bunnies[i].position.y, RAYWHITE); | |||
| } | |||
| DrawRectangle(0, 0, screenWidth, 40, LIGHTGRAY); | |||
| DrawText("raylib bunnymark", 10, 10, 20, DARKGRAY); | |||
| DrawText(FormatText("bunnies: %i", bunniesCount), 400, 10, 20, RED); | |||
| DrawFPS(260, 10); | |||
| EndDrawing(); | |||
| //---------------------------------------------------------------------------------- | |||
| } | |||
| // De-Initialization | |||
| //-------------------------------------------------------------------------------------- | |||
| free(bunnies); | |||
| CloseWindow(); // Close window and OpenGL context | |||
| //-------------------------------------------------------------------------------------- | |||
| return 0; | |||
| } | |||