diff options
author | Nanley Chery <nanley.g.chery@intel.com> | 2015-07-23 09:09:41 -0700 |
---|---|---|
committer | Nanley Chery <nanley.g.chery@intel.com> | 2015-07-23 09:09:41 -0700 |
commit | 4d556c1b03c98f39aabaf6e50a2c0d2aef02520e (patch) | |
tree | 66d47f82f6481bb6dcd758e17a08fae139859167 | |
parent | da0bc6bcb2746951a14cc357b682897b32920fdc (diff) |
use glGetTexImage to create array texture
-rw-r--r-- | gen_array.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/gen_array.c b/gen_array.c index 3bc732e..0ecc5b5 100644 --- a/gen_array.c +++ b/gen_array.c @@ -33,7 +33,7 @@ void make_context() }; const int32_t config_attrs[] = { - WAFFLE_CONTEXT_API, WAFFLE_CONTEXT_OPENGL_ES2, + WAFFLE_CONTEXT_API, WAFFLE_CONTEXT_OPENGL, WAFFLE_RED_SIZE, 8, WAFFLE_BLUE_SIZE, 8, WAFFLE_GREEN_SIZE, 8, @@ -48,8 +48,8 @@ void make_context() dpy = waffle_display_connect(NULL); // Exit if OpenGL ES2 is unsupported. - if (!waffle_display_supports_context_api(dpy, WAFFLE_CONTEXT_OPENGL_ES2) - || !waffle_dl_can_open(WAFFLE_DL_OPENGL_ES2)) + if (!waffle_display_supports_context_api(dpy, WAFFLE_CONTEXT_OPENGL) + || !waffle_dl_can_open(WAFFLE_DL_OPENGL)) { exit(EXIT_FAILURE); } @@ -118,7 +118,10 @@ main(int argc, char *argv[]) int cur_lev; int cur_img; + int w, h, expt; struct piglit_ktx* files[imgs]; + GLuint tex[imgs]; + glGenTextures(imgs, tex); for (cur_lev = 0; cur_lev < miplevels; ++cur_lev) { int level_size = 0; for (cur_img = 0; cur_img < imgs; ++cur_img) { @@ -127,23 +130,28 @@ main(int argc, char *argv[]) printf("%s\n", cur_file); /* Read in the files into memory */ - if (cur_lev == 0) + if (cur_lev == 0) { + GLenum my_gl_error; files[cur_img] = piglit_ktx_read_file(cur_file); + piglit_ktx_load_texture(files[cur_img], &tex[cur_img], &my_gl_error); + } + /* Get level size */ + w = (files[cur_img]->info.pixel_width >> cur_lev) ? (files[cur_img]->info.pixel_width >> cur_lev) : 1; + h = (files[cur_img]->info.pixel_height >> cur_lev) ? (files[cur_img]->info.pixel_height >> cur_lev) : 1; + expt = w*h*6; level_size += piglit_ktx_get_image(files[cur_img], cur_lev, 0)->size; } /* Create the texture array */ - img_info[cur_lev].size = level_size; + img_info[cur_lev].size = expt*imgs; img_info[cur_lev].data = (char*) malloc(level_size); - int next_offset = 0; for (cur_img = 0; cur_img < imgs; ++cur_img) { - const struct piglit_ktx_image* pimg = piglit_ktx_get_image(files[cur_img], cur_lev, 0); - memcpy(img_info[cur_lev].data + next_offset, pimg->data, pimg->size); - next_offset += pimg->size; - printf("Image %d size is %d, expected %d\n", cur_img, pimg->size, (files[cur_img]->info.pixel_width >> cur_lev)* (files[cur_img]->info.pixel_height >> cur_lev)*6); + glBindTexture(GL_TEXTURE_2D, tex[cur_img]); + glGetTexImage(GL_TEXTURE_2D, cur_lev, tex_info.glFormat, tex_info.glType, + img_info[cur_lev].data); } } |