Get callbacks to work with Scene class
This commit is contained in:
parent
dcc610b245
commit
c8e19a6d12
|
@ -1,10 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <iostream>
|
||||
|
||||
#include "scene.h"
|
||||
|
||||
namespace Callbacks
|
||||
{
|
||||
void Register(GLFWwindow* window);
|
||||
extern Scene* scene_;
|
||||
|
||||
void Register(GLFWwindow* window, Scene* scene);
|
||||
|
||||
void Keyboard(GLFWwindow* window, int key, int scancode, int action, int mods);
|
||||
void MouseCursor(GLFWwindow* window, double x, double y);
|
||||
|
|
|
@ -1,10 +1,16 @@
|
|||
#include "callbacks.h"
|
||||
#include "platform_utils.h"
|
||||
#include "scene.h"
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
void Callbacks::Register(GLFWwindow* window)
|
||||
#include "callbacks.h"
|
||||
//#include "platform_utils.h"
|
||||
|
||||
namespace Callbacks {
|
||||
Scene* scene_ = nullptr;
|
||||
};
|
||||
|
||||
void Callbacks::Register(GLFWwindow* window, Scene* scene)
|
||||
{
|
||||
scene_ = scene;
|
||||
|
||||
glfwSetKeyCallback(window, Keyboard);
|
||||
glfwSetCursorPosCallback(window, MouseCursor);
|
||||
glfwSetMouseButtonCallback(window, MouseButton);
|
||||
|
@ -22,9 +28,10 @@ void Callbacks::Keyboard(GLFWwindow* window, int key, int scancode, int action,
|
|||
{
|
||||
case 'r':
|
||||
case 'R':
|
||||
//Scene::ReloadShader();
|
||||
if (scene_) {
|
||||
scene_->ReloadShader();
|
||||
}
|
||||
break;
|
||||
|
||||
case GLFW_KEY_ESCAPE:
|
||||
glfwSetWindowShouldClose(window, GLFW_TRUE);
|
||||
break;
|
||||
|
|
|
@ -128,6 +128,7 @@ int main() {
|
|||
if (!InitializeGlew()) return -1;
|
||||
|
||||
Scene scene(kInitWindowWidth, kInitWindowHeight);
|
||||
Callbacks::Register(window, &scene);
|
||||
scene.Init();
|
||||
InitializeImGui(window);
|
||||
|
||||
|
|
|
@ -128,7 +128,7 @@ void Scene::GenerateGrid(int divisions, std::vector<Vertex>& verts, std::vector<
|
|||
|
||||
// Currently creates a test triangle and initializes its buffers
|
||||
void Scene::InitBuffers() {
|
||||
int divisions = 1 + (tessellationFactor / 64); // Number of divisions along one axis of the grid
|
||||
int divisions = 16; // Number of divisions along one axis of the grid
|
||||
GenerateGrid(divisions, vertices, indices);
|
||||
|
||||
// Create and bind VAO, VBO, and EBO, and pass the data to OpenGL
|
||||
|
@ -189,20 +189,24 @@ void Scene::InitQuadBuffers() {
|
|||
|
||||
// Allows for runtime shader updates
|
||||
void Scene::ReloadShader() {
|
||||
GLuint new_shader = InitShader(kVertexShaderPath.c_str(), kTessellationCtrlPath.c_str(), kTessellationEvalPath.c_str(), kFragmentShaderPath.c_str());
|
||||
if (new_shader == -1) {
|
||||
GLuint geo_shader = InitShader(kVertexShaderPath.c_str(), kTessellationCtrlPath.c_str(), kTessellationEvalPath.c_str(), kFragmentShaderPath.c_str());
|
||||
GLuint lht_shader = InitShader(kQuadVertexPath.c_str(), kQuadFragmentPath.c_str());
|
||||
if (geo_shader == -1 || lht_shader == -1) {
|
||||
DEBUG_BREAK();
|
||||
glClearColor(1.0f, 0.0f, 1.0f, 0.0f);
|
||||
} else {
|
||||
glClearColor(0.35f, 0.35f, 0.35f, 0.0f);
|
||||
if (shader_program_ != -1) {
|
||||
if (shader_program_ != -1 && quad_shader_program_ != -1) {
|
||||
glDeleteProgram(shader_program_);
|
||||
glDeleteProgram(quad_shader_program_);
|
||||
}
|
||||
shader_program_ = new_shader;
|
||||
shader_program_ = geo_shader;
|
||||
quad_shader_program_ = lht_shader;
|
||||
}
|
||||
}
|
||||
|
||||
void Scene::Display(GLFWwindow* window) {
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
fbo_.Bind();
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
|
@ -210,7 +214,7 @@ void Scene::Display(GLFWwindow* window) {
|
|||
|
||||
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
|
||||
view_matrix_ = glm::lookAt(glm::vec3(0.0f, 1.4f, -1.4f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
|
||||
view_matrix_ = glm::lookAt(glm::vec3(0.0f, 1.4f, 1.4f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
|
||||
Uniforms::SceneData.PV = projection_matrix_ * view_matrix_; // Projection-View matrix
|
||||
Uniforms::BufferSceneData();
|
||||
|
||||
|
|
Loading…
Reference in New Issue