void rt_deletescene(SceneHandle voidscene) { scenedef * scene = (scenedef *) voidscene; list * cur, * next; if (scene != NULL) { if (scene->imginternal) { free(scene->img); } /* tear down and deallocate persistent rendering threads */ destroy_render_threads(scene); /* tear down and deallocate persistent scanline receives */ if (scene->parbuf != NULL) rt_delete_scanlinereceives(scene->parbuf); /* free all lights */ cur = scene->lightlist; while (cur != NULL) { next = cur->next; /* free lights that have special data, or aren't freed */ /* as part of the object list deallocation loop. */ free_light_special(cur->item); free(cur); cur = next; } /* free all textures */ cur = scene->texlist; while (cur != NULL) { next = cur->next; ((texture *) cur->item)->methods->freetex(cur->item); /* free texture */ free(cur); /* free list entry */ cur = next; } /* free all clipping planes */ cur = scene->cliplist; while (cur != NULL) { next = cur->next; free(((clip_group *) cur->item)->planes); /* free array of clip planes */ free(cur->item); /* free clip group struct */ free(cur); /* free list entry */ cur = next; } /* free all other textures, MIP Maps, and images */ FreeTextures(); free(scene->cpuinfo); free_objects(scene->objgroup.boundedobj); free_objects(scene->objgroup.unboundedobj); free(scene); } }
void RAS_2DFilterManager::SetupTextures(bool depth, bool luminance) { FreeTextures(); glGenTextures(1, (GLuint*)&texname[0]); glBindTexture(GL_TEXTURE_2D, texname[0]); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texturewidth, textureheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); if(depth){ glGenTextures(1, (GLuint*)&texname[1]); glBindTexture(GL_TEXTURE_2D, texname[1]); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, texturewidth,textureheight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE,NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_NONE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } if(luminance){ glGenTextures(1, (GLuint*)&texname[2]); glBindTexture(GL_TEXTURE_2D, texname[2]); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16, texturewidth, textureheight, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); } }
TextureCache::~TextureCache() { FreeTextures(); }
void rt_finalize(void) { FreeTextures(); rt_par_finish(); }
void CShadowHandler::Init() { const bool tmpFirstInit = firstInit; firstInit = false; shadowConfig = configHandler->GetInt("Shadows"); shadowMapSize = configHandler->GetInt("ShadowMapSize"); shadowProMode = configHandler->GetInt("ShadowProjectionMode"); shadowGenBits = SHADOWGEN_BIT_NONE; shadowsLoaded = false; inShadowPass = false; shadowTexture = 0; dummyColorTexture = 0; if (!tmpFirstInit && !shadowsSupported) { return; } // possible values for the "Shadows" config-parameter: // < 0: disable and don't try to initialize // 0: disable, but still check if the hardware is able to run them // > 0: enabled (by default for all shadow-casting geometry if equal to 1) if (shadowConfig < 0) { LOG("[%s] shadow rendering is disabled (config-value %d)", __FUNCTION__, shadowConfig); return; } if (shadowConfig > 0) shadowGenBits = SHADOWGEN_BIT_MODEL | SHADOWGEN_BIT_MAP | SHADOWGEN_BIT_PROJ | SHADOWGEN_BIT_TREE; if (shadowConfig > 1) { shadowGenBits &= (~shadowConfig); } // no warnings when running headless if (SpringVersion::IsHeadless()) return; if (!globalRendering->haveARB && !globalRendering->haveGLSL) { LOG_L(L_WARNING, "[%s] GPU does not support either ARB or GLSL shaders for shadow rendering", __FUNCTION__); return; } if (!globalRendering->haveGLSL) { if (!GLEW_ARB_shadow || !GLEW_ARB_depth_texture || !GLEW_ARB_texture_env_combine) { LOG_L(L_WARNING, "[%s] required OpenGL ARB-extensions missing for shadow rendering", __FUNCTION__); // NOTE: these should only be relevant for FFP shadows // return; } if (!GLEW_ARB_shadow_ambient) { // can't use arbitrary texvals in case the depth comparison op fails (only 0) LOG_L(L_WARNING, "[%s] \"ARB_shadow_ambient\" extension missing (will probably make shadows darker than they should be)", __FUNCTION__); } } if (!InitDepthTarget()) { // free any resources allocated by InitDepthTarget() FreeTextures(); LOG_L(L_ERROR, "[%s] failed to initialize depth-texture FBO", __FUNCTION__); return; } if (tmpFirstInit) { shadowsSupported = true; } if (shadowConfig == 0) { // free any resources allocated by InitDepthTarget() FreeTextures(); // shadowsLoaded is still false return; } LoadShadowGenShaderProgs(); }
void CShadowHandler::Kill() { FreeTextures(); shaderHandler->ReleaseProgramObjects("[ShadowHandler]"); shadowGenProgs.clear(); }
TextureManager::~TextureManager() { FreeTextures( ETL_Permanent ); }
RAS_2DFilterManager::~RAS_2DFilterManager() { FreeTextures(); }
void CResourceManager::ShutDown(void) { FreeTextures(); FreeAudio(); }