|
|
- /*******************************************************************************************
- *
- * 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;
- }
|