Exemple #1
0
void GPU::Shader::Release()
{
    if( m_Id )
    {
        if( m_VertPg.Id() )
        {
            glDetachObjectARB( m_Id, m_VertPg.Id() );
            m_VertPg.Release();
        }
        if( m_FragPg.Id() )
        {
            glDetachObjectARB( m_Id, m_FragPg.Id() );
            m_FragPg.Release();
        }
        if( m_GeomPg.Id() )
        {
            glDetachObjectARB( m_Id, m_GeomPg.Id() );
            m_GeomPg.Release();
        }

        glDeleteObjectARB( m_Id );
        m_Id = 0;

        m_Uniforms.clear();
        m_Attributes.clear();
    }
}
CGLMShaderPair::~CGLMShaderPair( )
{
	if (m_program)
	{
		glDeleteObjectARB( (GLhandleARB)m_program );
		m_program = 0;
	}
}
Exemple #3
0
Shader::~Shader()
{
    ensureGlContext();

    // Destroy effect program
    if (m_shaderProgram)
        glCheck(glDeleteObjectARB(m_shaderProgram));
}
Exemple #4
0
	//--------------------------------------------------------------------------------------
	// Método para liberar un shader de la memoria de la tarjeta.
	//--------------------------------------------------------------------------------------
	void CShaderObject::Release (void)
	{
		if(this->shader)
		{
			glDeleteObjectARB(this->shader);
			this->shader = 0;
		}
	}
static void
_cogl_shader_free (CoglShader *shader)
{
    /* Frees shader resources but its handle is not
       released! Do that separately before this! */
    _COGL_GET_CONTEXT (ctx, NO_RETVAL);
    glDeleteObjectARB (shader->gl_handle);
}
void ShaderProgramGl::end(){
	if(inited){
		assertGl();
		glDeleteObjectARB(handle);
		assertGl();
		inited= false;
	}
}
Exemple #7
0
Shader::~Shader()
{
    EnsureGlContext();

    // Destroy effect program
    if (myShaderProgram)
        GLCheck(glDeleteObjectARB(myShaderProgram));
}
Exemple #8
0
/////////////////////////////////////////////////////////
// LinkProgram
//
/////////////////////////////////////////////////////////
bool glsl_program :: LinkARB()
{
  int i;
  GLsizei length=0;
  GLint infoLength;

  if(m_programARB) {
    glDeleteObjectARB( m_programARB );
    gem::utils::glsl::delshader(m_programARB);
    m_programARB = 0;
  }
  m_programARB = glCreateProgramObjectARB();
  for (i = 0; i < m_num; i++)
    {
      glAttachObjectARB( m_programARB, m_shaderObjARB[i] );
    }

  /* setup geometry shader */
  if(glProgramParameteriEXT) {
    glProgramParameteriEXT(m_program,GL_GEOMETRY_INPUT_TYPE_EXT,m_geoInType);
    glProgramParameteriEXT(m_program,GL_GEOMETRY_OUTPUT_TYPE_EXT,m_geoOutType);

    int temp=m_geoOutVertices;
    if(temp<0)
      glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT,&temp);
    glProgramParameteriEXT(m_program,GL_GEOMETRY_VERTICES_OUT_EXT,temp);
  }

  glLinkProgramARB( m_programARB );
  glGetObjectParameterivARB( m_programARB, GL_OBJECT_LINK_STATUS_ARB, &m_linked );

  glGetObjectParameterivARB( m_programARB, GL_OBJECT_INFO_LOG_LENGTH_ARB, &infoLength );

  GLcharARB*infoLogARB = new GLcharARB[infoLength];

  glGetInfoLogARB( m_programARB, infoLength, &length, infoLogARB );

  if (length)
    {
      post("Info_log:");
      post("%s", infoLogARB);
    }
  //post("freeing log");
  if(infoLogARB)delete[]infoLogARB;infoLogARB=NULL;

  //
  // If all went well, make the ProgramObject part of the current state
  //
  //post("did we link?");
  if (m_linked) {
    glUseProgramObjectARB( m_programARB );
  } else {
    glUseProgramObjectARB( 0 );
    post("ARB Link failed!");
    return false;
  }
  return true;
}
Exemple #9
0
	//-----------------------------------------------------------------------
    void GLSLProgram::unloadHighLevelImpl(void)
    {
		if (isSupported())
		{
			glDeleteObjectARB(mGLHandle);
		}


    }
