diff -r 918b6c0f8b5b -r ed9685f44ab3 src/gl/compiler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gl/compiler.h Sat Dec 14 22:36:06 2019 +0200 @@ -0,0 +1,62 @@ +/* + * LDForge: LDraw parts authoring CAD + * Copyright (C) 2013 - 2018 Teemu Piippo + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once +#include "main.h" +#include "gl/partrenderer.h" +#include "gl/common.h" +#include "types/boundingbox.h" +#include +#include + +namespace gl +{ + class Compiler; + class Renderer; +} + +/* + * Compiles LDObjects into polygons for the GLRenderer to draw. + */ +class gl::Compiler : public QObject, protected QOpenGLFunctions +{ + Q_OBJECT +public: + Compiler(Renderer* renderer); + ~Compiler(); + void initialize(); + Point3D modelCenter(); + void prepareVBO (int vbonum); + GLuint vbo (int vbonum) const; + int vboSize (int vbonum) const; + static int vboNumber (VboClass surface, VboSubclass complement); +private: + struct ObjectVboData + { + QVector data[gl::numVbos]; + }; + QMap m_objectInfo; + QSet m_staged; // Objects that need to be compiled + GLuint m_vbo[gl::numVbos]; + bool m_vboChanged[gl::numVbos] = {true}; + bool needBoundingBoxRebuild = true; + int m_vboSizes[gl::numVbos] = {0}; +}; + +#define CHECK_GL_ERROR() { checkGLError(__FILE__, __LINE__); } +void checkGLError (QString file, int line);