summaryrefslogtreecommitdiffhomepage
path: root/raylib.html.markdown
blob: 74a2443b999a1bd6fb436ff58a8ee0e5d29137c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
---
category: framework
framework: raylib
filename: learnraylib.c
contributors:
    - ["Nikolas Wipper", "https://notnik.cc"]
---

**raylib** is a cross-platform easy-to-use graphics library, built around
OpenGL 1.1, 2.1, 3.3 and OpenGL ES 2.0. Even though it is written in C
it has bindings to over 50 different languages. This tutorial will use C,
more specifically C99.

```c
#include <raylib.h>

int main(void)
{
    const int screenWidth = 800;
    const int screenHeight = 450;

    // Before initialising raylib we can set configuration flags
    SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT);

    // raylib doesn't require us to store any instance structures
    // At the moment raylib can handle only one window at a time
    InitWindow(screenWidth, screenHeight, "MyWindow");

    // Set our game to run at 60 frames-per-second
    SetTargetFPS(60);

    // Set a key that closes the window
    // Could be 0 for no key
    SetExitKey(KEY_DELETE);

    // raylib defines two types of cameras: Camera3D and Camera2D
    // Camera is a typedef for Camera3D
    Camera camera = {
            .position   = {0.0f, 0.0f, 0.0f},
            .target     = {0.0f, 0.0f, 1.0f},
            .up         = {0.0f, 1.0f, 0.0f},
            .fovy       = 70.0f,
            .projection = CAMERA_PERSPECTIVE
    };

    // raylib supports loading of models, animations, images and sounds
    // from various different file formats
    Model myModel = LoadModel("my_model.obj");
    Font someFont = LoadFont("some_font.ttf");

    // Creates a 100x100 render texture
    RenderTexture renderTexture = LoadRenderTexture(100, 100);

    // WindowShouldClose checks if the user is closing the window
    // This might happen using a shortcut, window controls
    // or the key we set earlier
    while (!WindowShouldClose())
    {

        // BeginDrawing needs to be called before any draw call
        BeginDrawing();
        {

            // Sets the background to a certain color
            ClearBackground(BLACK);

            if (IsKeyDown(KEY_SPACE))
                DrawCircle(400, 400, 30, GREEN);

            // Simple draw text
            DrawText("Congrats! You created your first window!",
                     190, // x
                     200, // y
                     20,  // font size
                     LIGHTGRAY
            );

            // For most functions there are several versions
            // These are usually postfixed with Ex, Pro, V
            // or sometimes Rec, Wires (only for 3D), Lines (only for 2D)
            DrawTextEx(someFont,
                       "Text in another font",
                       (Vector2) {10, 10},
                       20, // font size
                       2,  // spacing
                       LIGHTGRAY);

            // Required for drawing 3D, has 2D equivalent
            BeginMode3D(camera);
            {

                DrawCube((Vector3) {0.0f, 0.0f, 3.0f},
                         1.0f, 1.0f, 1.0f, RED);

                // White tint when drawing will keep the original color
                DrawModel(myModel, (Vector3) {0.0f, 0.0f, 3.0f},
                          1.0f, //Scale
                          WHITE);

            }
            // End 3D mode so we can draw normally again
            EndMode3D();

            // Start drawing onto render texture
            BeginTextureMode(renderTexture);
            {

                // It behaves the same as if we just called `BeginDrawing()`

                ClearBackground(RAYWHITE);

                BeginMode3D(camera);
                {

                    DrawGrid(10, // Slices
                             1.0f // Spacing
                    );

                }
                EndMode3D();

            }
            EndTextureMode();

            // render textures have a Texture2D field
            DrawTexture(renderTexture.texture, 40, 378, BLUE);

        }
        EndDrawing();
    }

    // Unloading loaded objects
    UnloadFont(someFont);
    UnloadModel(myModel);

    // Close window and OpenGL context
    CloseWindow();

    return 0;
}
```

## Further reading
raylib has some [great examples](https://www.raylib.com/examples.html)
If you don't like C check out the [raylib bindings](https://github.com/raysan5/raylib/blob/master/BINDINGS.md)