MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / RenderBmpScanline

Function RenderBmpScanline

Descent3/TelcomEffectsRender.cpp:523–618  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

521}
522#define N_FADE_STAGES 4
523void RenderBmpScanline(tceffect *tce, float frametime, int xoff, int yoff, bool ok_to_render) {
524 ASSERT(tce->type == EFX_BMP_SCANLINE);
525 if (!ok_to_render) {
526 if (tce->flags == TC_BMPF_OUT && (!(tce->flags & TC_NOEARLYRENDER))) {
527 UploadChunk(&tce->bmpinfo.chunk_bmp);
528 BltBmpToScreen(tce->pos_x + glitch_dx + xoff, tce->pos_y + glitch_dy + yoff, &tce->bmpinfo.chunk_bmp);
529 }
530 return;
531 }
532
533 bool changed = true;
534 bool done;
535 int x, y;
536 int sbm_handle = tce->bmpinfo.bm_handle;
537 int dbm_handle = tce->bmpinfo.temp_bmhandle;
538 uint16_t *src, *dest;
539 int rowsize, w, h, xx, yy, stage;
540 float k;
541 if (dbm_handle == BAD_BITMAP_HANDLE)
542 goto done_scanline;
543 bm_ClearBitmap(dbm_handle);
544
545 x = 0;
546 y = 0;
547 done = false;
548
549 k = tce->age / tce->speed;
550
551 if (k > 1.2)
552 goto done_scanline;
553 if (k > 1.0) {
554 k = 1.0;
555 done = 1;
556 }
557 if (tce->flags == TC_BMPF_OUT) {
558 k = 1.0 - k;
559 }
560 src = bm_data(sbm_handle, 0);
561 dest = bm_data(dbm_handle, 0);
562 rowsize = bm_w(sbm_handle, 0);
563 w = bm_w(sbm_handle, 0);
564 h = bm_h(sbm_handle, 0);
565 for (yy = stage = 0; yy < h; yy++) {
566 int span_width;
567 span_width = w * ((k - ((float)stage / N_FADE_STAGES)) * N_FADE_STAGES);
568 if (span_width < 0)
569 span_width = 0;
570 if (span_width > w)
571 span_width = w;
572 for (xx = 0; xx < span_width; xx++)
573 if (dest && src)
574 *dest++ = *src++;
575
576 dest += (rowsize - xx);
577 src += (w - span_width);
578 switch (stage) {
579 case 0:
580 stage = 2;

Callers 1

RenderEffectFunction · 0.85

Calls 6

UploadChunkFunction · 0.85
BltBmpToScreenFunction · 0.85
bm_ClearBitmapFunction · 0.85
bm_dataFunction · 0.85
bm_wFunction · 0.85
bm_hFunction · 0.85

Tested by

no test coverage detected