10 void RrTextureFreeContents(struct RrTexture *tex)
16 free(tex->data.text.string);
19 glDeleteTextures(1, &tex->data.rgba.texid);
22 tex->type = RR_TEXTURE_NONE;
25 void RrTextureSetRGBA(struct RrSurface *sur,
34 unsigned char *padbuf;
36 struct RrTexture *tex = RrSurfaceTexture(sur, texnum);
38 RrTextureFreeContents(tex);
39 tex->type = RR_TEXTURE_RGBA;
44 tex->data.rgba.padw = 1;
45 tex->data.rgba.padh = 1;
47 while (tex->data.rgba.padw < w)
48 tex->data.rgba.padw <<= 1;
50 while (tex->data.rgba.padh < h)
51 tex->data.rgba.padh <<= 1;
53 padbuf = malloc(sizeof(RrData32)
54 * tex->data.rgba.padh * tex->data.rgba.padw);
55 memset(padbuf, 0, sizeof(RrData32) * tex->data.rgba.padh *
58 for (i = 0; i < h; i++)
59 memcpy(padbuf + i*tex->data.rgba.padw,
63 glGenTextures(1, &num);
64 tex->data.rgba.texid = num;
65 glBindTexture(GL_TEXTURE_2D, num);
66 glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
67 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
68 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
69 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
70 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
71 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
72 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
73 tex->data.rgba.padw, tex->data.rgba.padh,
74 0, GL_RGBA, GL_UNSIGNED_BYTE, padbuf);
78 void RrTextureSetText(struct RrSurface *sur,
82 struct RrColor *color,
85 struct RrTexture *tex = RrSurfaceTexture(sur, texnum);
89 RrTextureFreeContents(tex);
90 tex->type = RR_TEXTURE_TEXT;
91 tex->data.text.font = font;
92 tex->data.text.layout = layout;
93 tex->data.text.color = *color;
96 tex->data.text.string = malloc(l);
97 memcpy(tex->data.text.string, text, l);
100 void RrTextureSetNone(struct RrSurface *sur,
103 struct RrTexture *tex = RrSurfaceTexture(sur, texnum);
106 RrTextureFreeContents(tex);
109 void RrTexturePaint(struct RrSurface *sur, struct RrTexture *tex,
110 int x, int y, int w, int h)
112 glEnable(GL_TEXTURE_2D);
115 case RR_TEXTURE_NONE:
117 case RR_TEXTURE_TEXT:
119 RrFontRenderString(sur, tex->data.text.font, &tex->data.text.color,
120 tex->data.text.layout, tex->data.text.string,
124 case RR_TEXTURE_RGBA:
126 glColor3f(1.0, 1.0, 1.0);
127 glBindTexture(GL_TEXTURE_2D, tex->data.rgba.texid);
128 glBegin(GL_TRIANGLES);
131 glTexCoord2f(w/(float)tex->data.rgba.padw, 0);
133 glTexCoord2f(w/(float)tex->data.rgba.padw,
134 h/(float)tex->data.rgba.padh);
135 glVertex2i(x+w, y+h);
137 glVertex2i(x+w, y+h);
138 glTexCoord2f(0, h/(float)tex->data.rgba.padh);
146 glDisable(GL_TEXTURE_2D);