Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 45 additions & 2 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -1,2 +1,45 @@
BasedOnStyle: LLVM
AlignArrayOfStructures: Right
# https://clang.llvm.org/docs/ClangFormat.html
#
# Copyright 2013-2019, High Fidelity, Inc.
# Copyright 2022 Overte e.V.
# SPDX-License-Identifier: Apache-2.0

Language: Cpp
Standard: Cpp11
BasedOnStyle: "Chromium"
ColumnLimit: 128
IndentWidth: 4
UseTab: Never

BreakBeforeBraces: Custom
BraceWrapping:
AfterEnum: true
AfterClass: false
AfterControlStatement: false
AfterFunction: false
AfterNamespace: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
SplitEmptyFunction: false
SplitEmptyNamespace: true


AccessModifierOffset: -4
AllowShortFunctionsOnASingleLine: InlineOnly
BreakConstructorInitializers: AfterColon
BreakConstructorInitializersBeforeComma: false
IndentCaseLabels: true
ReflowComments: false
Cpp11BracedListStyle: false
ContinuationIndentWidth: 4
ConstructorInitializerAllOnOneLineOrOnePerLine: false
CompactNamespaces: true
SortIncludes: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements

PenaltyReturnTypeOnItsOwnLine: 1000
PenaltyBreakBeforeFirstCallParameter: 1000

237 changes: 114 additions & 123 deletions examples/Basic/OpenGLWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,142 +5,133 @@
using namespace PolyVox;
using namespace std;

OpenGLWidget::OpenGLWidget(QWidget *parent)
: QGLWidget(parent), m_xRotation(0), m_yRotation(0) {}

