[DEV] update lock
This commit is contained in:
parent
d9ed0d196c
commit
1b8ec043cc
@ -21,7 +21,7 @@ gale::resource::Manager::Manager() :
|
|||||||
}
|
}
|
||||||
|
|
||||||
gale::resource::Manager::~Manager() {
|
gale::resource::Manager::~Manager() {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
bool hasError = false;
|
bool hasError = false;
|
||||||
if (m_resourceListToUpdate.size()!=0) {
|
if (m_resourceListToUpdate.size()!=0) {
|
||||||
GALE_ERROR("Must not have anymore resources to update !!!");
|
GALE_ERROR("Must not have anymore resources to update !!!");
|
||||||
@ -38,7 +38,7 @@ gale::resource::Manager::~Manager() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Manager::unInit() {
|
void gale::resource::Manager::unInit() {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
display();
|
display();
|
||||||
m_resourceListToUpdate.clear();
|
m_resourceListToUpdate.clear();
|
||||||
// remove all resources ...
|
// remove all resources ...
|
||||||
@ -59,7 +59,7 @@ void gale::resource::Manager::unInit() {
|
|||||||
void gale::resource::Manager::display() {
|
void gale::resource::Manager::display() {
|
||||||
GALE_INFO("Resources loaded : ");
|
GALE_INFO("Resources loaded : ");
|
||||||
// remove all resources ...
|
// remove all resources ...
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
for (auto &it : m_resourceList) {
|
for (auto &it : m_resourceList) {
|
||||||
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
||||||
if (tmpRessource != nullptr) {
|
if (tmpRessource != nullptr) {
|
||||||
@ -75,7 +75,7 @@ void gale::resource::Manager::display() {
|
|||||||
void gale::resource::Manager::reLoadResources() {
|
void gale::resource::Manager::reLoadResources() {
|
||||||
GALE_INFO("------------- Resources re-loaded -------------");
|
GALE_INFO("------------- Resources re-loaded -------------");
|
||||||
// remove all resources ...
|
// remove all resources ...
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
if (m_resourceList.size() != 0) {
|
if (m_resourceList.size() != 0) {
|
||||||
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
||||||
GALE_INFO(" Reload level : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
GALE_INFO(" Reload level : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
||||||
@ -97,7 +97,7 @@ void gale::resource::Manager::reLoadResources() {
|
|||||||
|
|
||||||
void gale::resource::Manager::update(const std::shared_ptr<gale::Resource>& _object) {
|
void gale::resource::Manager::update(const std::shared_ptr<gale::Resource>& _object) {
|
||||||
// chek if not added before
|
// chek if not added before
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
for (auto &it : m_resourceListToUpdate) {
|
for (auto &it : m_resourceListToUpdate) {
|
||||||
if ( it != nullptr
|
if ( it != nullptr
|
||||||
&& it == _object) {
|
&& it == _object) {
|
||||||
@ -111,44 +111,63 @@ void gale::resource::Manager::update(const std::shared_ptr<gale::Resource>& _obj
|
|||||||
|
|
||||||
// Specific to load or update the data in the openGl context == > system use only
|
// Specific to load or update the data in the openGl context == > system use only
|
||||||
void gale::resource::Manager::updateContext() {
|
void gale::resource::Manager::updateContext() {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
|
||||||
// TODO : Check the number of call this ... GALE_INFO("update open-gl context ... ");
|
// TODO : Check the number of call this ... GALE_INFO("update open-gl context ... ");
|
||||||
if (m_contextHasBeenRemoved == true) {
|
if (m_contextHasBeenRemoved == true) {
|
||||||
// need to update all ...
|
// need to update all ...
|
||||||
m_contextHasBeenRemoved = false;
|
m_contextHasBeenRemoved = false;
|
||||||
if (m_resourceList.size() != 0) {
|
std::list<std::weak_ptr<gale::Resource>> resourceList;
|
||||||
|
{
|
||||||
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
// Clean the update list
|
||||||
|
m_resourceListToUpdate.clear();
|
||||||
|
resourceList = m_resourceList;
|
||||||
|
}
|
||||||
|
if (resourceList.size() != 0) {
|
||||||
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
||||||
GALE_INFO(" updateContext level (D) : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
GALE_INFO(" updateContext level (D) : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
||||||
for (auto &it : m_resourceList) {
|
for (auto &it : resourceList) {
|
||||||
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
||||||
if( tmpRessource != nullptr
|
if( tmpRessource != nullptr
|
||||||
&& jjj == tmpRessource->getResourceLevel()) {
|
&& jjj == tmpRessource->getResourceLevel()) {
|
||||||
//GALE_DEBUG("Update context named : " << l_resourceList[iii]->getName());
|
//GALE_DEBUG("Update context named : " << l_resourceList[iii]->getName());
|
||||||
tmpRessource->updateContext();
|
if (tmpRessource->updateContext() == false) {
|
||||||
|
// Lock error ==> postponned
|
||||||
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
m_resourceListToUpdate.push_back(tmpRessource);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_resourceListToUpdate.size() != 0) {
|
std::vector<std::shared_ptr<gale::Resource>> resourceListToUpdate;
|
||||||
|
{
|
||||||
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
resourceListToUpdate = m_resourceListToUpdate;
|
||||||
|
// Clean the update list
|
||||||
|
m_resourceListToUpdate.clear();
|
||||||
|
}
|
||||||
|
if (resourceListToUpdate.size() != 0) {
|
||||||
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
for (size_t jjj=0; jjj<MAX_RESOURCE_LEVEL; jjj++) {
|
||||||
GALE_INFO(" updateContext level (U) : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
GALE_INFO(" updateContext level (U) : " << jjj << "/" << (MAX_RESOURCE_LEVEL-1));
|
||||||
for (auto &it : m_resourceListToUpdate) {
|
for (auto &it : resourceListToUpdate) {
|
||||||
if ( it != nullptr
|
if ( it != nullptr
|
||||||
&& jjj == it->getResourceLevel()) {
|
&& jjj == it->getResourceLevel()) {
|
||||||
it->updateContext();
|
if (it->updateContext() == false) {
|
||||||
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
// Lock error ==> postponned
|
||||||
|
m_resourceListToUpdate.push_back(it);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Clean the update list
|
|
||||||
m_resourceListToUpdate.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// in this case, it is really too late ...
|
// in this case, it is really too late ...
|
||||||
void gale::resource::Manager::contextHasBeenDestroyed() {
|
void gale::resource::Manager::contextHasBeenDestroyed() {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
for (auto &it : m_resourceList) {
|
for (auto &it : m_resourceList) {
|
||||||
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
||||||
if (tmpRessource != nullptr) {
|
if (tmpRessource != nullptr) {
|
||||||
@ -161,7 +180,7 @@ void gale::resource::Manager::contextHasBeenDestroyed() {
|
|||||||
|
|
||||||
// internal generic keeper ...
|
// internal generic keeper ...
|
||||||
std::shared_ptr<gale::Resource> gale::resource::Manager::localKeep(const std::string& _filename) {
|
std::shared_ptr<gale::Resource> gale::resource::Manager::localKeep(const std::string& _filename) {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
GALE_VERBOSE("KEEP (DEFAULT) : file : '" << _filename << "' in " << m_resourceList.size() << " resources");
|
GALE_VERBOSE("KEEP (DEFAULT) : file : '" << _filename << "' in " << m_resourceList.size() << " resources");
|
||||||
for (auto &it : m_resourceList) {
|
for (auto &it : m_resourceList) {
|
||||||
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
||||||
@ -176,7 +195,7 @@ std::shared_ptr<gale::Resource> gale::resource::Manager::localKeep(const std::st
|
|||||||
|
|
||||||
// internal generic keeper ...
|
// internal generic keeper ...
|
||||||
void gale::resource::Manager::localAdd(const std::shared_ptr<gale::Resource>& _object) {
|
void gale::resource::Manager::localAdd(const std::shared_ptr<gale::Resource>& _object) {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
//Add ... find empty slot
|
//Add ... find empty slot
|
||||||
for (auto &it : m_resourceList) {
|
for (auto &it : m_resourceList) {
|
||||||
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
std::shared_ptr<gale::Resource> tmpRessource = it.lock();
|
||||||
@ -191,7 +210,7 @@ void gale::resource::Manager::localAdd(const std::shared_ptr<gale::Resource>& _o
|
|||||||
|
|
||||||
// in case of error ...
|
// in case of error ...
|
||||||
void gale::resource::Manager::cleanInternalRemoved() {
|
void gale::resource::Manager::cleanInternalRemoved() {
|
||||||
std11::unique_lock<std11::mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
//GALE_INFO("remove object in Manager");
|
//GALE_INFO("remove object in Manager");
|
||||||
updateContext();
|
updateContext();
|
||||||
for (auto it(m_resourceList.begin()); it!=m_resourceList.end(); ++it) {
|
for (auto it(m_resourceList.begin()); it!=m_resourceList.end(); ++it) {
|
||||||
|
@ -22,7 +22,7 @@ namespace gale {
|
|||||||
std::list<std::weak_ptr<gale::Resource>> m_resourceList;
|
std::list<std::weak_ptr<gale::Resource>> m_resourceList;
|
||||||
std::vector<std::shared_ptr<gale::Resource>> m_resourceListToUpdate;
|
std::vector<std::shared_ptr<gale::Resource>> m_resourceListToUpdate;
|
||||||
bool m_contextHasBeenRemoved;
|
bool m_contextHasBeenRemoved;
|
||||||
std11::mutex m_mutex;
|
std11::recursive_mutex m_mutex;
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief initialize the internal variable
|
* @brief initialize the internal variable
|
||||||
|
@ -141,13 +141,19 @@ void gale::resource::Program::checkGlError(const char* _op, int32_t _localLine,
|
|||||||
if (isPresent == true) {
|
if (isPresent == true) {
|
||||||
GALE_ERROR(" in program name : " << m_name);
|
GALE_ERROR(" in program name : " << m_name);
|
||||||
GALE_ERROR(" program OpenGL ID =" << m_program);
|
GALE_ERROR(" program OpenGL ID =" << m_program);
|
||||||
GALE_ERROR(" List IO :");
|
GALE_ERROR(" List Uniform:");
|
||||||
int32_t id = 0;
|
int32_t id = 0;
|
||||||
for (auto &it : m_elementList) {
|
for (auto &it : m_elementList) {
|
||||||
if (id == _idElem) {
|
if (it.m_isAttribute == false) {
|
||||||
GALE_ERROR(" * name :" << it.m_name << " OpenGL ID=" << it.m_elementId << " attribute=" << it.m_isAttribute << " is linked=" << it.m_isLinked);
|
GALE_ERROR(" " << (id==_idElem?"*":" ") << " name :" << it.m_name << " OpenGL ID=" << it.m_elementId << " is linked=" << it.m_isLinked);
|
||||||
} else {
|
}
|
||||||
GALE_ERROR(" name :" << it.m_name << " OpenGL ID=" << it.m_elementId << " attribute=" << it.m_isAttribute << " is linked=" << it.m_isLinked);
|
id++;
|
||||||
|
}
|
||||||
|
GALE_ERROR(" List Attribute:");
|
||||||
|
id = 0;
|
||||||
|
for (auto &it : m_elementList) {
|
||||||
|
if (it.m_isAttribute == true) {
|
||||||
|
GALE_ERROR(" " << (id==_idElem?"*":" ") << " name :" << it.m_name << " OpenGL ID=" << it.m_elementId << " is linked=" << it.m_isLinked);
|
||||||
}
|
}
|
||||||
id++;
|
id++;
|
||||||
}
|
}
|
||||||
@ -180,18 +186,22 @@ int32_t gale::resource::Program::getAttribute(std::string _elementName) {
|
|||||||
progAttributeElement tmp;
|
progAttributeElement tmp;
|
||||||
tmp.m_name = _elementName;
|
tmp.m_name = _elementName;
|
||||||
tmp.m_isAttribute = true;
|
tmp.m_isAttribute = true;
|
||||||
if (m_exist == true) {
|
if (gale::openGL::hasContext() == false) {
|
||||||
|
getManager().update(std::dynamic_pointer_cast<gale::Resource>(shared_from_this()));
|
||||||
|
tmp.m_elementId = -1;
|
||||||
|
tmp.m_isLinked = false;
|
||||||
|
} else if (m_exist == true) {
|
||||||
tmp.m_elementId = gale::openGL::program::getAttributeLocation(m_program, tmp.m_name);
|
tmp.m_elementId = gale::openGL::program::getAttributeLocation(m_program, tmp.m_name);
|
||||||
tmp.m_isLinked = true;
|
tmp.m_isLinked = true;
|
||||||
if (tmp.m_elementId<0) {
|
if (tmp.m_elementId<0) {
|
||||||
GALE_WARNING(" [" << m_elementList.size() << "] glGetAttribLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
GALE_WARNING(" {" << m_program << "}[" << m_elementList.size() << "] glGetAttribLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||||
tmp.m_isLinked = false;
|
tmp.m_isLinked = false;
|
||||||
} else {
|
} else {
|
||||||
GALE_INFO(" [" << m_elementList.size() << "] glGetAttribLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
GALE_INFO(" {" << m_program << "}[" << m_elementList.size() << "] glGetAttribLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// program is not loaded ==> just local reister ...
|
// program is not loaded ==> just local reister ...
|
||||||
tmp.m_elementId = gale::openGL::program::getUniformLocation(m_program, tmp.m_name);
|
tmp.m_elementId = -1;
|
||||||
tmp.m_isLinked = false;
|
tmp.m_isLinked = false;
|
||||||
}
|
}
|
||||||
m_elementList.push_back(tmp);
|
m_elementList.push_back(tmp);
|
||||||
@ -209,26 +219,34 @@ int32_t gale::resource::Program::getUniform(std::string _elementName) {
|
|||||||
progAttributeElement tmp;
|
progAttributeElement tmp;
|
||||||
tmp.m_name = _elementName;
|
tmp.m_name = _elementName;
|
||||||
tmp.m_isAttribute = false;
|
tmp.m_isAttribute = false;
|
||||||
if (m_exist == true) {
|
if (gale::openGL::hasContext() == false) {
|
||||||
|
getManager().update(std::dynamic_pointer_cast<gale::Resource>(shared_from_this()));
|
||||||
|
tmp.m_elementId = -1;
|
||||||
|
tmp.m_isLinked = false;
|
||||||
|
} else if (m_exist == true) {
|
||||||
tmp.m_elementId = gale::openGL::program::getUniformLocation(m_program, tmp.m_name);
|
tmp.m_elementId = gale::openGL::program::getUniformLocation(m_program, tmp.m_name);
|
||||||
tmp.m_isLinked = true;
|
tmp.m_isLinked = true;
|
||||||
if (tmp.m_elementId<0) {
|
if (tmp.m_elementId<0) {
|
||||||
GALE_WARNING(" [" << m_elementList.size() << "] glGetUniformLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
GALE_WARNING(" {" << m_program << "}[" << m_elementList.size() << "] glGetUniformLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||||
tmp.m_isLinked = false;
|
tmp.m_isLinked = false;
|
||||||
} else {
|
} else {
|
||||||
GALE_INFO(" [" << m_elementList.size() << "] glGetUniformLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
GALE_INFO(" {" << m_program << "}[" << m_elementList.size() << "] glGetUniformLocation(\"" << tmp.m_name << "\") = " << tmp.m_elementId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// program is not loaded ==> just local reister ...
|
// program is not loaded ==> just local reister ...
|
||||||
tmp.m_elementId = gale::openGL::program::getUniformLocation(m_program, tmp.m_name);
|
tmp.m_elementId = -1;
|
||||||
tmp.m_isLinked = false;
|
tmp.m_isLinked = false;
|
||||||
}
|
}
|
||||||
m_elementList.push_back(tmp);
|
m_elementList.push_back(tmp);
|
||||||
return m_elementList.size()-1;
|
return m_elementList.size()-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Program::updateContext() {
|
bool gale::resource::Program::updateContext() {
|
||||||
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex, std11::defer_lock);
|
||||||
|
if (lock.try_lock() == false) {
|
||||||
|
//Lock error ==> try later ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (m_exist == true) {
|
if (m_exist == true) {
|
||||||
// Do nothing == > too dangerous ...
|
// Do nothing == > too dangerous ...
|
||||||
} else {
|
} else {
|
||||||
@ -236,7 +254,7 @@ void gale::resource::Program::updateContext() {
|
|||||||
GALE_INFO("Create the Program ... \"" << m_name << "\"");
|
GALE_INFO("Create the Program ... \"" << m_name << "\"");
|
||||||
m_program = gale::openGL::program::create();
|
m_program = gale::openGL::program::create();
|
||||||
if (m_program < 0) {
|
if (m_program < 0) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
// first attach vertex shader, and after fragment shader
|
// first attach vertex shader, and after fragment shader
|
||||||
for (size_t iii=0; iii<m_shaderList.size(); iii++) {
|
for (size_t iii=0; iii<m_shaderList.size(); iii++) {
|
||||||
@ -256,9 +274,8 @@ void gale::resource::Program::updateContext() {
|
|||||||
if (gale::openGL::program::compile(m_program) == false) {
|
if (gale::openGL::program::compile(m_program) == false) {
|
||||||
GALE_ERROR("Could not compile \"PROGRAM\": \"" << m_name << "\"");
|
GALE_ERROR("Could not compile \"PROGRAM\": \"" << m_name << "\"");
|
||||||
gale::openGL::program::remove(m_program);
|
gale::openGL::program::remove(m_program);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
m_exist = true;
|
|
||||||
// now get the old attribute requested priviously ...
|
// now get the old attribute requested priviously ...
|
||||||
size_t iii = 0;
|
size_t iii = 0;
|
||||||
for(auto &it : m_elementList) {
|
for(auto &it : m_elementList) {
|
||||||
@ -266,24 +283,27 @@ void gale::resource::Program::updateContext() {
|
|||||||
it.m_elementId = gale::openGL::program::getAttributeLocation(m_program, it.m_name);
|
it.m_elementId = gale::openGL::program::getAttributeLocation(m_program, it.m_name);
|
||||||
it.m_isLinked = true;
|
it.m_isLinked = true;
|
||||||
if (it.m_elementId<0) {
|
if (it.m_elementId<0) {
|
||||||
GALE_WARNING(" [" << iii << "] openGL::getAttributeLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
GALE_WARNING(" {" << m_program << "}[" << iii << "] openGL::getAttributeLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
||||||
it.m_isLinked = false;
|
it.m_isLinked = false;
|
||||||
} else {
|
} else {
|
||||||
GALE_DEBUG(" [" << iii << "] openGL::getAttributeLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
GALE_DEBUG(" {" << m_program << "}[" << iii << "] openGL::getAttributeLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
it.m_elementId = gale::openGL::program::getUniformLocation(m_program, it.m_name);
|
it.m_elementId = gale::openGL::program::getUniformLocation(m_program, it.m_name);
|
||||||
it.m_isLinked = true;
|
it.m_isLinked = true;
|
||||||
if (it.m_elementId < 0) {
|
if (it.m_elementId < 0) {
|
||||||
GALE_WARNING(" [" << iii << "] openGL::getUniformLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
GALE_WARNING(" {" << m_program << "}[" << iii << "] openGL::getUniformLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
||||||
it.m_isLinked = false;
|
it.m_isLinked = false;
|
||||||
} else {
|
} else {
|
||||||
GALE_DEBUG(" [" << iii << "] openGL::getUniformLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
GALE_DEBUG(" {" << m_program << "}[" << iii << "] openGL::getUniformLocation(\"" << it.m_name << "\") = " << it.m_elementId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iii++;
|
iii++;
|
||||||
}
|
}
|
||||||
|
// It will existed only when all is updated...
|
||||||
|
m_exist = true;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Program::removeContext() {
|
void gale::resource::Program::removeContext() {
|
||||||
@ -350,7 +370,8 @@ void gale::resource::Program::sendAttribute(int32_t _idElem,
|
|||||||
int32_t _nbElement,
|
int32_t _nbElement,
|
||||||
const void* _pointer,
|
const void* _pointer,
|
||||||
int32_t _jumpBetweenSample) {
|
int32_t _jumpBetweenSample) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ( _idElem < 0
|
if ( _idElem < 0
|
||||||
@ -378,7 +399,8 @@ void gale::resource::Program::sendAttributePointer(int32_t _idElem,
|
|||||||
int32_t _index,
|
int32_t _index,
|
||||||
int32_t _jumpBetweenSample,
|
int32_t _jumpBetweenSample,
|
||||||
int32_t _offset) {
|
int32_t _offset) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -415,7 +437,8 @@ void gale::resource::Program::sendAttributePointer(int32_t _idElem,
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void gale::resource::Program::uniformMatrix(int32_t _idElem, const mat4& _matrix, bool _transpose) {
|
void gale::resource::Program::uniformMatrix(int32_t _idElem, const mat4& _matrix, bool _transpose) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -440,7 +463,8 @@ void gale::resource::Program::uniformMatrix(int32_t _idElem, const mat4& _matrix
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void gale::resource::Program::uniform1f(int32_t _idElem, float _value1) {
|
void gale::resource::Program::uniform1f(int32_t _idElem, float _value1) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -454,7 +478,8 @@ void gale::resource::Program::uniform1f(int32_t _idElem, float _value1) {
|
|||||||
checkGlError("glUniform1f", __LINE__, _idElem);
|
checkGlError("glUniform1f", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform2f(int32_t _idElem, float _value1, float _value2) {
|
void gale::resource::Program::uniform2f(int32_t _idElem, float _value1, float _value2) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -468,7 +493,8 @@ void gale::resource::Program::uniform2f(int32_t _idElem, float _value1, float _
|
|||||||
checkGlError("glUniform2f", __LINE__, _idElem);
|
checkGlError("glUniform2f", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform3f(int32_t _idElem, float _value1, float _value2, float _value3) {
|
void gale::resource::Program::uniform3f(int32_t _idElem, float _value1, float _value2, float _value3) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -482,7 +508,8 @@ void gale::resource::Program::uniform3f(int32_t _idElem, float _value1, float _v
|
|||||||
checkGlError("glUniform3f", __LINE__, _idElem);
|
checkGlError("glUniform3f", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform4f(int32_t _idElem, float _value1, float _value2, float _value3, float _value4) {
|
void gale::resource::Program::uniform4f(int32_t _idElem, float _value1, float _value2, float _value3, float _value4) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -499,7 +526,8 @@ void gale::resource::Program::uniform4f(int32_t _idElem, float _value1, float _v
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void gale::resource::Program::uniform1i(int32_t _idElem, int32_t _value1) {
|
void gale::resource::Program::uniform1i(int32_t _idElem, int32_t _value1) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -513,7 +541,8 @@ void gale::resource::Program::uniform1i(int32_t _idElem, int32_t _value1) {
|
|||||||
checkGlError("glUniform1i", __LINE__, _idElem);
|
checkGlError("glUniform1i", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform2i(int32_t _idElem, int32_t _value1, int32_t _value2) {
|
void gale::resource::Program::uniform2i(int32_t _idElem, int32_t _value1, int32_t _value2) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -527,7 +556,8 @@ void gale::resource::Program::uniform2i(int32_t _idElem, int32_t _value1, int32_
|
|||||||
checkGlError("glUniform2i", __LINE__, _idElem);
|
checkGlError("glUniform2i", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform3i(int32_t _idElem, int32_t _value1, int32_t _value2, int32_t _value3) {
|
void gale::resource::Program::uniform3i(int32_t _idElem, int32_t _value1, int32_t _value2, int32_t _value3) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -541,7 +571,8 @@ void gale::resource::Program::uniform3i(int32_t _idElem, int32_t _value1, int32_
|
|||||||
checkGlError("glUniform3i", __LINE__, _idElem);
|
checkGlError("glUniform3i", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform4i(int32_t _idElem, int32_t _value1, int32_t _value2, int32_t _value3, int32_t _value4) {
|
void gale::resource::Program::uniform4i(int32_t _idElem, int32_t _value1, int32_t _value2, int32_t _value3, int32_t _value4) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -559,7 +590,8 @@ void gale::resource::Program::uniform4i(int32_t _idElem, int32_t _value1, int32_
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void gale::resource::Program::uniform1fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
void gale::resource::Program::uniform1fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -581,7 +613,8 @@ void gale::resource::Program::uniform1fv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform1fv", __LINE__, _idElem);
|
checkGlError("glUniform1fv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform2fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
void gale::resource::Program::uniform2fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -603,7 +636,8 @@ void gale::resource::Program::uniform2fv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform2fv", __LINE__, _idElem);
|
checkGlError("glUniform2fv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform3fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
void gale::resource::Program::uniform3fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -626,7 +660,8 @@ void gale::resource::Program::uniform3fv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform3fv", __LINE__, _idElem);
|
checkGlError("glUniform3fv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform4fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
void gale::resource::Program::uniform4fv(int32_t _idElem, int32_t _nbElement, const float *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -652,7 +687,8 @@ void gale::resource::Program::uniform4fv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
//////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void gale::resource::Program::uniform1iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
void gale::resource::Program::uniform1iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -674,7 +710,8 @@ void gale::resource::Program::uniform1iv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform1iv", __LINE__, _idElem);
|
checkGlError("glUniform1iv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform2iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
void gale::resource::Program::uniform2iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -696,7 +733,8 @@ void gale::resource::Program::uniform2iv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform2iv", __LINE__, _idElem);
|
checkGlError("glUniform2iv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform3iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
void gale::resource::Program::uniform3iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -718,7 +756,8 @@ void gale::resource::Program::uniform3iv(int32_t _idElem, int32_t _nbElement, co
|
|||||||
checkGlError("glUniform3iv", __LINE__, _idElem);
|
checkGlError("glUniform3iv", __LINE__, _idElem);
|
||||||
}
|
}
|
||||||
void gale::resource::Program::uniform4iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
void gale::resource::Program::uniform4iv(int32_t _idElem, int32_t _nbElement, const int32_t *_value) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -759,7 +798,8 @@ void gale::resource::Program::use() {
|
|||||||
|
|
||||||
|
|
||||||
void gale::resource::Program::setTexture0(int32_t _idElem, int64_t _textureOpenGlID) {
|
void gale::resource::Program::setTexture0(int32_t _idElem, int64_t _textureOpenGlID) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -784,7 +824,8 @@ void gale::resource::Program::setTexture0(int32_t _idElem, int64_t _textureOpenG
|
|||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Program::setTexture1(int32_t _idElem, int64_t _textureOpenGlID) {
|
void gale::resource::Program::setTexture1(int32_t _idElem, int64_t _textureOpenGlID) {
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
if (_idElem<0 || (size_t)_idElem>m_elementList.size()) {
|
||||||
@ -811,7 +852,8 @@ void gale::resource::Program::setTexture1(int32_t _idElem, int64_t _textureOpenG
|
|||||||
|
|
||||||
void gale::resource::Program::unUse() {
|
void gale::resource::Program::unUse() {
|
||||||
//GALE_WARNING("Will use program : " << m_program);
|
//GALE_WARNING("Will use program : " << m_program);
|
||||||
if (0 == m_program) {
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
||||||
|
if (m_exist == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -289,7 +289,7 @@ namespace gale {
|
|||||||
/**
|
/**
|
||||||
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
||||||
*/
|
*/
|
||||||
void updateContext();
|
bool updateContext();
|
||||||
/**
|
/**
|
||||||
* @brief remove the data from the opengl context.
|
* @brief remove the data from the opengl context.
|
||||||
*/
|
*/
|
||||||
|
@ -68,8 +68,9 @@ bool gale::Resource::isTypeCompatible(const std::string& _type) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void gale::Resource::updateContext() {
|
bool gale::Resource::updateContext() {
|
||||||
GALE_DEBUG("Not set for : [" << getId() << "]" << getName() << " loaded " << shared_from_this().use_count() << " time(s)");
|
GALE_DEBUG("Not set for : [" << getId() << "]" << getName() << " loaded " << shared_from_this().use_count() << " time(s)");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::Resource::removeContext() {
|
void gale::Resource::removeContext() {
|
||||||
|
@ -189,8 +189,10 @@ namespace gale {
|
|||||||
/**
|
/**
|
||||||
* @brief Call when need to send data on the harware (openGL)
|
* @brief Call when need to send data on the harware (openGL)
|
||||||
* @note This is done asynchronously with the create of the Resource.
|
* @note This is done asynchronously with the create of the Resource.
|
||||||
|
* @return true The context is updated
|
||||||
|
* @return false The context is not updated
|
||||||
*/
|
*/
|
||||||
virtual void updateContext();
|
virtual bool updateContext();
|
||||||
/**
|
/**
|
||||||
* @brief The current OpenGl context is removing ==> remove yout own system data
|
* @brief The current OpenGl context is removing ==> remove yout own system data
|
||||||
*/
|
*/
|
||||||
|
@ -51,21 +51,25 @@ gale::resource::Shader::~Shader() {
|
|||||||
m_exist = false;
|
m_exist = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Shader::updateContext() {
|
bool gale::resource::Shader::updateContext() {
|
||||||
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex, std11::defer_lock);
|
||||||
|
if (lock.try_lock() == false) {
|
||||||
|
//Lock error ==> try later ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (m_exist == true) {
|
if (m_exist == true) {
|
||||||
// Do nothing == > too dangerous ...
|
// Do nothing == > too dangerous ...
|
||||||
} else {
|
} else {
|
||||||
// create the Shader
|
// create the Shader
|
||||||
if (m_fileData.size() == 0) {
|
if (m_fileData.size() == 0) {
|
||||||
m_shader = -1;
|
m_shader = -1;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
GALE_INFO("Create Shader : '" << m_name << "'");
|
GALE_INFO("Create Shader : '" << m_name << "'");
|
||||||
m_shader = gale::openGL::shader::create(m_type);
|
m_shader = gale::openGL::shader::create(m_type);
|
||||||
if (m_shader < 0) {
|
if (m_shader < 0) {
|
||||||
GALE_CRITICAL(" can not load shader");
|
GALE_CRITICAL(" can not load shader");
|
||||||
return;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
GALE_INFO("Compile shader with GLID=" << m_shader);
|
GALE_INFO("Compile shader with GLID=" << m_shader);
|
||||||
bool ret = gale::openGL::shader::compile(m_shader, m_fileData);
|
bool ret = gale::openGL::shader::compile(m_shader, m_fileData);
|
||||||
@ -75,11 +79,12 @@ void gale::resource::Shader::updateContext() {
|
|||||||
tmpShaderType = "VERTEX SHADER";
|
tmpShaderType = "VERTEX SHADER";
|
||||||
}
|
}
|
||||||
GALE_CRITICAL("Could not compile \"" << tmpShaderType << "\" name='" << m_name << "'");
|
GALE_CRITICAL("Could not compile \"" << tmpShaderType << "\" name='" << m_name << "'");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_exist = true;
|
m_exist = true;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Shader::removeContext() {
|
void gale::resource::Shader::removeContext() {
|
||||||
|
@ -56,7 +56,7 @@ namespace gale {
|
|||||||
/**
|
/**
|
||||||
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
||||||
*/
|
*/
|
||||||
void updateContext();
|
bool updateContext();
|
||||||
/**
|
/**
|
||||||
* @brief remove the data from the opengl context.
|
* @brief remove the data from the opengl context.
|
||||||
*/
|
*/
|
||||||
|
@ -56,8 +56,12 @@ gale::resource::Texture::~Texture() {
|
|||||||
removeContext();
|
removeContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Texture::updateContext() {
|
bool gale::resource::Texture::updateContext() {
|
||||||
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex, std11::defer_lock);
|
||||||
|
if (lock.try_lock() == false) {
|
||||||
|
//Lock error ==> try later ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (false == m_loaded) {
|
if (false == m_loaded) {
|
||||||
// Request a new texture at openGl :
|
// Request a new texture at openGl :
|
||||||
glGenTextures(1, &m_texId);
|
glGenTextures(1, &m_texId);
|
||||||
@ -86,6 +90,7 @@ void gale::resource::Texture::updateContext() {
|
|||||||
&((*m_data)[0]) );
|
&((*m_data)[0]) );
|
||||||
// now the data is loaded
|
// now the data is loaded
|
||||||
m_loaded = true;
|
m_loaded = true;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::Texture::removeContext() {
|
void gale::resource::Texture::removeContext() {
|
||||||
|
@ -33,7 +33,7 @@ namespace gale {
|
|||||||
bool m_loaded; //!< internal state of the openGl system.
|
bool m_loaded; //!< internal state of the openGl system.
|
||||||
// Gale internal API:
|
// Gale internal API:
|
||||||
public:
|
public:
|
||||||
virtual void updateContext();
|
virtual bool updateContext();
|
||||||
virtual void removeContext();
|
virtual void removeContext();
|
||||||
virtual void removeContextToLate();
|
virtual void removeContextToLate();
|
||||||
// middleware interface:
|
// middleware interface:
|
||||||
|
@ -38,8 +38,12 @@ void gale::resource::VirtualBufferObject::retreiveData() {
|
|||||||
GALE_ERROR("TODO ... ");
|
GALE_ERROR("TODO ... ");
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::VirtualBufferObject::updateContext() {
|
bool gale::resource::VirtualBufferObject::updateContext() {
|
||||||
std11::unique_lock<std11::recursive_mutex> lock(m_mutex);
|
std11::unique_lock<std11::recursive_mutex> lock(m_mutex, std11::defer_lock);
|
||||||
|
if (lock.try_lock() == false) {
|
||||||
|
//Lock error ==> try later ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (false == m_exist) {
|
if (false == m_exist) {
|
||||||
// Allocate and assign a Vertex Array Object to our handle
|
// Allocate and assign a Vertex Array Object to our handle
|
||||||
gale::openGL::genBuffers(m_vbo);
|
gale::openGL::genBuffers(m_vbo);
|
||||||
@ -57,6 +61,7 @@ void gale::resource::VirtualBufferObject::updateContext() {
|
|||||||
}
|
}
|
||||||
// un-bind it to permet to have no erreor in the next display ...
|
// un-bind it to permet to have no erreor in the next display ...
|
||||||
gale::openGL::unbindBuffer();
|
gale::openGL::unbindBuffer();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gale::resource::VirtualBufferObject::removeContext() {
|
void gale::resource::VirtualBufferObject::removeContext() {
|
||||||
|
@ -107,7 +107,7 @@ namespace gale {
|
|||||||
/**
|
/**
|
||||||
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
* @brief This load/reload the data in the opengl context, needed when removed previously.
|
||||||
*/
|
*/
|
||||||
void updateContext();
|
bool updateContext();
|
||||||
/**
|
/**
|
||||||
* @brief remove the data from the opengl context.
|
* @brief remove the data from the opengl context.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user