From e80c88a5ec2207fac256773870fc6c52120cd4f9 Mon Sep 17 00:00:00 2001 From: David Williams Date: Sun, 25 May 2014 21:03:52 +0200 Subject: [PATCH] Paging example now uses the new example OpenGLWidget. --- examples/Paging/CMakeLists.txt | 2 +- examples/Paging/OpenGLWidget.cpp | 135 ------------------------------- examples/Paging/OpenGLWidget.h | 68 ---------------- examples/Paging/main.cpp | 2 +- 4 files changed, 2 insertions(+), 205 deletions(-) delete mode 100644 examples/Paging/OpenGLWidget.cpp delete mode 100644 examples/Paging/OpenGLWidget.h diff --git a/examples/Paging/CMakeLists.txt b/examples/Paging/CMakeLists.txt index e8020b2d..aa9b2899 100644 --- a/examples/Paging/CMakeLists.txt +++ b/examples/Paging/CMakeLists.txt @@ -26,7 +26,7 @@ PROJECT(PagingExample) #Projects source files SET(SRC_FILES main.cpp - OpenGLWidget.cpp + ../common/OpenGLWidget.cpp Perlin.cpp ) diff --git a/examples/Paging/OpenGLWidget.cpp b/examples/Paging/OpenGLWidget.cpp deleted file mode 100644 index fa2aa7be..00000000 --- a/examples/Paging/OpenGLWidget.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include "OpenGLWidget.h" - -#include - -using namespace PolyVox; -using namespace std; - -OpenGLWidget::OpenGLWidget(QWidget *parent) - :QGLWidget(parent) - ,m_uBeginIndex(0) - ,m_uEndIndex(0) - ,noOfIndices(0) - ,m_xRotation(0) - ,m_yRotation(0) -{ -} - -void OpenGLWidget::setMeshToRender(const PolyVox::Mesh >& surfaceMesh) -{ - if((surfaceMesh.getNoOfIndices() == 0) || (surfaceMesh.getNoOfVertices() == 0)) - { - //We don't have a valid mesh - return; - } - - //Convienient access to the vertices and indices - const vector& vecIndices = surfaceMesh.getIndices(); - const vector >& vecVertices = surfaceMesh.getVertices(); - - //Build an OpenGL index buffer - glGenBuffers(1, &indexBuffer); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); - const GLvoid* pIndices = static_cast(&(vecIndices[0])); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, vecIndices.size() * sizeof(uint32_t), pIndices, GL_STATIC_DRAW); - - //Build an OpenGL vertex buffer - glGenBuffers(1, &vertexBuffer); - glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); - const GLvoid* pVertices = static_cast(&(vecVertices[0])); - glBufferData(GL_ARRAY_BUFFER, vecVertices.size() * sizeof(CubicVertex), pVertices, GL_STATIC_DRAW); - - m_uBeginIndex = 0; - m_uEndIndex = vecIndices.size(); - noOfIndices = surfaceMesh.getNoOfIndices(); -} - -void OpenGLWidget::initializeGL() -{ - //We need GLEW to access recent OpenGL functionality - GLenum err = glewInit(); - if (GLEW_OK != err) - { - /* Problem: glewInit failed, something is seriously wrong. */ - std::cout << "GLEW Error: " << glewGetErrorString(err) << std::endl; - } - - //Set up the clear colour - glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glClearDepth(1.0f); - - //Enable the depth buffer - glEnable(GL_DEPTH_TEST); - glDepthFunc(GL_LEQUAL); - - //Enable smooth lighting - //glEnable(GL_LIGHTING); - //glEnable(GL_LIGHT0); - //glShadeModel(GL_SMOOTH); - - //We'll be rendering with index/vertex arrays - glEnableClientState(GL_VERTEX_ARRAY); - //glEnableClientState(GL_NORMAL_ARRAY); -} - -void OpenGLWidget::resizeGL(int w, int h) -{ - //Setup the viewport - glViewport(0, 0, w, h); - - //Set up the projection matrix - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - float frustumSize = 128.0f * 1.7f; //Half the volume diagonal - float aspect = static_cast(width()) / static_cast(height()); - glOrtho(frustumSize*aspect, -frustumSize*aspect, frustumSize, -frustumSize, 10.0, 10000); -} - -void OpenGLWidget::paintGL() -{ - if(noOfIndices == 0) - { - //Nothing to render - return; - } - - //Clear the screen - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - //Set up the viewing transformation - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0f,0.0f,-5000.0f); //Centre volume and move back - glRotatef(m_xRotation, 1.0f, 0.0f, 0.0f); - glRotatef(m_yRotation, 0.0f, 1.0f, 0.0f); - glTranslatef(-128.0f,-128.0f,-128.0f); //Centre volume and move back - - //Bind the index buffer - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer); - - //Bind the vertex buffer - glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer); - glVertexPointer(3, GL_FLOAT, sizeof(CubicVertex), 0); - //glNormalPointer(GL_FLOAT, sizeof(CubicVertex), (GLvoid*)12); - - glDrawRangeElements(GL_TRIANGLES, m_uBeginIndex, m_uEndIndex-1, m_uEndIndex - m_uBeginIndex, GL_UNSIGNED_INT, 0); -} - -void OpenGLWidget::mousePressEvent(QMouseEvent* event) -{ - m_CurrentMousePos = event->pos(); - m_LastFrameMousePos = m_CurrentMousePos; - - update(); -} - -void OpenGLWidget::mouseMoveEvent(QMouseEvent* event) -{ - m_CurrentMousePos = event->pos(); - QPoint diff = m_CurrentMousePos - m_LastFrameMousePos; - m_xRotation += diff.x(); - m_yRotation += diff.y(); - m_LastFrameMousePos = m_CurrentMousePos; - - update(); -} diff --git a/examples/Paging/OpenGLWidget.h b/examples/Paging/OpenGLWidget.h deleted file mode 100644 index 63afbb97..00000000 --- a/examples/Paging/OpenGLWidget.h +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* -Copyright (c) 2005-2009 David Williams - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not -claim that you wrote the original software. If you use this software -in a product, an acknowledgment in the product documentation would be -appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be -misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*******************************************************************************/ - -#ifndef __BasicExample_OpenGLWidget_H__ -#define __BasicExample_OpenGLWidget_H__ - -#include "PolyVoxCore/MaterialDensityPair.h" -#include "PolyVoxCore/Mesh.h" - -#include "glew/glew.h" - -#include - -class OpenGLWidget : public QGLWidget -{ -public: - //Constructor - OpenGLWidget(QWidget *parent); - - //Mouse handling - void mouseMoveEvent(QMouseEvent* event); - void mousePressEvent(QMouseEvent* event); - - //Convert a SrfaceMesh to OpenGL index/vertex buffers - void setMeshToRender(const PolyVox::Mesh >& surfaceMesh); - -protected: - //Qt OpenGL functions - void initializeGL(); - void resizeGL(int w, int h); - void paintGL(); - -private: - //Index/vertex buffer data - GLuint m_uBeginIndex; - GLuint m_uEndIndex; - GLuint noOfIndices; - GLuint indexBuffer; - GLuint vertexBuffer; - - //Mouse data - QPoint m_LastFrameMousePos; - QPoint m_CurrentMousePos; - int m_xRotation; - int m_yRotation; -}; - -#endif //__BasicExample_OpenGLWidget_H__ diff --git a/examples/Paging/main.cpp b/examples/Paging/main.cpp index 77c64d16..bc4fa222 100644 --- a/examples/Paging/main.cpp +++ b/examples/Paging/main.cpp @@ -190,7 +190,7 @@ int main(int argc, char *argv[]) std::cout << "#vertices: " << mesh.getNoOfVertices() << std::endl; //Pass the surface to the OpenGL window - openGLWidget.setMeshToRender(mesh); + openGLWidget.addMesh(mesh); //Run the message pump. return app.exec();