46 lines
1.8 KiB
C
46 lines
1.8 KiB
C
// x-run: make run
|
|
#include <math.h>
|
|
#include <raylib.h>
|
|
|
|
int main(int argc, char **argv) {
|
|
SetTraceLogLevel(LOG_ERROR);
|
|
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
|
InitWindow(__WINDOW_WIDTH * 2, __WINDOW_HEIGHT * 2, "__PROJECT");
|
|
const int _window_size[2] = { __WINDOW_WIDTH, __WINDOW_HEIGHT };
|
|
|
|
Image canvas = GenImageColor(__WINDOW_WIDTH, __WINDOW_HEIGHT, BLANK);
|
|
Texture2D t_canvas = LoadTextureFromImage(canvas);
|
|
SetTextureFilter(t_canvas, TEXTURE_FILTER_BILINEAR);
|
|
Shader shd_upscale = LoadShader(0, "upscale.frag");
|
|
int shdloc_texsize = GetShaderLocation(shd_upscale, "texture0_size");
|
|
int shdloc_scale = GetShaderLocation(shd_upscale, "px_per_tx");
|
|
|
|
for (int frame = 0; !WindowShouldClose(); frame++) {
|
|
BeginDrawing();
|
|
int window_width = GetScreenWidth(), window_height = GetScreenHeight();
|
|
float scale = fminf(window_width / (float)__WINDOW_WIDTH, window_height / (float)__WINDOW_HEIGHT);
|
|
{ // BEGIN frame
|
|
ImageClearBackground(&canvas, GetColor(0x1A1A1AFF));
|
|
ImageDrawText(&canvas, TextFormat("scale: %7.2fx", scale), 20, 20, 20, WHITE);
|
|
} // END frame
|
|
{ // BEGIN update
|
|
UpdateTexture(t_canvas, canvas.data);
|
|
BeginShaderMode(shd_upscale);
|
|
SetShaderValue(shd_upscale, shdloc_texsize, _window_size, SHADER_UNIFORM_IVEC2);
|
|
SetShaderValue(shd_upscale, shdloc_scale, &scale, SHADER_UNIFORM_FLOAT);
|
|
int texture_width = scale * __WINDOW_WIDTH, texture_height = scale * __WINDOW_HEIGHT;
|
|
|
|
ClearBackground(BLACK);
|
|
DrawTexturePro(t_canvas, (Rectangle) {
|
|
0, 0, __WINDOW_WIDTH, __WINDOW_HEIGHT
|
|
}, (Rectangle) {
|
|
floorf((window_width - texture_width) / 2.0),
|
|
floorf((window_height - texture_height) / 2.0),
|
|
texture_width, texture_height
|
|
}, (Vector2) { 0, 0 }, 0.0, WHITE);
|
|
EndShaderMode();
|
|
} // END update
|
|
EndDrawing();
|
|
}
|
|
}
|