X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=cl_screen.c;h=b8038ba79cd22f6b3e7fad775fd17556d7bf5560;hb=de967b2304397b621998f06cb13a9ee7c1e2ac4f;hp=d6f522cb364b283cbeab56431dd4f934ab1b4b65;hpb=fc83bfe29745415b7ab325a045d637d901450b22;p=xonotic%2Fdarkplaces.git diff --git a/cl_screen.c b/cl_screen.c index d6f522cb..b8038ba7 100644 --- a/cl_screen.c +++ b/cl_screen.c @@ -17,8 +17,11 @@ cvar_t scr_printspeed = {0, "scr_printspeed","8"}; cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640"}; cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480"}; cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"}; +cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"}; cvar_t cl_avidemo = {0, "cl_avidemo", "0"}; +int jpeg_supported = false; + qboolean scr_initialized; // ready to draw float scr_con_current; @@ -29,10 +32,7 @@ int clearnotify; qboolean scr_drawloading = false; -static qbyte menuplyr_pixels[4096]; - void DrawCrosshair(int num); -void V_CalcRefdef (void); static void SCR_ScreenShot_f (void); static void R_Envmap_f (void); @@ -366,13 +366,12 @@ void R_TimeReport_Start(void) if (r_timereport_active) { speedstringcount = 0; - AngleVectors (r_refdef.viewangles, vpn, NULL, NULL); sprintf(r_speeds_string, - "org:'%+8.2f %+8.2f %+8.2f' ang:'%+4.0f %+4.0f %+4.0f' dir:'%+2.3f %+2.3f %+2.3f'\n" + "org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\n" "world:%6i faces%6i nodes%6i leafs%6i dlitwalls\n" "%5i models%5i bmodels%5i sprites%6i particles%4i dlights\n" "%6i modeltris%6i meshs%6i meshtris\n", - r_refdef.vieworg[0], r_refdef.vieworg[1], r_refdef.vieworg[2], r_refdef.viewangles[0], r_refdef.viewangles[1], r_refdef.viewangles[2], vpn[0], vpn[1], vpn[2], + r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], r_viewforward[0], r_viewforward[1], r_viewforward[2], c_faces, c_nodes, c_leafs, c_light_polys, c_models, c_bmodels, c_sprites, c_particles, c_dlights, c_alias_polys, c_meshs, c_meshelements / 3); @@ -457,8 +456,6 @@ void SCR_SizeDown_f (void) void CL_Screen_Init(void) { - qpic_t *dat; - Cvar_RegisterVariable (&scr_fov); Cvar_RegisterVariable (&scr_viewsize); Cvar_RegisterVariable (&scr_conspeed); @@ -472,6 +469,7 @@ void CL_Screen_Init(void) Cvar_RegisterVariable (&vid_conwidth); Cvar_RegisterVariable (&vid_conheight); Cvar_RegisterVariable (&scr_screenshot_jpeg); + Cvar_RegisterVariable (&scr_screenshot_jpeg_quality); Cvar_RegisterVariable (&cl_avidemo); Cmd_AddCommand ("sizeup",SCR_SizeUp_f); @@ -480,19 +478,6 @@ void CL_Screen_Init(void) Cmd_AddCommand ("envmap", R_Envmap_f); scr_initialized = true; - - // HACK HACK HACK - // load the image data for the player image in the config menu - dat = (qpic_t *)FS_LoadFile ("gfx/menuplyr.lmp", false); - if (!dat) - Sys_Error("unable to load gfx/menuplyr.lmp"); - SwapPic (dat); - - if (dat->width*dat->height <= 4096) - memcpy (menuplyr_pixels, dat->data, dat->width * dat->height); - else - Con_Printf("gfx/menuplyr.lmp larger than 4k buffer"); - Mem_Free(dat); } void DrawQ_Clear(void) @@ -618,6 +603,48 @@ void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags) r_refdef.drawqueuesize += dq->size; } +void DrawQ_SetClipArea(float x, float y, float width, float height) +{ + drawqueue_t * dq; + if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize) + { + Con_DPrintf("DrawQueue full !\n"); + return; + } + dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize); + dq->size = sizeof(*dq); + dq->command = DRAWQUEUE_SETCLIP; + dq->x = x; + dq->y = y; + dq->scalex = width; + dq->scaley = height; + dq->flags = 0; + dq->color = 0; + + r_refdef.drawqueuesize += dq->size; +} + +void DrawQ_ResetClipArea(void) +{ + drawqueue_t *dq; + if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize) + { + Con_DPrintf("DrawQueue full !\n"); + return; + } + dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize); + dq->size = sizeof(*dq); + dq->command = DRAWQUEUE_RESETCLIP; + dq->x = 0; + dq->y = 0; + dq->scalex = 0; + dq->scaley = 0; + dq->flags = 0; + dq->color = 0; + + r_refdef.drawqueuesize += dq->size; +} + /* ==================== CalcFov @@ -700,7 +727,7 @@ static void SCR_CalcRefdef (void) if (cl.worldmodel) { Mod_CheckLoaded(cl.worldmodel); - contents = CL_PointSuperContents(r_refdef.vieworg); + contents = CL_PointSuperContents(r_vieworigin); if (contents & SUPERCONTENTS_LIQUIDSMASK) { r_refdef.fov_x *= (sin(cl.time * 4.7) * 0.015 + 0.985); @@ -828,10 +855,10 @@ static void R_Envmap_f (void) for (j = 0;j < 6;j++) { sprintf(filename, "env/%s%s.tga", basename, envmapinfo[j].name); - VectorCopy(envmapinfo[j].angles, r_refdef.viewangles); + Matrix4x4_CreateFromQuakeEntity(&r_refdef.viewentitymatrix, r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], envmapinfo[j].angles[0], envmapinfo[j].angles[1], envmapinfo[j].angles[2], 1); R_ClearScreen(); - R_RenderView (); - SCR_ScreenShot(filename, vid.realx, vid.realy, size, size, false); + R_RenderView(); + SCR_ScreenShot(filename, vid.realx, vid.realy + vid.realheight - (r_refdef.y + r_refdef.height), size, size, false); } envmap = false; @@ -993,8 +1020,9 @@ void CL_UpdateScreen(void) SCR_CheckDrawCenterString(); } MR_Draw(); + UI_Callback_Draw(); CL_DrawVideo(); - ui_draw(); + //ui_draw(); if (cls.signon == SIGNONS) { R_TimeReport("2d");