Exemple #1
0
/**
 * 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);
}
Exemple #2
0
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;
}
Exemple #5
0
	GL2Shader::~GL2Shader()
	{
		releaseShader();
	}