GLPresenter::GLPresenter(DeckLinkCapture &capture, int w, int h, int hz) : data_size(w*h*capture.getBytesPerPixel()), capture(capture), running(true), fullscreen(false), useVsync(false), rgbFull(false), texId(0), displayList(0), initialConvert(NULL), buffer(NULL), buffer2(NULL), reqW(w), reqH(h), reqHz(hz), captureBufferW(reqW / (4 / capture.getBytesPerPixel())), frameIndex(0), drawnFrameIndex(0), aspect(16.0/9.0), oneToNScaleFactor(-1.0), frameProcTimes(300) { self = this; sprintf(prepend, "#version 410 compatibility \n#define FRAME_WIDTH %d \n#define FRAME_HEIGHT %d \n", reqW, reqH); RT_ASSERT(glfwInit() == GL_TRUE, "Failed to initalize GLFW."); RT_ASSERT(glfwOpenWindow(w, h, 0, 0, 0, 0, 0, 0, GLFW_WINDOW) == GL_TRUE, "Failed to open GLFW window."); string title("PtBi "); title += VER_STRING; glfwSetWindowTitle(title.c_str()); glfwSetWindowPos(10, 10); dataPointers[0] = malloc(data_size); dataPointers[1] = malloc(data_size); glewInit(); checkExtensions(); ilInit(); glfwDisable(GLFW_AUTO_POLL_EVENTS); glfwSwapInterval(0); glfwSetWindowCloseCallback(closeCallback); glfwSetWindowSizeCallback(resizeCallback); glfwSetMousePosCallback(mousePosCallback); glfwSetKeyCallback(keyCallback); hdc = wglGetCurrentDC(); hrc = wglGetCurrentContext(); initGL(); switch(capture.getPixelFormat()) { case CapturePixelFormat::YUV: initialConvert = new GLFragmentProgram("shaders/uyvy_to_rgb_smooth.glsl", getShaderPrependString()); break; case CapturePixelFormat::ARGB8: initialConvert = new GLFragmentProgram("shaders/argb_input.glsl", getShaderPrependString()); break; case CapturePixelFormat::BGRA8: initialConvert = new GLFragmentProgram("shaders/bgra_input.glsl", getShaderPrependString()); break; default: RT_ASSERT(false, "Unsupported pixel type."); } buffer = new GLRenderTexture(getW(), getH(), GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); buffer->setFilterMode(GL_LINEAR); buffer2 = new GLRenderTexture(getW(), getH(), GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE); buffer2->setFilterMode(GL_LINEAR); scalingManager = new ScalingManager(*this); aaManager = new AAManager(*this); ipManager = new IPManager(*this); keyBinding = new KeyBinding(this); capture.registerDisplayListener(this); hwnd = GetForegroundWindow(); RT_GL_ASSERT("Error during GL initialization."); reshape(reqW, reqH); graphicsReportText = std::make_shared<StaticText>("", 25.0f,440.0f); Console::get().add(graphicsReportText); }