37 if (error == GL_INVALID_ENUM) { |
37 if (error == GL_INVALID_ENUM) { |
38 asc_error("Tried to use more texture units than available."); |
38 asc_error("Tried to use more texture units than available."); |
39 } |
39 } |
40 glBindTexture(tex->target, tex->tex_id); |
40 glBindTexture(tex->target, tex->tex_id); |
41 glUniform1i(uniform_location, unit); |
41 glUniform1i(uniform_location, unit); |
|
42 asc_error_catch_all_gl(); |
42 } |
43 } |
43 |
44 |
44 void asc_texture_from_surface(AscTexture *tex, SDL_Surface const *surface) { |
45 void asc_texture_from_surface(AscTexture *tex, SDL_Surface const *surface) { |
|
46 if (asc_texture_uninitialized(tex)) { |
|
47 asc_error("Tried to use uninitialized texture."); |
|
48 asc_dprintf("Texture address: %"PRIxPTR, (uintptr_t) tex); |
|
49 return; |
|
50 } |
45 glBindTexture(tex->target,tex->tex_id); |
51 glBindTexture(tex->target,tex->tex_id); |
46 glPixelStorei(GL_UNPACK_ROW_LENGTH, |
52 glPixelStorei(GL_UNPACK_ROW_LENGTH, |
47 surface->pitch / surface->format->BytesPerPixel); |
53 surface->pitch / surface->format->BytesPerPixel); |
48 glTexImage2D(tex->target, 0, GL_RGBA, |
54 glTexImage2D(tex->target, 0, GL_RGBA, |
49 surface->w, surface->h, |
55 surface->w, surface->h, |
50 0, GL_BGRA, |
56 0, GL_BGRA, |
51 GL_UNSIGNED_BYTE, surface->pixels); |
57 GL_UNSIGNED_BYTE, surface->pixels); |
|
58 asc_error_catch_all_gl(); |
52 } |
59 } |
53 |
60 |
54 void asc_texture_init( |
61 void asc_texture_init( |
55 AscTexture *tex, |
62 AscTexture *tex, |
56 enum asc_texture_target target, |
63 enum asc_texture_target target, |
77 glTexParameteri(tex->target, GL_TEXTURE_MIN_FILTER, |
84 glTexParameteri(tex->target, GL_TEXTURE_MIN_FILTER, |
78 texture_filters[min_filter]); |
85 texture_filters[min_filter]); |
79 glTexParameteri(tex->target, GL_TEXTURE_MAG_FILTER, |
86 glTexParameteri(tex->target, GL_TEXTURE_MAG_FILTER, |
80 texture_filters[mag_filter]); |
87 texture_filters[mag_filter]); |
81 asc_dprintf("Initialized texture: %u", tex->tex_id); |
88 asc_dprintf("Initialized texture: %u", tex->tex_id); |
|
89 asc_error_catch_all_gl(); |
82 } |
90 } |
83 |
91 |
84 void asc_texture_destroy(AscTexture *tex) { |
92 void asc_texture_destroy(AscTexture *tex) { |
85 asc_dprintf("Destroy texture: %u", tex->tex_id); |
93 asc_dprintf("Destroy texture: %u", tex->tex_id); |
86 glDeleteTextures(1, &tex->tex_id); |
94 glDeleteTextures(1, &tex->tex_id); |