ref: a8a766f53153710122d2fd1d9a8f53059d254c38
parent: d1fec3d8bcbd0e2d1ec505e45fbf59bb5676ce83
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Sun Dec 10 17:40:39 EST 2023
textures: data -> pixels and reduce "offsets"-related noise
--- a/d_edge.c
+++ b/d_edge.c
@@ -129,7 +129,7 @@
}else if(s->flags & SURF_DRAWTURB){
pface = s->data;
miplevel = 0;
- cacheblock = (pixel_t *)((byte *)pface->texinfo->texture + pface->texinfo->texture->offsets[0]);
+ cacheblock = pface->texinfo->texture->pixels + pface->texinfo->texture->offsets[0];
cachewidth = 64;
if(s->insubmodel){
@@ -183,7 +183,7 @@
// FIXME: make this passed in to D_CacheSurface
pcurrentcache = D_CacheSurface(pface, miplevel);
- cacheblock = (pixel_t *)pcurrentcache->data;
+ cacheblock = pcurrentcache->pixels;
cachewidth = pcurrentcache->width;
D_CalcGradients(pface, transformed_modelorg);
--- a/d_local.h
+++ b/d_local.h
@@ -24,7 +24,7 @@
int height; // DEBUG only needed for debug
float mipscale;
struct texture_s *texture; // checked for animating textures
- pixel_t data[]; // width*height elements
+ pixel_t pixels[]; // width*height elements
} surfcache_t;
// !!! if this is changed, it must be changed in asm_draw.h too !!!
--- a/d_surf.c
+++ b/d_surf.c
@@ -222,7 +222,7 @@
cache->dlight = surface->dlightframe == r_framecount;
- r_drawsurf.surfdat = (pixel_t *)cache->data;
+ r_drawsurf.surfdat = cache->pixels;
cache->texture = r_drawsurf.texture;
cache->lightadj[0] = r_drawsurf.lightadj[0];
--- a/draw.c
+++ b/draw.c
@@ -64,7 +64,7 @@
q->height = LittleLong(q->height);
n = q->width*q->height;
q = Cache_Realloc(&pic->cache, sizeof(*q)+n*sizeof(pixel_t));
- torgbx((byte*)q->data, q->data, n);
+ torgbx((byte*)q->pixels, q->pixels, n);
return q;
}
@@ -96,7 +96,7 @@
fatal("Draw_Init: %s", lerr());
r_rectdesc.width = draw_backtile->width;
r_rectdesc.height = draw_backtile->height;
- r_rectdesc.ptexpixels = draw_backtile->data;
+ r_rectdesc.ptexpixels = draw_backtile->pixels;
r_rectdesc.rowbytes = draw_backtile->width;
}
@@ -185,7 +185,7 @@
{
fatal ("Draw_Pic: bad coordinates");
}
- source = pic->data;
+ source = pic->pixels;
dest = vid.buffer + y * vid.rowbytes + x;
for(py = 0; py < pic->height; py++){
for(px = 0; px < pic->width; px++){
@@ -211,7 +211,7 @@
if (x < 0 || y < 0 || x+pic->width > vid.width || y+pic->height > vid.height)
fatal ("Draw_TransPic: bad coordinates");
- source = pic->data;
+ source = pic->pixels;
dest = vid.buffer + y * vid.rowbytes + x;
if(pic->width & 7){ // general
for(v=0; v<pic->height; v++){
@@ -261,7 +261,7 @@
if (x < 0 || y < 0 || x+pic->width > vid.width || y+pic->height > vid.height)
fatal ("Draw_TransPic: bad coordinates");
- source = pic->data;
+ source = pic->pixels;
dest = vid.buffer + y * vid.rowbytes + x;
if (pic->width & 7){ // general
for(v=0; v<pic->height; v++){
@@ -338,7 +338,7 @@
// hack the version number directly into the pic
sprint (ver, "(9)quake %4.2f", (float)VERSION);
- dest = conback->data + 320*186 + 320 - 11 - 8*strlen(ver);
+ dest = conback->pixels + 320*186 + 320 - 11 - 8*strlen(ver);
n = strlen(ver);
for (x=0 ; x<n ; x++)
@@ -346,7 +346,7 @@
dest = vid.conbuffer;
for(y=0; y<lines; y++, dest+=vid.conrowbytes){
v = (vid.conheight - lines + y) * 200 / vid.conheight;
- src = conback->data + v * 320;
+ src = conback->pixels + v * 320;
if(vid.conwidth == 320)
memcpy(dest, src, vid.conwidth*sizeof(pixel_t));
else{
--- a/model.h
+++ b/model.h
@@ -53,7 +53,7 @@
struct texture_s *anim_next; // in the animation sequence
struct texture_s *alternate_anims; // bmodels in frmae 1 use these
int offsets[MIPLEVELS]; // four mip maps stored
- pixel_t data[];
+ pixel_t pixels[];
} texture_t;
enum {
--- a/model_bsp.c
+++ b/model_bsp.c
@@ -110,12 +110,12 @@
strncpy(tx->name, (char*)in0+off, sizeof(tx->name)-1);
tx->name[sizeof(tx->name)-1] = 0;
for(j = 0; j < MIPLEVELS; j++)
- tx->offsets[j] = sizeof(texture_t) + (le32(p) - (16+2*4+4*4))*sizeof(pixel_t);
+ tx->offsets[j] = le32(p) - (16+2*4+4*4);
mod->textures[i] = tx;
tx->width = w;
tx->height = h;
// the pixels immediately follow the structures
- torgbx(p, (pixel_t*)(tx+1), pixels);
+ torgbx(p, tx->pixels, pixels);
if(strncmp(tx->name, "sky", 3) == 0)
R_InitSky(tx);
}
--- a/model_bsp30.c
+++ b/model_bsp30.c
@@ -153,16 +153,16 @@
strncpy(tx->name, (char*)in0+off, sizeof(tx->name)-1);
tx->name[sizeof(tx->name)-1] = 0;
for(j = 0; j < MIPLEVELS; j++)
- tx->offsets[j] = sizeof(texture_t) + (le32(p) - (16+2*4+4*4))*sizeof(pixel_t);
+ tx->offsets[j] = le32(p) - (16+2*4+4*4);
mod->textures[i] = tx;
tx->width = w;
tx->height = h;
- if(tx->offsets[0] > 0){
+ if(tx->offsets[0] >= 0){
// the pixels immediately follow the structures
x = p + pixels;
palsz = le16(x);
if(palsz == 256)
- pal3torgbx(p, tx->data, pixels, x);
+ pal3torgbx(p, tx->pixels, pixels, x);
}else{
// alternative: outside, in a wad
for(j = 0; j < mod->numwads; j++){
--- a/r_main.c
+++ b/r_main.c
@@ -109,14 +109,14 @@
r_notexture_mip = Hunk_Alloc((16*16+8*8+4*4+2*2)*sizeof(pixel_t) + sizeof *r_notexture_mip);
r_notexture_mip->width = r_notexture_mip->height = 16;
- r_notexture_mip->offsets[0] = sizeof(*r_notexture_mip);
- r_notexture_mip->offsets[1] = r_notexture_mip->offsets[0] + 16*16*sizeof(pixel_t);
- r_notexture_mip->offsets[2] = r_notexture_mip->offsets[1] + 8*8*sizeof(pixel_t);
- r_notexture_mip->offsets[3] = r_notexture_mip->offsets[2] + 4*4*sizeof(pixel_t);
+ r_notexture_mip->offsets[0] = 0;
+ r_notexture_mip->offsets[1] = r_notexture_mip->offsets[0] + 16*16;
+ r_notexture_mip->offsets[2] = r_notexture_mip->offsets[1] + 8*8;
+ r_notexture_mip->offsets[3] = r_notexture_mip->offsets[2] + 4*4;
for (m=0 ; m<4 ; m++)
{
- dest = (pixel_t*)((byte*)r_notexture_mip + r_notexture_mip->offsets[m]);
+ dest = r_notexture_mip->pixels + r_notexture_mip->offsets[m];
for (y=0 ; y< (16>>m) ; y++)
for (x=0 ; x< (16>>m) ; x++, dest++)
{
--- a/r_sky.c
+++ b/r_sky.c
@@ -26,7 +26,7 @@
return;
}
- src = mt->data + mt->offsets[0];
+ src = mt->pixels + mt->offsets[0];
w = mt->width;
skyh = mt->height;
if(w == skyh){ // probably without a mask?
@@ -34,7 +34,7 @@
n = skyw*skyh;
r_skysource[0] = Hunk_Alloc(n*sizeof(pixel_t));
r_skysource[1] = r_skysource[0];
- memmove(r_skysource[0], src, n);
+ memmove(r_skysource[0], src, n*sizeof(pixel_t));
return;
}
skyw = w/2;
--- a/r_surf.c
+++ b/r_surf.c
@@ -220,7 +220,7 @@
mt = r_drawsurf.texture;
- r_source = (pixel_t*)((byte*)mt + mt->offsets[r_drawsurf.surfmip]);
+ r_source = mt->pixels + mt->offsets[r_drawsurf.surfmip];
// the fractional light values should range from 0 to (VID_GRADES - 1) << 16
// from a source range of 0 - 255
--- a/wad.c
+++ b/wad.c
@@ -142,11 +142,11 @@
if(wad->ver == WAD_VER2){
for(i = 0; i < n; i++)
- q->data[i] = q1pal[p[i]];
+ q->pixels[i] = q1pal[p[i]];
}else if(wad->ver == WAD_VER3 && palsz > 0){
for(i = 0; i < n; i++){
j = (*p++)*3;
- q->data[i] = j < palsz*3 ? (0xff<<24 | pal[j+0]<<16 | pal[j+1]<<8 | pal[j+2]) : 0;
+ q->pixels[i] = j < palsz*3 ? (0xff<<24 | pal[j+0]<<16 | pal[j+1]<<8 | pal[j+2]) : 0;
}
}
@@ -208,7 +208,7 @@
}
n = w*h*85/64;
for(i = 0; i < nelem(t->offsets); i++)
- t->offsets[i] = sizeof(texture_t) + (le32(p) - (16+2*4+4*4))*sizeof(pixel_t);
+ t->offsets[i] = le32(p) - (16+2*4+4*4);
off = p - wad->in;
if((n = W_ReadPixelsAt(wad, off, lmp->off+lmp->sz-off, (pixel_t*)(t+1), n)) < 0)
werrstr("%s: %s", name, lerr());
--- a/wad.h
+++ b/wad.h
@@ -5,7 +5,7 @@
{
int width;
int height;
- pixel_t data[];
+ pixel_t pixels[];
}qpic_t;
struct texture_s;