// x-run: make run #include #include 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(); } }