resize.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include <r3d/r3d.h>
  2. #include <raymath.h>
  3. static const char* GetAspectModeName(R3D_AspectMode mode);
  4. static const char* GetUpscaleModeName(R3D_UpscaleMode mode);
  5. int main(void)
  6. {
  7. // Initialize window
  8. InitWindow(800, 450, "[r3d] - Resize example");
  9. SetWindowState(FLAG_WINDOW_RESIZABLE);
  10. SetTargetFPS(60);
  11. // Initialize R3D
  12. R3D_Init(GetScreenWidth(), GetScreenHeight());
  13. // Create sphere mesh and materials
  14. R3D_Mesh sphere = R3D_GenMeshSphere(0.5f, 64, 64);
  15. R3D_Material materials[5];
  16. for (int i = 0; i < 5; i++)
  17. {
  18. materials[i] = R3D_GetDefaultMaterial();
  19. materials[i].albedo.color = ColorFromHSV((float)i / 5 * 330, 1.0f, 1.0f);
  20. }
  21. // Setup directional light
  22. R3D_Light light = R3D_CreateLight(R3D_LIGHT_DIR);
  23. R3D_SetLightDirection(light, (Vector3){0, 0, -1});
  24. R3D_SetLightActive(light, true);
  25. // Setup camera
  26. Camera3D camera = {
  27. .position = {0, 2, 2},
  28. .target = {0, 0, 0},
  29. .up = {0, 1, 0},
  30. .fovy = 60
  31. };
  32. // Current blit state
  33. R3D_AspectMode aspect = R3D_ASPECT_EXPAND;
  34. R3D_UpscaleMode upscale = R3D_UPSCALE_NEAREST;
  35. // Main loop
  36. while (!WindowShouldClose())
  37. {
  38. UpdateCamera(&camera, CAMERA_ORBITAL);
  39. // Toggle aspect keep
  40. if (IsKeyPressed(KEY_R)) {
  41. aspect = (aspect + 1) % 2;
  42. R3D_SetAspectMode(aspect);
  43. }
  44. // Toggle linear filtering
  45. if (IsKeyPressed(KEY_F)) {
  46. upscale = (upscale + 1) % 4;
  47. R3D_SetUpscaleMode(upscale);
  48. }
  49. BeginDrawing();
  50. ClearBackground(BLACK);
  51. // Draw spheres
  52. R3D_Begin(camera);
  53. for (int i = 0; i < 5; i++) {
  54. R3D_DrawMesh(sphere, materials[i], (Vector3) {(float)i - 2, 0, 0}, 1.0f);
  55. }
  56. R3D_End();
  57. // Draw info
  58. DrawText(TextFormat("Resize mode: %s", GetAspectModeName(aspect)), 10, 10, 20, RAYWHITE);
  59. DrawText(TextFormat("Filter mode: %s", GetUpscaleModeName(upscale)), 10, 40, 20, RAYWHITE);
  60. EndDrawing();
  61. }
  62. // Cleanup
  63. R3D_UnloadMesh(sphere);
  64. R3D_Close();
  65. CloseWindow();
  66. return 0;
  67. }
  68. const char* GetAspectModeName(R3D_AspectMode mode)
  69. {
  70. switch (mode) {
  71. case R3D_ASPECT_EXPAND: return "EXPAND";
  72. case R3D_ASPECT_KEEP: return "KEEP";
  73. }
  74. return "UNKNOWN";
  75. }
  76. const char* GetUpscaleModeName(R3D_UpscaleMode mode)
  77. {
  78. switch (mode) {
  79. case R3D_UPSCALE_NEAREST: return "NEAREST";
  80. case R3D_UPSCALE_LINEAR: return "LINEAR";
  81. case R3D_UPSCALE_BICUBIC: return "BICUBIC";
  82. case R3D_UPSCALE_LANCZOS: return "LANCZOS";
  83. }
  84. return "UNKNOWN";
  85. }