15 * You should have received a copy of the GNU General Public License |
15 * You should have received a copy of the GNU General Public License |
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
17 */ |
17 */ |
18 |
18 |
19 #pragma once |
19 #pragma once |
|
20 #include "basicshaderprogram.h" |
20 #include "common.h" |
21 #include "common.h" |
21 |
22 |
22 class GridProgram : public QObject, protected QOpenGLFunctions |
23 class GridProgram : public AbstractBasicShaderProgram |
23 { |
24 { |
24 Q_OBJECT |
25 Q_OBJECT |
25 public: |
26 public: |
26 GridProgram(QObject* parent = nullptr); |
27 using AbstractBasicShaderProgram::AbstractBasicShaderProgram; |
27 GridProgram(const GridProgram&) = delete; |
|
28 GridProgram(GridProgram&&) = delete; |
|
29 ~GridProgram() = default; |
|
30 void initialize(); |
|
31 void setViewMatrix(const glm::mat4& newViewMatrix); |
|
32 void setProjectionMatrix(const glm::mat4& newProjectionMatrix); |
|
33 void setModelMatrix(const glm::mat4& newModelMatrix); |
|
34 void setGridMatrix(const glm::mat4& newGridMatrix); |
28 void setGridMatrix(const glm::mat4& newGridMatrix); |
35 void setGridColor(const QColor& newGridColor); |
29 void setGridColor(const QColor& newGridColor); |
36 void operator=(GridProgram) = delete; |
30 protected: |
37 void draw(); |
31 const char* vertexShaderSource() const override; |
38 void teardown(); |
32 const char* fragmentShaderSource() const override; |
|
33 const void* vertexData() const override; |
|
34 int vertexSize() const override; |
|
35 int vertexCount() const override; |
|
36 void setupVertexArrays() override; |
|
37 GLenum drawMode() const override; |
39 private: |
38 private: |
40 void setMatrix(const char* name, const glm::mat4& matrix); |
|
41 void checkForGLErrors(); |
|
42 bool isInitialized = false; |
|
43 QOpenGLBuffer buffer; |
|
44 QOpenGLShader vertexShader; |
|
45 QOpenGLShader fragmentShader; |
|
46 std::optional<gl::ShaderProgram> program{std::nullopt}; |
|
47 glm::vec4 gridColor = {1.0f, 1.0f, 1.0f, 0.75f}; |
39 glm::vec4 gridColor = {1.0f, 1.0f, 1.0f, 0.75f}; |
48 QOpenGLVertexArrayObject vertexArrayObject; |
|
49 }; |
40 }; |