Как я могу убедиться, что моя программа очищается в случае сбоя? - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я переключаю свой графический инструментарий на использование 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?

...