mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-26 14:20:59 +00:00
[vulkan] Switch draw_pic to take subpic_t instead of qpic_t
While this does pull the grovelling for the subpic out to the callers, the real problem is the excessive use of qpic_t in the internal code: qpic_t is really just the image format in wad files, and shouldn't be used as a generic image handle. Cleans up more of the icky code in the font drawing functions.
This commit is contained in:
parent
936f6d91e4
commit
71efbba628
1 changed files with 24 additions and 19 deletions
|
@ -510,7 +510,7 @@ Vulkan_Draw_Init (vulkan_ctx_t *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
draw_pic (float x, float y, int w, int h, qpic_t *pic,
|
draw_pic (float x, float y, int w, int h, subpic_t *subpic,
|
||||||
int srcx, int srcy, int srcw, int srch,
|
int srcx, int srcy, int srcw, int srch,
|
||||||
float *color, vertqueue_t *queue)
|
float *color, vertqueue_t *queue)
|
||||||
{
|
{
|
||||||
|
@ -521,7 +521,6 @@ draw_pic (float x, float y, int w, int h, qpic_t *pic,
|
||||||
drawvert_t *verts = queue->verts + queue->count * VERTS_PER_QUAD;
|
drawvert_t *verts = queue->verts + queue->count * VERTS_PER_QUAD;
|
||||||
queue->count++;
|
queue->count++;
|
||||||
|
|
||||||
subpic_t *subpic = *(subpic_t **) pic->data;
|
|
||||||
srcx += subpic->rect->x;
|
srcx += subpic->rect->x;
|
||||||
srcy += subpic->rect->y;
|
srcy += subpic->rect->y;
|
||||||
|
|
||||||
|
@ -567,7 +566,8 @@ queue_character (int x, int y, byte chr, vulkan_ctx_t *ctx)
|
||||||
cx = chr % 16;
|
cx = chr % 16;
|
||||||
cy = chr / 16;
|
cy = chr / 16;
|
||||||
|
|
||||||
draw_pic (x, y, 8, 8, dctx->conchars, cx * 8, cy * 8, 8, 8, color,
|
subpic_t *subpic = *(subpic_t **) dctx->conchars->data;
|
||||||
|
draw_pic (x, y, 8, 8, subpic, cx * 8, cy * 8, 8, 8, color,
|
||||||
&frame->quad_verts);
|
&frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,8 +665,9 @@ draw_crosshair_pic (int ch, int x, int y, vulkan_ctx_t *ctx)
|
||||||
};
|
};
|
||||||
const int *p = pos[ch - 1];
|
const int *p = pos[ch - 1];
|
||||||
|
|
||||||
|
subpic_t *subpic = *(subpic_t **) dctx->crosshair->data;
|
||||||
draw_pic (x - CROSSHAIR_WIDTH + 1, y - CROSSHAIR_HEIGHT + 1,
|
draw_pic (x - CROSSHAIR_WIDTH + 1, y - CROSSHAIR_HEIGHT + 1,
|
||||||
CROSSHAIR_WIDTH * 2, CROSSHAIR_HEIGHT * 2, dctx->crosshair,
|
CROSSHAIR_WIDTH * 2, CROSSHAIR_HEIGHT * 2, subpic,
|
||||||
p[0], p[1], p[2], p[3], crosshair_color, &frame->quad_verts);
|
p[0], p[1], p[2], p[3], crosshair_color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -711,8 +712,11 @@ Vulkan_Draw_TextBox (int x, int y, int width, int lines, byte alpha,
|
||||||
qpic_t *p;
|
qpic_t *p;
|
||||||
int cx, cy, n;
|
int cx, cy, n;
|
||||||
#define draw(px, py, pp) \
|
#define draw(px, py, pp) \
|
||||||
draw_pic (px, py, pp->width, pp->height, pp, \
|
do { \
|
||||||
0, 0, pp->width, pp->height, color, &frame->quad_verts);
|
subpic_t *subpic = *(subpic_t **) (pp)->data; \
|
||||||
|
draw_pic (px, py, pp->width, pp->height, subpic, \
|
||||||
|
0, 0, pp->width, pp->height, color, &frame->quad_verts); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
color[3] = alpha;
|
color[3] = alpha;
|
||||||
// draw left side
|
// draw left side
|
||||||
|
@ -768,7 +772,8 @@ Vulkan_Draw_Pic (int x, int y, qpic_t *pic, vulkan_ctx_t *ctx)
|
||||||
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
||||||
|
|
||||||
static quat_t color = { 1, 1, 1, 1};
|
static quat_t color = { 1, 1, 1, 1};
|
||||||
draw_pic (x, y, pic->width, pic->height, pic,
|
subpic_t *subpic = *(subpic_t **) pic->data;
|
||||||
|
draw_pic (x, y, pic->width, pic->height, subpic,
|
||||||
0, 0, pic->width, pic->height, color, &frame->quad_verts);
|
0, 0, pic->width, pic->height, color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -779,7 +784,8 @@ Vulkan_Draw_Picf (float x, float y, qpic_t *pic, vulkan_ctx_t *ctx)
|
||||||
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
||||||
|
|
||||||
static quat_t color = { 1, 1, 1, 1};
|
static quat_t color = { 1, 1, 1, 1};
|
||||||
draw_pic (x, y, pic->width, pic->height, pic,
|
subpic_t *subpic = *(subpic_t **) pic->data;
|
||||||
|
draw_pic (x, y, pic->width, pic->height, subpic,
|
||||||
0, 0, pic->width, pic->height, color, &frame->quad_verts);
|
0, 0, pic->width, pic->height, color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -792,7 +798,8 @@ Vulkan_Draw_SubPic (int x, int y, qpic_t *pic,
|
||||||
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
||||||
|
|
||||||
static quat_t color = { 1, 1, 1, 1};
|
static quat_t color = { 1, 1, 1, 1};
|
||||||
draw_pic (x, y, width, height, pic, srcx, srcy, width, height,
|
subpic_t *subpic = *(subpic_t **) pic->data;
|
||||||
|
draw_pic (x, y, width, height, subpic, srcx, srcy, width, height,
|
||||||
color, &frame->quad_verts);
|
color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,7 +816,8 @@ Vulkan_Draw_ConsoleBackground (int lines, byte alpha, vulkan_ctx_t *ctx)
|
||||||
cpic = Vulkan_Draw_CachePic ("gfx/conback.lmp", false, ctx);
|
cpic = Vulkan_Draw_CachePic ("gfx/conback.lmp", false, ctx);
|
||||||
int ofs = max (0, cpic->height - lines);
|
int ofs = max (0, cpic->height - lines);
|
||||||
lines = min (lines, cpic->height);
|
lines = min (lines, cpic->height);
|
||||||
draw_pic (0, 0, vid.conview->xlen, lines, cpic,
|
subpic_t *subpic = *(subpic_t **) cpic->data;
|
||||||
|
draw_pic (0, 0, vid.conview->xlen, lines, subpic,
|
||||||
0, ofs, cpic->width, lines, color, &frame->quad_verts);
|
0, ofs, cpic->width, lines, color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -828,7 +836,8 @@ Vulkan_Draw_Fill (int x, int y, int w, int h, int c, vulkan_ctx_t *ctx)
|
||||||
|
|
||||||
VectorScale (vid.palette + c * 3, 1.0f/255.0f, color);
|
VectorScale (vid.palette + c * 3, 1.0f/255.0f, color);
|
||||||
color[3] = 1;
|
color[3] = 1;
|
||||||
draw_pic (x, y, w, h, dctx->white_pic, 0, 0, 1, 1, color,
|
subpic_t *subpic = *(subpic_t **) dctx->white_pic->data;
|
||||||
|
draw_pic (x, y, w, h, subpic, 0, 0, 1, 1, color,
|
||||||
&frame->quad_verts);
|
&frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -865,7 +874,8 @@ draw_blendscreen (quat_t color, vulkan_ctx_t *ctx)
|
||||||
drawctx_t *dctx = ctx->draw_context;
|
drawctx_t *dctx = ctx->draw_context;
|
||||||
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
drawframe_t *frame = &dctx->frames.a[ctx->curFrame];
|
||||||
|
|
||||||
draw_pic (0, 0, vid.conview->xlen, vid.conview->ylen, dctx->white_pic,
|
subpic_t *subpic = *(subpic_t **) dctx->white_pic->data;
|
||||||
|
draw_pic (0, 0, vid.conview->xlen, vid.conview->ylen, subpic,
|
||||||
0, 0, 1, 1, color, &frame->quad_verts);
|
0, 0, 1, 1, color, &frame->quad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1058,7 +1068,6 @@ Vulkan_Draw_AddFont (rfont_t *font, vulkan_ctx_t *ctx)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
drawframe_t *dframe;
|
drawframe_t *dframe;
|
||||||
qpic_t pic;
|
|
||||||
subpic_t *subpic;
|
subpic_t *subpic;
|
||||||
quat_t color;
|
quat_t color;
|
||||||
} rgctx_t;
|
} rgctx_t;
|
||||||
|
@ -1071,7 +1080,7 @@ vulkan_render_glyph (rglyph_t *glyph, int x, int y, void *_rgctx)
|
||||||
*((vrect_t **) &rgctx->subpic->rect) = glyph->rect;
|
*((vrect_t **) &rgctx->subpic->rect) = glyph->rect;
|
||||||
int gw = glyph->rect->width;
|
int gw = glyph->rect->width;
|
||||||
int gh = glyph->rect->height;
|
int gh = glyph->rect->height;
|
||||||
draw_pic (x, y, gw, gh, &rgctx->pic, 0, 0, gw, gh, rgctx->color,
|
draw_pic (x, y, gw, gh, rgctx->subpic, 0, 0, gw, gh, rgctx->color,
|
||||||
&rgctx->dframe->iaquad_verts);
|
&rgctx->dframe->iaquad_verts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1092,10 +1101,6 @@ Vulkan_Draw_FontString (int x, int y, const char *str, vulkan_ctx_t *ctx)
|
||||||
};
|
};
|
||||||
rgctx_t rgctx = {
|
rgctx_t rgctx = {
|
||||||
.dframe = dframe,
|
.dframe = dframe,
|
||||||
.pic = {
|
|
||||||
.width = 1,
|
|
||||||
.height = 1,
|
|
||||||
},
|
|
||||||
.subpic = &glyph_subpic,
|
.subpic = &glyph_subpic,
|
||||||
.color = { 0.5, 1, 0.6, 1 },
|
.color = { 0.5, 1, 0.6, 1 },
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue