+
+static int gen_phong_tex(struct pimage *img, int xsz, int ysz, float sexp,
+ float offx, float offy, int dr, int dg, int db, int sr, int sg, int sb)
+{
+ int i, j;
+ float u, v, du, dv;
+ uint16_t *pix;
+
+ if(!(img->pixels = malloc(xsz * ysz * sizeof *pix))) {
+ return -1;
+ }
+ pix = img->pixels;
+
+ du = 2.0f / (float)(xsz - 1);
+ dv = 2.0f / (float)(ysz - 1);
+
+ v = -1.0f - offy;
+ for(i=0; i<ysz; i++) {
+ u = -1.0f - offx;
+ for(j=0; j<xsz; j++) {
+ float d = sqrt(u * u + v * v);
+ float val = pow(cos(d * M_PI / 2.0f), sexp);
+ int ival = abs(val * 255.0f);
+
+ int r = dr + ival * sr / 256;
+ int g = dg + ival * sg / 256;
+ int b = db + ival * sb / 256;
+
+ if(r > 255) r = 255;
+ if(g > 255) g = 255;
+ if(b > 255) b = 255;
+
+ *pix++ = PACK_RGB16(r, g, b);
+
+ u += du;
+ }
+ v += dv;
+ }
+
+ img->width = xsz;
+ img->height = ysz;
+ return 0;
+}