Exemple #10
0
static int shader_free(lua_State *L)
{
	GLuint *s = (GLuint*)auxiliar_checkclass(L, "gl{shader}", 1);

	glDeleteObjectARB(*s);

	lua_pushnumber(L, 1);
	return 1;
}
Exemple #11
0
/*virtual*/
void
Shader::removeFromContext(unsigned int contextId)
{
  if (handleInContextExists(contextId))
  {
    glDeleteObjectARB(getResourceHandleForContext(contextId));
    setResourceHandleForContext(0, contextId);
  }
}
/**
 * Standard Destructor.
 * Cleans up the memory automatically.
 * \param void
 * \return void
 * \author <a href="mailto:[email protected]">Jens Schneider</a>
 * \date Aug.2004
 */
GLSLProgram::~GLSLProgram() {
  if (IsValid()) {
    if (m_bGLUseARB)
      glDeleteObjectARB(m_hProgram);
    else
      glDeleteProgram(m_hProgram);
  }
  m_hProgram=0;
}
Exemple #13
0
void ofxShader::unload() {
	if (vertexShader) {
		glDetachObjectARB(shader, vertexShader);
		glDeleteObjectARB(vertexShader);
		vertexShader = NULL;
	}

	if (fragmentShader) {
		glDetachObjectARB(shader, fragmentShader);
		glDeleteObjectARB(fragmentShader);
		fragmentShader = NULL;
	}

	if (shader) {
		glDeleteObjectARB(shader);
		shader = NULL;
	}
}
STShaderProgram::~STShaderProgram()
{
    if(GLEW_VERSION_2_0)
        glDeleteProgram(programid);
#ifndef __APPLE__
    else
        glDeleteObjectARB(programid);
#endif    
}
Exemple #15
0
Shader * Shader::loadShader(string name)
{
	Shader * s = new Shader();
	
	for (int i = 0; i < 5; i++) name.pop_back();
	s->name = name;

	string vertPath = name + ".vert";
	string fragPath = name + ".frag";

	//Start with a handle for the shader program...
	GLhandleARB shaderProgramHandle = glCreateProgramObjectARB ();

	//glBindAttribLocation (shaderProgramHandle, 0, "mg_vertex");
	//glBindAttribLocation (shaderProgramHandle, 1, "uv");
	// use glGetAttribLocation  instead

	GLhandleARB vertObject = makeShader(vertPath.c_str(), GL_VERTEX_SHADER);
	GLhandleARB fragObject = makeShader(fragPath.c_str(), GL_FRAGMENT_SHADER);
	glAttachObjectARB(shaderProgramHandle, vertObject);
	glAttachObjectARB(shaderProgramHandle, fragObject);

	glLinkProgramARB (shaderProgramHandle);
	
	//Find out if compilation worked and return the program handle if it did...
	int status; glGetObjectParameterivARB (shaderProgramHandle, GL_OBJECT_LINK_STATUS_ARB, &status);
	if (status != 0) 
	{
		//return shaderProgramHandle; //Everything OK...
		s->shaderProgram = shaderProgramHandle;
		s->vertexShader = vertObject;
		s->fragmentShader = fragObject;

		return s;
	}

	//It didn't, so log error information...
	//::log ("\nFailed to link shader \"%s\"...", name.c_str ());
	int length = 0; 
	glGetObjectParameterivARB (shaderProgramHandle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
	glBindFragDataLocation(shaderProgramHandle, 0, "outColour");

	const long MAXIMUM_LOG_STRING = 1024; char logString [MAXIMUM_LOG_STRING];
	GLsizei messageLength = min (length, MAXIMUM_LOG_STRING);
	if (messageLength > 0) {
		glGetInfoLogARB (shaderProgramHandle, messageLength, 0, logString);
	}

	//and detach what was previously attached and discard the program handle that was obtained...
	glDetachObjectARB(shaderProgramHandle, fragObject);
	glDetachObjectARB(shaderProgramHandle, vertObject);

	glDeleteObjectARB (shaderProgramHandle); //Should also detach the attached handles...

	return NULL;
}
Exemple #16
0
GLhandleARB ccShaderARB::LoadShaderARB(GLenum type, const char *filename)
{
    //Shader creation
    GLhandleARB shader = glCreateShaderObjectARB(type);
    if(shader == 0)
    {
        //ccLog::Error("Can't create shader!");
        return 0;
    }

    //code loading
    char *src = ReadShaderFile(filename);
    if(!src)
    {
        glDeleteObjectARB(shader);
        return 0;
    }

    glShaderSourceARB(shader, 1, (const GLcharARB**)&src, NULL);
    glCompileShaderARB(shader);

    //we don't need the program code anymore
    delete[] src;
    src=0;

    //we must check compilation result
    /*GLint status = GL_TRUE;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
    if(status != GL_TRUE)
    {
        //log size
        GLsizei logSize;
        glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logSize);

        //buffer to get log from OpenGL
        char* log = new char[logSize+1];
        if(!log)
        {
            ccLog::Warning("Not enough memory to log shader creation...");
            return 0;
        }
        memset(log, 0, logSize+1);

        glGetShaderInfoLog(shader, logSize, &logSize, log);
        ccLog::Error("Can't compile shader (file:'%s').\nLog: %s",filename,log);

        //free memory
        delete[] log;
        glDeleteShader(shader);

        return 0;
    }
    //*/

    return shader;
}
Exemple #17
0
///	This function frees all of our shader data
void GLSLShader::Release()
{
    for (std::map<GLint,GLhandleARB>::const_iterator it = m_hShaders.begin(), itend = m_hShaders.end(); it != itend; ++it)
    {
        GLhandleARB shader = it->second;
        if (shader && m_hProgramObject)
            glDetachObjectARB(m_hProgramObject, shader);
        if (shader)
            glDeleteObjectARB(shader);
    }
    m_hShaders.clear();

    // If our program object pointer is valid, free it
    if(m_hProgramObject)
    {
        glDeleteObjectARB(m_hProgramObject);
        m_hProgramObject = 0;
    }
}
void ofxShader::unload() {
	if(bLoaded) {
		if (vertexShader) {
			glDetachObjectARB(shader, vertexShader);
			glDeleteObjectARB(vertexShader);
			vertexShader = 0;
		}
		if (fragmentShader) {
			glDetachObjectARB(shader, fragmentShader);
			glDeleteObjectARB(fragmentShader);
			fragmentShader = 0;
		}
		if (shader) {
			glDeleteObjectARB(shader);
			shader = 0;
		}
	}
	bLoaded = false;
}
Exemple #19
0
void crossfader_term(struct crossfader * crossfader) {
    GLenum e;

    glDeleteTextures(1, &crossfader->tex_output);
    glDeleteFramebuffersEXT(1, &crossfader->fb);
    glDeleteObjectARB(crossfader->shader);
    if((e = glGetError()) != GL_NO_ERROR) FAIL("OpenGL error: %s\n", gluErrorString(e));

    memset(crossfader, 0, sizeof *crossfader);
}
Exemple #20
0
void ccShaderARB::reset()
{
    if (prog>0)
    {
        if (vert)
            glDetachObjectARB(prog, vert);
        if (frag)
            glDetachObjectARB(prog, frag);
        glDeleteObjectARB(prog);
    }
    prog=0;

    if (vert)
        glDeleteObjectARB(vert);
    vert=0;

    if (frag)
        glDeleteObjectARB(frag);
    frag=0;
}
Exemple #21
0
void GlProgram::
removeShader(ShaderHandle& handle)
{
    //remove the shader from the program
    glDetachObjectARB(program, *handle);
    //delete the shader
    glDeleteObjectARB(*handle);
    shaders.erase(handle);
    //invalidate the handle
    handle = shaders.end();
}
Exemple #22
0
GLShader::~GLShader(void)
	{
	if(programObject!=0)
		{
		/* Detach all shaders from the shader program: */
		for(HandleList::iterator vsoIt=vertexShaderObjects.begin();vsoIt!=vertexShaderObjects.end();++vsoIt)
			glDetachObjectARB(programObject,*vsoIt);
		for(HandleList::iterator fsoIt=fragmentShaderObjects.begin();fsoIt!=fragmentShaderObjects.end();++fsoIt)
			glDetachObjectARB(programObject,*fsoIt);
		
		/* Delete the shader program: */
		glDeleteObjectARB(programObject);
		}
	
	/* Delete all shaders: */
	for(HandleList::iterator vsoIt=vertexShaderObjects.begin();vsoIt!=vertexShaderObjects.end();++vsoIt)
		glDeleteObjectARB(*vsoIt);
	for(HandleList::iterator fsoIt=fragmentShaderObjects.begin();fsoIt!=fragmentShaderObjects.end();++fsoIt)
		glDeleteObjectARB(*fsoIt);
	}
Exemple #23
0
VolumeRayCasting::DataItem::~DataItem(void)
{
  /* Delete the display lists: */
  glDeleteLists(displayListIds[0],3);
	
  if(haveShaders)
    {
      /* Delete the shaders: */
      glDeleteObjectARB(rayCastingShader);
    }
}
void Shader::setup(const char *vs, const char *fs)
{
	//Create two new Shader Object IDs
	GLhandleARB vid = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
	GLhandleARB fid = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);

	//Pass the shader source code to OpenGL
	glShaderSourceARB(vid, 1, &vs, 0);
	glShaderSourceARB(fid, 1, &fs, 0);

	//Compile the shader files
	glCompileShaderARB(vid);
	glCompileShaderARB(fid);

	char glslLog[1024];
	GLsizei glslLogSize;

	//Get the error log for the Vertex shader
	glGetInfoLogARB(vid, 1024, &glslLogSize, glslLog);
	if (glslLogSize)
		std::cerr << "Vertex program log: " << glslLog << std::endl;

	//Get the error log for the Fragment shader
	glGetInfoLogARB(fid, 1024, &glslLogSize, glslLog);
	if (glslLogSize)
		std::cerr << "Fragment program log: " << glslLog << std::endl;

	//Create a new Shader Program
	pid = glCreateProgramObjectARB();

	//Attach the Vertex and Fragment shaders to the Shader Program
	glAttachObjectARB(pid, vid);
	glAttachObjectARB(pid, fid);

	//Delete shader objects since they have been attached to a program
	glDeleteObjectARB(vid);
	glDeleteObjectARB(fid);

	//Link it!
	glLinkProgramARB(pid);
}
Exemple #25
0
void GLSLShaders::unloadShaders()
{
    if (!_shadersLoaded)
        return;

    LBASSERT(_glewContext);
    LBASSERT(_program);

    glDeleteObjectARB(_program);
    _shadersLoaded = false;
    _program = 0;
}
Exemple #26
0
static bool        CompileShaderObject(GLhandleARB        *ShaderHandle,
                                       GLenum              ShaderType,
                                       GLsizei             SrcStringsCount,
                                       const GLcharARB   **SrcStrings)
 {
  bool             Result;

  #ifdef USE_OPENGL_20
  *ShaderHandle = glCreateShader(ShaderType);
  #else
  *ShaderHandle = glCreateShaderObjectARB(ShaderType);
  #endif

  if (*ShaderHandle != 0)
   {
    GLint          CompileStatus;

    #ifdef USE_OPENGL_20
    glShaderSource(*ShaderHandle,SrcStringsCount,SrcStrings,NULL);
    glCompileShader(*ShaderHandle);
    glGetShaderiv(*ShaderHandle,GL_COMPILE_STATUS,&CompileStatus);
    #else
    glShaderSourceARB(*ShaderHandle,SrcStringsCount,SrcStrings,NULL);
    glCompileShaderARB(*ShaderHandle);
    glGetObjectParameterivARB( *ShaderHandle,
                               GL_OBJECT_COMPILE_STATUS_ARB,
                              &CompileStatus);
    #endif

    Result = CompileStatus;

    DumpInfoLog(*ShaderHandle);

    if (!Result)
     {
      #ifdef USE_OPENGL_20
      glDeleteShader(*ShaderHandle);
      #else
      glDeleteObjectARB(*ShaderHandle);
      #endif

      *ShaderHandle = 0;
     }
   }
  else
   {
    Result = false;

    fprintf(stderr,"error: unable to create GLSL shader object\n");
   }

  return(Result);
 }
