58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*##############################################################################
 | |
| ## Author: Shaun Reed                                                         ##
 | |
| ## Legal: All Content (c) 2023 Shaun Reed, all rights reserved                ##
 | |
| ## About: Example Qtk widget                                                  ##
 | |
| ##                                                                            ##
 | |
| ## Contact: shaunrd0@gmail.com  | URL: www.shaunreed.com | GitHub: shaunrd0   ##
 | |
| ##############################################################################*/
 | |
| 
 | |
| #include <qtk/scene.h>
 | |
| 
 | |
| #include "examplewidget.h"
 | |
| 
 | |
| ExampleWidget::ExampleWidget(QWidget * parent) :
 | |
|     QOpenGLWidget(parent), mScene(new ExampleScene(new Qtk::SceneEmpty)) {
 | |
|   // NOTE: The decorator pattern is used to save / load scenes in Qtk currently.
 | |
|   // The initializer above sets mScene to the concrete decorator ExampleScene.
 | |
|   // Qtk::SceneEmpty provides an empty scene as the concrete component.
 | |
|   // ExampleScene is defined in client source, deriving Qtk::SceneInterface.
 | |
| 
 | |
|   QSurfaceFormat format;
 | |
|   format.setRenderableType(QSurfaceFormat::OpenGL);
 | |
|   format.setProfile(QSurfaceFormat::CoreProfile);
 | |
|   format.setVersion(4, 6);
 | |
|   format.setSamples(4);
 | |
|   format.setDepthBufferSize(16);
 | |
|   setFormat(format);
 | |
|   setFocusPolicy(Qt::ClickFocus);
 | |
| }
 | |
| 
 | |
| void ExampleWidget::initializeGL() {
 | |
|   initializeOpenGLFunctions();
 | |
|   connect(this, SIGNAL(frameSwapped()), this, SLOT(update()));
 | |
|   glEnable(GL_MULTISAMPLE);
 | |
|   glEnable(GL_DEPTH_TEST);
 | |
|   glDepthMask(GL_TRUE);
 | |
|   glDepthFunc(GL_LEQUAL);
 | |
|   glDepthRange(0.1f, 1.0f);
 | |
|   glClearDepth(1.0f);
 | |
|   glClearColor(0.0f, 0.25f, 0.0f, 0.0f);
 | |
|   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 | |
| }
 | |
| 
 | |
| void ExampleWidget::resizeGL(int width, int height) {
 | |
|   Qtk::Scene::getProjectionMatrix().setToIdentity();
 | |
|   Qtk::Scene::getProjectionMatrix().perspective(
 | |
|       45.0f, float(width) / float(height), 0.1f, 1000.0f);
 | |
| }
 | |
| 
 | |
| void ExampleWidget::paintGL() {
 | |
|   glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
 | |
|   mScene->draw();
 | |
| }
 | |
| 
 | |
| void ExampleWidget::update() {
 | |
|   mScene->update();
 | |
|   QWidget::update();
 | |
| }
 |