Here is the Render loop:
Code: Select all
int tris = verts.size() / 3;
cout << tris << endl;
GLuint VAOid = 0;
glGenVertexArrays(1, &VAOid);
glBindVertexArray(VAOid);
GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, verts.size() * sizeof(float), &verts[0], GL_STATIC_DRAW);
GLuint uvbuffer;
glGenBuffers(1, &uvbuffer);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(uvs), uvs, GL_STATIC_DRAW); // Opengl Binding shit.
static double lastTime = glfwGetTime();
float deltaTime;
numFrames = 0;
glfwSetInputMode(main_Window.window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
glfwSetCursorPos(main_Window.window, 0, 0);
while (!glfwWindowShouldClose(main_Window.window)) // Update loop for game
{
double currentTime = glfwGetTime();
deltaTime = float(currentTime - lastTime); // FPS Counter Code (It's actually a milisecond per frame counter.
numFrames++;
if (currentTime - lastTime >= 1.0){ // If last prinf() was more than 1 sec ago
// printf and reset timer
printf("%f ms/frame\n", 1000.0 / double(numFrames));
numFrames = 0;
lastTime += 1.0;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear buffers for rendering to.
if (renderEverything)
{
glBindTexture(GL_TEXTURE_2D, texture_ID);
glUseProgram(program);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
viewMatrix = player001.getViewMatrix();
otherCube.rotate(0.5f, vec3(0, 1, 0));
rotateModelMatrix = otherCube.getModelMatrix();
RMVP = projectionMatrix * viewMatrix * rotateModelMatrix;
glUniformMatrix4fv(MVP_id, 1, GL_FALSE, &RMVP[0][0]);
glDrawArrays(GL_TRIANGLES, tris - 36, tris);
viewMatrix = player001.getViewMatrix();
SMVP = projectionMatrix * viewMatrix * staticModelMatrix;
glUniformMatrix4fv(MVP_id, 1, GL_FALSE, &SMVP[0][0]);
glDrawArrays(GL_TRIANGLES, 0, 78);
glUseProgram(0); // Render code that uses a basic shader (program 0).
}
glUseProgram(0);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE0);
gui.update();
main_Window.update(); // Window buffers swapped and pushed to screen.
player001.update(); // Updates the player position. Should this be further hacked?
glfwPollEvents(); // Check for Keyboard and mouse events
if (glfwGetKey(main_Window.window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
{
glfwTerminate();
exit(0);
} // Exit Sequence
if (glfwGetKey(main_Window.window, GLFW_KEY_W) == GLFW_PRESS)
{
player001.moveForward(0.075f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_S) == GLFW_PRESS)
{
player001.moveForward(-0.075f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_A) == GLFW_PRESS)
{
player001.moveRight(0.075f); // Looks syupid but idk
}
if (glfwGetKey(main_Window.window, GLFW_KEY_D) == GLFW_PRESS)
{
player001.moveRight(-0.075f); // Still looks stupid
}
if (glfwGetKey(main_Window.window, GLFW_KEY_SPACE) == GLFW_PRESS)
{
player001.moveUp(0.075f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS)
{
player001.moveUp(-0.075f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_UP) == GLFW_PRESS)
{
player001.changePitch(-0.3f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_DOWN) == GLFW_PRESS)
{
player001.changePitch(0.3f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_LEFT) == GLFW_PRESS)
{
player001.changeYaw(0.3f);
}
if (glfwGetKey(main_Window.window, GLFW_KEY_RIGHT) == GLFW_PRESS)
{
player001.changeYaw(-0.3f);
}
double mouseX, mouseY;
glfwGetCursorPos(main_Window.window, &mouseX, &mouseY);
glfwSetCursorPos(main_Window.window, main_Window.width / 2, main_Window.height / 2);
double deltaX = main_Window.width / 2 - mouseX;
double deltaY = main_Window.height / 2 - mouseY;
player001.changeYaw((float) deltaX * sensitivity);
player001.changePitch((float) -deltaY * sensitivity); // Logic switches for movement and Controls -- Should logic go first?
if (glfwGetKey(main_Window.window, GLFW_KEY_G) == GLFW_PRESS)
{
gravityEnabled = !gravityEnabled;
}
if (gravityEnabled)
{
if (player001.getPosition().y < -0.9)
{
player001.setPosition(glm::vec3(player001.getPosition().x, -0.9f, player001.getPosition().z));
}
else if (player001.getPosition().y == -0.9f)
{
}
else
{
player001.moveUp(-0.01f);
}
} // Gravity controls (Much Hacking has occured here. Tread carefully.)
if (glfwGetKey(main_Window.window, GLFW_KEY_R))
{
renderEverything = !renderEverything;
}
}
And the GUI code.
Code: Select all
#include "GUI.h"
#include <CEGUI\CEGUI.h>
#include <CEGUI\RendererModules\OpenGL\GL3Renderer.h>
GUI::GUI()
{
CEGUI::OpenGL3Renderer& renderer = CEGUI::OpenGL3Renderer::bootstrapSystem();
CEGUI::WindowManager& windowManager = CEGUI::WindowManager::getSingleton();
CEGUI::Window* root = windowManager.createWindow("DefaultWindow", "root");
CEGUI::System::getSingleton().getDefaultGUIContext().setRootWindow(root);
CEGUI::DefaultResourceProvider* rp = static_cast<CEGUI::DefaultResourceProvider*>(CEGUI::System::getSingleton().getResourceProvider());
rp->setResourceGroupDirectory("imagesets", "res/gui/Taharez/imagesets");
rp->setResourceGroupDirectory("looknfeels", "res/gui/Taharez/looknfeel");
rp->setResourceGroupDirectory("schemes", "res/gui/Taharez/schemes");
rp->setResourceGroupDirectory("layouts", "res/gui/Taharez/layouts");
rp->setResourceGroupDirectory("fonts", "res/gui/Taharez/fonts");
rp->setResourceGroupDirectory("schemas", "res/gui/Taharez/xml_schemas");
CEGUI::ImageManager::setImagesetDefaultResourceGroup("imagesets");
CEGUI::Font::setDefaultResourceGroup("fonts");
CEGUI::Scheme::setDefaultResourceGroup("schemes");
CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");
CEGUI::WindowManager::setDefaultResourceGroup("layouts");
CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();
if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))
parser->setProperty("SchemaDefaultResourceGroup", "schemas");
CEGUI::ImageManager::getSingleton().loadImageset("TaharezLook.imageset", "imagesets");
CEGUI::SchemeManager::getSingleton().createFromFile("TaharezLook.scheme");
CEGUI::FrameWindow* secondWindow = static_cast<CEGUI::FrameWindow*>(windowManager.createWindow("TaharezLook/FrameWindow", "testWindow"));
root->addChild(secondWindow);
secondWindow->setText("Hello World");
}
void GUI::update()
{
CEGUI::System::getSingleton().renderAllGUIContexts();
}
GUI::~GUI()
{
}
Any thoughts or sugestions are welcome.
Oh, and Happy New Year.