В настоящее время я переключаю свой графический инструментарий на использование VAO и VBO вместо устаревших функций. Мне нужен способ убедиться, что после запуска пользовательской программы, и даже если она выйдет из строя, она все равно будет очищена до остановки выполнения. Мне также нужно распечатать трассировку, иначе конечный пользователь не сможет увидеть, что пошло не так с их кодом - или моим.
Вот общий обзор того, как работает мой инструментарий: Конечный разработчик создает приложение PyQt5 с QOpenGLWidget в нем. Они импортируют шейдер и любые классы фигур, которые им нужны, из файла shaderProgram, а затем создают экземпляр шейдера. Если они хотят добавить форму к сцене, они просто создают экземпляр объекта формы, а затем вызывают функцию addShape шейдера с новой формой. Это разработано, чтобы быть максимально простым в использовании, но должно предложить множество функций, когда это будет сделано.
test.py:
from PyQt5.QtWidgets import QApplication, QMainWindow, QOpenGLWidget
from shaderProgram import shader, cube
import sys
def run():
app = QApplication([])
window = mainWindow()
window.show()
sys.exit(app.exec_())
class mainWindow(QMainWindow):
def __init__(self):
super(mainWindow, self).__init__()
self.setGeometry(0, 0, 500, 500)
self.openGLWidget = QOpenGLWidget(self)
self.shader = shader(self, self.openGLWidget)
self.shader.resize(500, 500)
self.openGLWidget.setGeometry(0, 0, 500, 500)
self.cube1 = cube((0, 0, 0))
self.cube2 = cube((1, 0, 0))
self.cube3 = cube((0, 0, 1))
self.shader.addShapes(self.cube1, self.cube2, self.cube3)
self.shader.navigate(vVal = -45)
self.shader.update()
if __name__ == '__main__':
run()
блок-схема shaderProgram.py:
import stuff
class shader():
def __init__():
def addShapes():
def update():
def resize():
def navigate():
def initGL():
def paintGL():
class shape():
class shape():
#...
Репозиторий GitHub: https://github.com/AwesomeCronk/pyGPU - примечание: я еще не начал внедрять буферы, потому что я не хочу тестировать его без предварительного создания системы безопасности / очистки, но этот GitHub На данный момент репо имеет весь исходный код и показывает структуру рабочего процесса.
Без изменения способа, которым конечный разработчик пишет свой код, как я могу убедиться, что VAO, VBO и пользовательские шейдеры очищены и удаляется, если есть cra * sh?