Я склонен обертывать объекты OpenGL в своих классах. В OpenGL существует концепция привязки, где вы связываете свой объект, делаете что-то с ним, а затем отвязываете его. Например, текстура:Автоматическое связывание в обертке объекта OpenGL
glBindTexture(GL_TEXTURE_2D, TextureColorbufferName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1000);
glBindTexture(GL_TEXTURE_2D, 0);
Обертывание это будет что-то вроде:
texture->bind();
texture->setParameter(...);
texture->setParameter(...);
texture->unBind();
Проблема здесь, является то, что я хочу, чтобы избежать привязки() и UNBIND() функции, а вместо этого просто быть в состоянии вызвать методы набора, и GLObject будет связан автоматически.
я мог бы просто сделать это в каждой реализации метода:
public void Texture::setParameter(...)
{
this.bind();
// do something
this.unBind();
}
Хотя тогда я должен сделать это для каждого добавленного метода! Есть ли лучший способ, поэтому он автоматически выполняется до и после добавления каждого метода?
Возможно возникновение проблем при наличии нескольких текстур, которые пользователь хочет установить последовательно. Поэтому TextureContext не должен устанавливать текстуру «0», а тот, который ранее использовался (получить с помощью соответствующего вызова glGet). – SigTerm
Я не профессиональный разработчик OpenGL, я попытался ответить на вопрос с более общей (C++-программирования) точки зрения. – Constantinius