/*
 * ~ShaderObject - Destructor for ShaderObject.
 */
ShaderObject::~ShaderObject(void) {
    if (linkerLog != 0)
        free(linkerLog);
    for (int i = 0; i < shaderList.size(); i++) {
        glDetachObjectARB(shaderObject, shaderList[i]->getProgramObject());
        CHECK_GL_ERROR();
        if (manageMemory)
            delete shaderList[i];
    }
    glDeleteObjectARB(shaderObject);
    CHECK_GL_ERROR();
} // end ~ShaderObject()
Exemple #28
0
void InitScene (void)
{
   prog = glCreateProgramObjectARB ();
   vert = glCreateShaderObjectARB (GL_VERTEX_SHADER_ARB);
   glAttachObjectARB (prog, vert);
   glDeleteObjectARB (vert);
   load_test_file ("vstest.txt");
   glLinkProgramARB (prog);
   if (!CheckObjectStatus (prog))
      exit (0);
   glUseProgramObjectARB (prog);
}
Exemple #29
0
void ClearShaderObject(GLhandleARB GLSL_PO,GLhandleARB Attach_VS,GLhandleARB Attach_TC,GLhandleARB Attach_TE,GLhandleARB Attach_GS,GLhandleARB Attach_PS)
{
	if(glIsProgram(GLSL_PO)!=GL_FALSE)
	{
		if(glIsShader(Attach_VS)!=GL_FALSE){ glDetachObjectARB(GLSL_PO,Attach_VS);}
		if(glIsShader(Attach_TC)!=GL_FALSE){ glDetachObjectARB(GLSL_PO,Attach_TC);}
		if(glIsShader(Attach_TE)!=GL_FALSE){ glDetachObjectARB(GLSL_PO,Attach_TE);}
		if(glIsShader(Attach_GS)!=GL_FALSE){ glDetachObjectARB(GLSL_PO,Attach_GS);}
		if(glIsShader(Attach_PS)!=GL_FALSE){ glDetachObjectARB(GLSL_PO,Attach_PS);}
		glDeleteObjectARB(GLSL_PO);
	}
}
GLGeometryShader::~GLGeometryShader(void)
	{
	if(programObject!=0)
		{
		/* Detach all geometry shaders from the shader program: */
		for(HandleList::iterator gsoIt=geometryShaderObjects.begin();gsoIt!=geometryShaderObjects.end();++gsoIt)
			glDetachObjectARB(programObject,*gsoIt);
		}
	
	/* Delete all geometry shaders: */
	for(HandleList::iterator gsoIt=geometryShaderObjects.begin();gsoIt!=geometryShaderObjects.end();++gsoIt)
		glDeleteObjectARB(*gsoIt);
	}