#ifndef HL2H_OVERLAY_H #define HL2H_OVERLAY_H #include // VGUI_Surface030 vtable slots, confirmed against the shipped // vguimatsurface.so. This header is the only place that knows them; every // consumer goes through the functions below. enum SurfaceSlot { SURF_GetEmbeddedPanel = 6, SURF_PushMakeCurrent = 8, SURF_PopMakeCurrent = 9, SURF_DrawSetColor = 10, SURF_DrawFilledRect = 12, SURF_DrawOutlinedRect = 14, SURF_DrawLine = 15, SURF_DrawSetTextFont = 17, SURF_DrawSetTextColor = 18, SURF_DrawSetTextPos = 20, SURF_DrawPrintText = 22, SURF_GetScreenSize = 38, SURF_CreateFont = 66, SURF_AddGlyphSetToFont = 67, SURF_GetTextSize = 75 }; using HFont = unsigned long; struct ISurface; // Set once by install_menu(); every wrapper below is a no-op while it is null. extern ISurface *g_surface; void overlay_color(int r, int g, int b, int a); void overlay_fill(int x0, int y0, int x1, int y1); void overlay_outline_rect(int x0, int y0, int x1, int y1); void overlay_line(int x0, int y0, int x1, int y1); void overlay_text_font(HFont f); void overlay_text_color(int r, int g, int b, int a); void overlay_text_pos(int x, int y); void overlay_print_text(const wchar_t *text, int count, int draw_type = 0); HFont overlay_create_font(); bool overlay_add_glyph_set(HFont f, const char *name, int tall, int weight, int blur, int scanlines, int flags, int range_min, int range_max); void overlay_screen_size(int &w, int &h); void overlay_text_size(HFont f, const wchar_t *text, int &w, int &h); int overlay_embedded_panel(); void overlay_push_make_current(int panel, bool use_insets); void overlay_pop_make_current(int panel); // Per-frame draw budget. The engine calls PaintTraverseEx for every panel, and // DrawPrintText for every text draw, so the overlay must be collapsed to one // draw per frame. A timer cannot do that: panels spaced a few ms apart in the // same frame would draw twice and double the alpha of translucent elements. // overlay_frame_mark() is called from FRAME_RENDER_START, which is the real // frame boundary; if that stops arriving (menu/pause) a 10 ms fallback keeps // the GUI repainting. void overlay_frame_mark(); bool overlay_should_draw(); #endif