annotate src/texture.c @ 2:b832d3b3ed98
taking offset into account in get_window_shape
author |
John Tsiombikas <nuclear@member.fsf.org> |
date |
Mon, 01 Feb 2016 12:18:29 +0200 |
parents |
2f02f100b20f |
children |
|
rev |
line source |
nuclear@0
|
1 #include <GL/gl.h>
|
nuclear@0
|
2 #include "texture.h"
|
nuclear@0
|
3
|
nuclear@0
|
4 static int next_pow2(int x);
|
nuclear@0
|
5
|
nuclear@0
|
6 int image_texture(struct texture *tex, struct image *img)
|
nuclear@0
|
7 {
|
nuclear@0
|
8 glGenTextures(1, &tex->id);
|
nuclear@0
|
9 glBindTexture(GL_TEXTURE_2D, tex->id);
|
nuclear@0
|
10 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
nuclear@0
|
11 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
nuclear@0
|
12
|
nuclear@0
|
13 tex->width = img->width;
|
nuclear@0
|
14 tex->height = img->height;
|
nuclear@0
|
15 tex->tex_width = next_pow2(tex->width);
|
nuclear@0
|
16 tex->tex_height = next_pow2(tex->height);
|
nuclear@0
|
17
|
nuclear@0
|
18 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->tex_width, tex->tex_height, 0,
|
nuclear@0
|
19 GL_RGBA, GL_UNSIGNED_BYTE, 0);
|
nuclear@0
|
20 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, tex->width, tex->height,
|
nuclear@0
|
21 GL_RGBA, GL_UNSIGNED_BYTE, img->pixels);
|
nuclear@0
|
22 return 0;
|
nuclear@0
|
23 }
|
nuclear@0
|
24
|
nuclear@1
|
25 void destroy_texture(struct texture *tex)
|
nuclear@1
|
26 {
|
nuclear@1
|
27 glDeleteTextures(1, &tex->id);
|
nuclear@1
|
28 tex->id = 0;
|
nuclear@1
|
29 }
|
nuclear@1
|
30
|
nuclear@0
|
31 static int next_pow2(int x)
|
nuclear@0
|
32 {
|
nuclear@0
|
33 --x;
|
nuclear@0
|
34 x |= x >> 1;
|
nuclear@0
|
35 x |= x >> 2;
|
nuclear@0
|
36 x |= x >> 4;
|
nuclear@0
|
37 x |= x >> 8;
|
nuclear@0
|
38 return x + 1;
|
nuclear@0
|
39 }
|