Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IL::Image img = IL::LoadImage(c_fnHeatnoise);
- if (img) {
- /* get dimension once... */
- int width = img.width(), height = img.height(), depth = img.depth();
- heatTex = GL::CreateTexture(GL_TEXTURE_2D);
- if (!heatTex) {
- SetError("error: GL::CreateTexture(...) failed at %s:%u\n", __FILE__, __LINE__);
- return false;
- }
- /* autodetect number of levels to create */
- GLint level[2];
- glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, &level[0]);
- glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, &level[1]);
- int numLevels = level[0] - level[1] + 1;
- /* create temporary image */
- IL::Image tmp = IL::CloneImage(img);
- if (!tmp) {
- SetError("error: tmp == NULL at %s:%u\n", __FILE__, __LINE__);
- GL::DeleteTexture(heatTex);
- return false;
- }
- for(int level = 0; level < numLevels; ++level) {
- /* upload level image */
- glTexImage2D(GL_TEXTURE_2D,
- level,
- GL_RGBA,
- width,
- height,
- 0,
- tmp.format(),
- tmp.type(),
- tmp.data());
- if((1 == width) && (1 == height) && (1 == depth)) {
- /* no more levels to create: we're done */
- OIL::DeleteImage(tmp);
- break;
- }
- width >>= (1 == width) ? 0 : 1;
- height >>= (1 == height) ? 0 : 1;
- depth >>= (1 == depth) ? 0 : 1;
- if(!tmp.scale(width, height, depth, ILU_BILINEAR)) {
- SetError("error: Image::scale(...) failed at %s:%u\n", __FILE__, __LINE__);
- IL::DeleteImage(tmp);
- GL::DeleteTexture(heatTex);
- return false;
- }
- }
- }
- IL::DeleteImage(img);
Add Comment
Please, Sign In to add comment