void GLFWBackendRun(ICallbacks* pCallbacks) { if (!pCallbacks) { OGLDEV_ERROR("callbacks not specified"); exit(1); } glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glFrontFace(GL_CW); glCullFace(GL_BACK); glEnable(GL_CULL_FACE); if (sWithDepth) { glEnable(GL_DEPTH_TEST); } s_pCallbacks = pCallbacks; InitCallbacks(); while (!glfwWindowShouldClose(s_pWindow)) { s_pCallbacks->RenderSceneCB(); glfwSwapBuffers(s_pWindow); glfwPollEvents(); } }
OGLDEV_KEY GLUTKeyToOGLDEVKey(uint Key) { switch (Key) { case GLUT_KEY_F1: return OGLDEV_KEY_F1; case GLUT_KEY_F2: return OGLDEV_KEY_F2; case GLUT_KEY_F3: return OGLDEV_KEY_F3; case GLUT_KEY_F4: return OGLDEV_KEY_F4; case GLUT_KEY_F5: return OGLDEV_KEY_F5; case GLUT_KEY_F6: return OGLDEV_KEY_F6; case GLUT_KEY_F7: return OGLDEV_KEY_F7; case GLUT_KEY_F8: return OGLDEV_KEY_F8; case GLUT_KEY_F9: return OGLDEV_KEY_F9; case GLUT_KEY_F10: return OGLDEV_KEY_F10; case GLUT_KEY_F11: return OGLDEV_KEY_F11; case GLUT_KEY_F12: return OGLDEV_KEY_F12; case GLUT_KEY_LEFT: return OGLDEV_KEY_LEFT; case GLUT_KEY_UP: return OGLDEV_KEY_UP; case GLUT_KEY_RIGHT: return OGLDEV_KEY_RIGHT; case GLUT_KEY_DOWN: return OGLDEV_KEY_DOWN; case GLUT_KEY_PAGE_UP: return OGLDEV_KEY_PAGE_UP; case GLUT_KEY_PAGE_DOWN: return OGLDEV_KEY_PAGE_DOWN; case GLUT_KEY_HOME: return OGLDEV_KEY_HOME; case GLUT_KEY_END: return OGLDEV_KEY_END; case GLUT_KEY_INSERT: return OGLDEV_KEY_INSERT; case GLUT_KEY_DELETE: return OGLDEV_KEY_DELETE; default: OGLDEV_ERROR("Unimplemented GLUT key"); /*exit(1);*/ ///< this is a really crappy place to just exit. Rather ignore. break; } return OGLDEV_KEY_UNDEFINED; }
OGLDEV_KEY GLUTKeyToOGLDEVKey(uint Key) { switch (Key) { case GLUT_KEY_F1: return OGLDEV_KEY_F1; case GLUT_KEY_F2: return OGLDEV_KEY_F2; case GLUT_KEY_F3: return OGLDEV_KEY_F3; case GLUT_KEY_F4: return OGLDEV_KEY_F4; case GLUT_KEY_F5: return OGLDEV_KEY_F5; case GLUT_KEY_F6: return OGLDEV_KEY_F6; case GLUT_KEY_F7: return OGLDEV_KEY_F7; case GLUT_KEY_F8: return OGLDEV_KEY_F8; case GLUT_KEY_F9: return OGLDEV_KEY_F9; case GLUT_KEY_F10: return OGLDEV_KEY_F10; case GLUT_KEY_F11: return OGLDEV_KEY_F11; case GLUT_KEY_F12: return OGLDEV_KEY_F12; case GLUT_KEY_LEFT: return OGLDEV_KEY_LEFT; case GLUT_KEY_UP: return OGLDEV_KEY_UP; case GLUT_KEY_RIGHT: return OGLDEV_KEY_RIGHT; case GLUT_KEY_DOWN: return OGLDEV_KEY_DOWN; case GLUT_KEY_PAGE_UP: return OGLDEV_KEY_PAGE_UP; case GLUT_KEY_PAGE_DOWN: return OGLDEV_KEY_PAGE_DOWN; case GLUT_KEY_HOME: return OGLDEV_KEY_HOME; case GLUT_KEY_END: return OGLDEV_KEY_END; case GLUT_KEY_INSERT: return OGLDEV_KEY_INSERT; case GLUT_KEY_DELETE: return OGLDEV_KEY_DELETE; default: OGLDEV_ERROR("Unimplemented GLUT key"); exit(1); } return OGLDEV_KEY_UNDEFINED; }
bool GLFWBackendCreateWindow(uint Width, uint Height, bool isFullScreen, const char* pTitle) { GLFWmonitor* pMonitor = isFullScreen ? glfwGetPrimaryMonitor() : NULL; s_pWindow = glfwCreateWindow(Width, Height, pTitle, pMonitor, NULL); if (!s_pWindow) { OGLDEV_ERROR("error creating window"); exit(1); } glfwMakeContextCurrent(s_pWindow); // Must be done after glfw is initialized! glewExperimental = GL_TRUE; GLenum res = glewInit(); if (res != GLEW_OK) { OGLDEV_ERROR((const char*)glewGetErrorString(res)); exit(1); } return (s_pWindow != NULL); }
static OGLDEV_MOUSE GLUTMouseToOGLDEVMouse(uint Button) { switch (Button) { case GLUT_LEFT_BUTTON: return OGLDEV_MOUSE_BUTTON_LEFT; case GLUT_RIGHT_BUTTON: return OGLDEV_MOUSE_BUTTON_RIGHT; case GLUT_MIDDLE_BUTTON: return OGLDEV_MOUSE_BUTTON_MIDDLE; default: OGLDEV_ERROR("Unimplemented GLUT mouse button"); } return OGLDEV_MOUSE_UNDEFINED; }
static void KeyboardCB(unsigned char Key, int x, int y) { if ( ((Key >= '0') && (Key <= '9')) || ((Key >= 'A') && (Key <= 'Z')) || ((Key >= 'a') && (Key <= 'z')) ) { OGLDEV_KEY OgldevKey = (OGLDEV_KEY)Key; s_pCallbacks->KeyboardCB(OgldevKey); } else { OGLDEV_ERROR("Unimplemented GLUT key"); } }
void GLFWBackendInit(int argc, char** argv, bool WithDepth, bool WithStencil) { sWithDepth = WithDepth; sWithStencil = WithStencil; if (glfwInit() != 1) { OGLDEV_ERROR("Error initializing GLFW"); exit(1); } int Major, Minor, Rev; glfwGetVersion(&Major, &Minor, &Rev); printf("GLFW %d.%d.%d initialized\n", Major, Minor, Rev); glfwSetErrorCallback(GLFWErrorCallback); }
static OGLDEV_KEY GLFWKeyToOGLDEVKey(uint Key) { if (Key >= GLFW_KEY_SPACE && Key <= GLFW_KEY_RIGHT_BRACKET) { return (OGLDEV_KEY)Key; } switch (Key) { case GLFW_KEY_ESCAPE: return OGLDEV_KEY_ESCAPE; case GLFW_KEY_ENTER: return OGLDEV_KEY_ENTER; case GLFW_KEY_TAB: return OGLDEV_KEY_TAB; case GLFW_KEY_BACKSPACE: return OGLDEV_KEY_BACKSPACE; case GLFW_KEY_INSERT: return OGLDEV_KEY_INSERT; case GLFW_KEY_DELETE: return OGLDEV_KEY_DELETE; case GLFW_KEY_RIGHT: return OGLDEV_KEY_RIGHT; case GLFW_KEY_LEFT: return OGLDEV_KEY_LEFT; case GLFW_KEY_DOWN: return OGLDEV_KEY_DOWN; case GLFW_KEY_UP: return OGLDEV_KEY_UP; case GLFW_KEY_PAGE_UP: return OGLDEV_KEY_PAGE_UP; case GLFW_KEY_PAGE_DOWN: return OGLDEV_KEY_PAGE_DOWN; case GLFW_KEY_HOME: return OGLDEV_KEY_HOME; case GLFW_KEY_END: return OGLDEV_KEY_END; case GLFW_KEY_F1: return OGLDEV_KEY_F1; case GLFW_KEY_F2: return OGLDEV_KEY_F2; case GLFW_KEY_F3: return OGLDEV_KEY_F3; case GLFW_KEY_F4: return OGLDEV_KEY_F4; case GLFW_KEY_F5: return OGLDEV_KEY_F5; case GLFW_KEY_F6: return OGLDEV_KEY_F6; case GLFW_KEY_F7: return OGLDEV_KEY_F7; case GLFW_KEY_F8: return OGLDEV_KEY_F8; case GLFW_KEY_F9: return OGLDEV_KEY_F9; case GLFW_KEY_F10: return OGLDEV_KEY_F10; case GLFW_KEY_F11: return OGLDEV_KEY_F11; case GLFW_KEY_F12: return OGLDEV_KEY_F12; default: OGLDEV_ERROR("Unimplemented OGLDEV key"); } return OGLDEV_KEY_UNDEFINED; }
bool IOBuffer::Init(uint WindowWidth, uint WindowHeight, bool WithDepth, GLenum InternalType) { m_internalType = InternalType; GLenum Format, Type; switch (InternalType) { case GL_RGB32F: Format = GL_RGB; Type = GL_FLOAT; break; case GL_R32F: Format = GL_RED; Type = GL_FLOAT; break; case GL_NONE: break; default: OGLDEV_ERROR("Invalid internal type"); } // Create the FBO glGenFramebuffers(1, &m_fbo); glBindFramebuffer(GL_FRAMEBUFFER, m_fbo); // Create the textures if (InternalType != GL_NONE) { glGenTextures(1, &m_texture); glBindTexture(GL_TEXTURE_2D, m_texture); glTexImage2D(GL_TEXTURE_2D, 0, InternalType, WindowWidth, WindowHeight, 0, Format, Type, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_texture, 0); GLenum DrawBuffers[] = { GL_COLOR_ATTACHMENT0 }; glDrawBuffers(ARRAY_SIZE_IN_ELEMENTS(DrawBuffers), DrawBuffers); } // Create the depth buffer if (WithDepth) { glGenTextures(1, &m_depth); // depth glBindTexture(GL_TEXTURE_2D, m_depth); glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depth, 0); } GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (Status != GL_FRAMEBUFFER_COMPLETE) { printf("FB error, status: 0x%x\n", Status); return false; } // restore default FBO glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); return true; }
static int OgldevKeyToATBKey(OGLDEV_KEY OgldevKey) { if (OgldevKey >= OGLDEV_KEY_SPACE && OgldevKey <= OGLDEV_KEY_RIGHT_BRACKET) { return OgldevKey; } switch(OgldevKey) { case OGLDEV_KEY_BACKSPACE: return TW_KEY_BACKSPACE; case OGLDEV_KEY_TAB: return TW_KEY_TAB; // return TW_KEY_CLEAR; case OGLDEV_KEY_ENTER: return TW_KEY_RETURN; //return TW_KEY_PAUSE; case OGLDEV_KEY_ESCAPE: return TW_KEY_ESCAPE; case OGLDEV_KEY_DELETE: return TW_KEY_DELETE; case OGLDEV_KEY_UP: return TW_KEY_UP; case OGLDEV_KEY_DOWN: return TW_KEY_DOWN; case OGLDEV_KEY_RIGHT: return TW_KEY_RIGHT; case OGLDEV_KEY_LEFT: return TW_KEY_LEFT; case OGLDEV_KEY_INSERT: return TW_KEY_INSERT; case OGLDEV_KEY_HOME: return TW_KEY_HOME; case OGLDEV_KEY_END: return TW_KEY_END; case OGLDEV_KEY_PAGE_UP: return TW_KEY_PAGE_UP; case OGLDEV_KEY_PAGE_DOWN: return TW_KEY_PAGE_DOWN; case OGLDEV_KEY_F1: return TW_KEY_F1; case OGLDEV_KEY_F2: return TW_KEY_F2; case OGLDEV_KEY_F3: return TW_KEY_F3; case OGLDEV_KEY_F4: return TW_KEY_F4; case OGLDEV_KEY_F5: return TW_KEY_F5; case OGLDEV_KEY_F6: return TW_KEY_F6; case OGLDEV_KEY_F7: return TW_KEY_F7; case OGLDEV_KEY_F8: return TW_KEY_F8; case OGLDEV_KEY_F9: return TW_KEY_F9; case OGLDEV_KEY_F10: return TW_KEY_F10; case OGLDEV_KEY_F11: return TW_KEY_F11; case OGLDEV_KEY_F12: return TW_KEY_F12; default: OGLDEV_ERROR("Unimplemented OGLDEV to ATB key"); } return TW_KEY_LAST; }
bool Init() { // Vector3f Pos(0.0f, 23.0f, -5.0f); // Vector3f Target(-1.0f, 0.0f, 0.1f); Vector3f Pos(0.0f, 24.0f, -38.0f); Vector3f Target(0.0f, -0.5f, 1.0f); Vector3f Up(0.0, 1.0f, 0.0f); m_pGameCamera = new Camera(WINDOW_WIDTH, WINDOW_HEIGHT, Pos, Target, Up); if (!m_geomPassTech.Init()) { OGLDEV_ERROR("Error initializing the geometry pass technique\n"); return false; } if (!m_SSAOTech.Init()) { OGLDEV_ERROR("Error initializing the SSAO technique\n"); return false; } m_SSAOTech.Enable(); m_SSAOTech.SetSampleRadius(1.5f); Matrix4f PersProjTrans; PersProjTrans.InitPersProjTransform(m_persProjInfo); m_SSAOTech.SetProjMatrix(PersProjTrans); if (!m_lightingTech.Init()) { OGLDEV_ERROR("Error initializing the lighting technique\n"); return false; } m_lightingTech.Enable(); m_lightingTech.SetDirectionalLight(m_directionalLight); m_lightingTech.SetScreenSize(WINDOW_WIDTH, WINDOW_HEIGHT); m_lightingTech.SetShaderType(0); if (!m_blurTech.Init()) { OGLDEV_ERROR("Error initializing the blur technique\n"); return false; } //if (!m_mesh.LoadMesh("../Content/crytek_sponza/sponza.obj")) { if (!m_mesh.LoadMesh("../Content/jeep.obj")) { return false; } m_mesh.GetOrientation().m_scale = Vector3f(0.05f); m_mesh.GetOrientation().m_pos = Vector3f(0.0f, 0.0f, 0.0f); m_mesh.GetOrientation().m_rotation = Vector3f(0.0f, 180.0f, 0.0f); if (!m_quad.LoadMesh("../Content/quad.obj")) { return false; } if (!m_gBuffer.Init(WINDOW_WIDTH, WINDOW_HEIGHT, true, GL_RGB32F)) { return false; } if (!m_aoBuffer.Init(WINDOW_WIDTH, WINDOW_HEIGHT, false, GL_R32F)) { return false; } if (!m_blurBuffer.Init(WINDOW_WIDTH, WINDOW_HEIGHT, false, GL_R32F)) { return false; } #ifndef WIN32 if (!m_fontRenderer.InitFontRenderer()) { return false; } #endif return true; }