void OpenGLWidget::setSurfaceMeshToRender(
const PolyVox::SurfaceMesh<PositionMaterialNormal> &surfaceMesh) {
// Convienient access to the vertices and indices
const vector<uint32_t> &vecIndices = surfaceMesh.getIndices();
const vector<PositionMaterialNormal> &vecVertices = surfaceMesh.getVertices();

// Build an OpenGL index buffer
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
const GLvoid *pIndices = static_cast<const GLvoid *>(&(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<const GLvoid *>(&(vecVertices[0]));
glBufferData(GL_ARRAY_BUFFER,
vecVertices.size() * sizeof(PositionMaterialNormal), pVertices,
GL_STATIC_DRAW);

m_uBeginIndex = 0;
m_uEndIndex = vecIndices.size();
OpenGLWidget::OpenGLWidget(QWidget* parent) : QGLWidget(parent), m_xRotation(0), m_yRotation(0) {
}

void OpenGLWidget::setSurfaceMeshToRender(const PolyVox::SurfaceMesh<PositionMaterialNormal>& surfaceMesh) {
// Convienient access to the vertices and indices
const vector<uint32_t>& vecIndices = surfaceMesh.getIndices();
const vector<PositionMaterialNormal>& vecVertices = surfaceMesh.getVertices();

// Build an OpenGL index buffer
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
const GLvoid* pIndices = static_cast<const GLvoid*>(&(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<const GLvoid*>(&(vecVertices[0]));
glBufferData(GL_ARRAY_BUFFER, vecVertices.size() * sizeof(PositionMaterialNormal), pVertices, GL_STATIC_DRAW);

m_uBeginIndex = 0;
m_uEndIndex = vecIndices.size();
}

void OpenGLWidget::initializeGL() {
// We need GLEW to access recent OpenGL functionality
std::cout << "Initialising GLEW...";
GLenum result = glewInit();
if (result == GLEW_OK) {
std::cout << "success" << std::endl;
} else {
/* Problem: glewInit failed, something is seriously wrong. */
std::cout << "failed" << std::endl;
std::cout << "Initialising GLEW failed with the following error: "
<< glewGetErrorString(result) << std::endl;
exit(EXIT_FAILURE);
}

// Print out some information about the OpenGL implementation.
std::cout << "OpenGL Implementation Details:" << std::endl;
if (glGetString(GL_VENDOR))
std::cout << "\tGL_VENDOR: " << glGetString(GL_VENDOR) << std::endl;
if (glGetString(GL_RENDERER))
std::cout << "\tGL_RENDERER: " << glGetString(GL_RENDERER) << std::endl;
if (glGetString(GL_VERSION))
std::cout << "\tGL_VERSION: " << glGetString(GL_VERSION) << std::endl;
if (glGetString(GL_SHADING_LANGUAGE_VERSION))
std::cout << "\tGL_SHADING_LANGUAGE_VERSION: "
<< glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;

// Check our version of OpenGL is recent enough.
// We need at least 1.5 for vertex buffer objects,
if (!GLEW_VERSION_1_5) {
std::cout << "Error: You need OpenGL version 1.5 to run this example."
<< std::endl;
exit(EXIT_FAILURE);
}

// 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);

// Anable 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);
// We need GLEW to access recent OpenGL functionality
std::cout << "Initialising GLEW...";
GLenum result = glewInit();
if (result == GLEW_OK) {
std::cout << "success" << std::endl;
} else {
/* Problem: glewInit failed, something is seriously wrong. */
std::cout << "failed" << std::endl;
std::cout << "Initialising GLEW failed with the following error: " << glewGetErrorString(result) << std::endl;
exit(EXIT_FAILURE);
}

// Print out some information about the OpenGL implementation.
std::cout << "OpenGL Implementation Details:" << std::endl;
if (glGetString(GL_VENDOR))
std::cout << "\tGL_VENDOR: " << glGetString(GL_VENDOR) << std::endl;
if (glGetString(GL_RENDERER))
std::cout << "\tGL_RENDERER: " << glGetString(GL_RENDERER) << std::endl;
if (glGetString(GL_VERSION))
std::cout << "\tGL_VERSION: " << glGetString(GL_VERSION) << std::endl;
if (glGetString(GL_SHADING_LANGUAGE_VERSION))
std::cout << "\tGL_SHADING_LANGUAGE_VERSION: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;

// Check our version of OpenGL is recent enough.
// We need at least 1.5 for vertex buffer objects,
if (!GLEW_VERSION_1_5) {
std::cout << "Error: You need OpenGL version 1.5 to run this example." << std::endl;
exit(EXIT_FAILURE);
}

// 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);

// Anable 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 = 32.0f; // Half the volume size
float aspect = static_cast<float>(width()) / static_cast<float>(height());
glOrtho(frustumSize * aspect, -frustumSize * aspect, frustumSize,
-frustumSize, 1.0, 1000);
// Setup the viewport
glViewport(0, 0, w, h);

// Set up the projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
float frustumSize = 32.0f; // Half the volume size
float aspect = static_cast<float>(width()) / static_cast<float>(height());
glOrtho(frustumSize * aspect, -frustumSize * aspect, frustumSize, -frustumSize, 1.0, 1000);
}

void OpenGLWidget::paintGL() {
// 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, -100.0f); // Centre volume and move back
glRotatef(-m_xRotation, 0.0f, 1.0f, 0.0f);
glRotatef(-m_yRotation, 1.0f, 0.0f, 0.0f);
glTranslatef(-32.0f, -32.0f, -32.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(PositionMaterialNormal), 0);
glNormalPointer(GL_FLOAT, sizeof(PositionMaterialNormal), (GLvoid *)12);

glDrawRangeElements(GL_TRIANGLES, m_uBeginIndex, m_uEndIndex - 1,
m_uEndIndex - m_uBeginIndex, GL_UNSIGNED_INT, 0);

GLenum errCode = glGetError();
if (errCode != GL_NO_ERROR) {
// What has replaced getErrorString() in the latest OpenGL?
std::cout << "OpenGL Error: " << errCode << std::endl;
}
// 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, -100.0f); // Centre volume and move back
glRotatef(-m_xRotation, 0.0f, 1.0f, 0.0f);
glRotatef(-m_yRotation, 1.0f, 0.0f, 0.0f);
glTranslatef(-32.0f, -32.0f, -32.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(PositionMaterialNormal), 0);
glNormalPointer(GL_FLOAT, sizeof(PositionMaterialNormal), (GLvoid*)12);

glDrawRangeElements(GL_TRIANGLES, m_uBeginIndex, m_uEndIndex - 1, m_uEndIndex - m_uBeginIndex, GL_UNSIGNED_INT, 0);

GLenum errCode = glGetError();
if (errCode != GL_NO_ERROR) {
// What has replaced getErrorString() in the latest OpenGL?
std::cout << "OpenGL Error: " << errCode << std::endl;
}
}

void OpenGLWidget::mousePressEvent(QMouseEvent *event) {
m_CurrentMousePos = event->pos();
m_LastFrameMousePos = m_CurrentMousePos;
void OpenGLWidget::mousePressEvent(QMouseEvent* event) {
m_CurrentMousePos = event->pos();
m_LastFrameMousePos = m_CurrentMousePos;

update();
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;
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();
update();
}
49 changes: 24 additions & 25 deletions examples/Basic/OpenGLWidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,36 +32,35 @@ distribution.

class OpenGLWidget : public QGLWidget {
public:
// Constructor
OpenGLWidget(QWidget *parent);
// Constructor
OpenGLWidget(QWidget* parent);

// Mouse handling
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
// Mouse handling
void mouseMoveEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);

// Convert a SrfaceMesh to OpenGL index/vertex buffers
void setSurfaceMeshToRender(
const PolyVox::SurfaceMesh<PolyVox::PositionMaterialNormal> &surfaceMesh);
// Convert a SrfaceMesh to OpenGL index/vertex buffers
void setSurfaceMeshToRender(const PolyVox::SurfaceMesh<PolyVox::PositionMaterialNormal>& surfaceMesh);

protected:
// Qt OpenGL functions
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
// 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;
// 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__
#endif //__BasicExample_OpenGLWidget_H__
Loading