/** * Free SdkEnv resource */ int freeSdkEnv(SdkEnv *env) { if (NULL == env) { return -1; } if (env->egl.display != EGL_NO_DISPLAY) { eglMakeCurrent(env->egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); if (env->egl.context != EGL_NO_CONTEXT) { eglDestroyContext(env->egl.display, env->egl.context); } if (env->egl.surface != EGL_NO_SURFACE) { eglDestroySurface(env->egl.display, env->egl.surface); } eglTerminate(env->egl.display); eglReleaseThread(); } env->egl.display = EGL_NO_DISPLAY; env->egl.context = EGL_NO_CONTEXT; env->egl.surface = EGL_NO_SURFACE; if (ACTIVE_PATH == env->userData.active && NULL != env->userData.inputPath) { free (env->userData.inputPath); env->userData.inputPath = NULL; } if (ACTIVE_PARAM == env->userData.active && NULL != env->userData.param) { Bitmap_t *img = (Bitmap_t *) env->userData.param; freeBitmap (img); env->userData.param = NULL; } if (NULL != env->userCmd) { freeChrbuf (env->userCmd); env->userCmd = NULL; } if (NULL != env->userData.inputPath) { free (env->userData.inputPath); env->userData.inputPath = NULL; } if (NULL != env->userData.outputPath) { free (env->userData.outputPath); env->userData.outputPath = NULL; } releaseShader(env); if (OFF_SCREEN_RENDER == env->type) { glDeleteFramebuffers (1, &env->handle.fboIdx); glDeleteTextures (1, &env->handle.texture2Idx); } freeEffectCmd(&env->effectCmd); free (env); }
void eglRelease(EGLContextType *context) { if (!context) return; releaseShader(context->glProgram); eglMakeCurrent(context->eglContext.display, NULL, NULL, NULL); eglDestroySurface(context->eglContext.display, context->eglContext.surface); eglDestroyContext(context->eglContext.display, context->eglContext.context); eglTerminate(context->eglContext.display); free(context); }
//-------------------------------------------------------------- void ofShader::unload() { if(bLoaded) { for(unordered_map<GLenum, GLuint>::const_iterator it = shaders.begin(); it != shaders.end(); ++it) { GLuint shader = it->second; if(shader) { ofLogVerbose("ofShader") << "unload(): detaching and deleting " << nameForType(it->first) << " shader from program " << program; releaseShader(program,shader); } } if (program) { releaseProgram(program); program = 0; } shaders.clear(); } bLoaded = false; }
//-------------------------------------------------------------- void ofShader::unload() { if(bLoaded) { for(map<GLenum, GLuint>::const_iterator it = shaders.begin(); it != shaders.end(); ++it) { GLuint shader = it->second; if(shader) { ofLog(OF_LOG_VERBOSE, "Detaching and deleting shader of type " + nameForType(it->first)); releaseShader(program,shader); } } if (program) { releaseProgram(program); program = 0; } shaders.clear(); } bLoaded = false; }
GL2Shader::~GL2Shader() { releaseShader(); }