/// Installs the @p callback and remembers the previous LogSink(Callback callback) : _callback(callback) , _prev_callback(nullptr) , _prev_context(nullptr) { // get the previous callback GLDEBUGPROC _tmp_callback = nullptr; void** _tmp_ptr=reinterpret_cast<void**>(&_tmp_callback); OGLPLUS_GLFUNC(GetPointerv)( GL_DEBUG_CALLBACK_FUNCTION, _tmp_ptr ); OGLPLUS_IGNORE(GetPointerv); _prev_callback = _tmp_callback; //get the previous context OGLPLUS_GLFUNC(GetPointerv)( GL_DEBUG_CALLBACK_USER_PARAM, &_prev_context ); OGLPLUS_IGNORE(GetPointerv); OGLPLUS_GLFUNC(DebugMessageCallback)( GLDEBUGPROC(&LogSink::_gl_debug_proc), static_cast<void*>(this) ); OGLPLUS_VERIFY_SIMPLE(DebugMessageCallback); }
/** * Initialize the renderer * @param width Width of the window * @param height Height of the window * @return True if the renderer successfully init */ bool Renderer::Init(unsigned int pWidth, unsigned int pHeight, UiFunction* pUiFunctionPtr) { _uiFunctionPtr = pUiFunctionPtr; _width = pWidth; _height = pHeight; glbinding::Binding::initialize(); //Get context info Log("GL Info : "); Log(ToString(glGetString(GL_VENDOR))); Log(ToString(glGetString(GL_RENDERER))); Log(ToString(glGetString(GL_VERSION))); Log(ToString(glGetString(GL_SHADING_LANGUAGE_VERSION))); debugProc = GLDEBUGPROC(&DebugProc); glDebugMessageCallback(debugProc, nullptr); glCullFace(GL_BACK); glFrontFace(GL_CCW); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glClearColor(0, 0, 0, 1); glClearDepthf(1.0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); glGenVertexArrays(1, &_baseVAO); SetupPrograms(); SetupBuffers(); ///TODO : Check for ATI memory info std::set<GLextension> extensions = ContextInfo::extensions(); if (extensions.find(GLextension::GL_NVX_gpu_memory_info) != extensions.end()) { GLint memory = 0; glGetIntegerv(GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX, &memory); Log("Dedicated video memory, total size(in kb) of the GPU memory : " + ToString(memory)); glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &memory); Log("Total available memory, total size(in Kb) of the memory available for allocations : " + ToString(memory)); glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &memory); Log("Current available dedicated video memory(in kb), currently unused GPU memory : " + ToString(memory)); glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX, &memory); Log("Count of total evictions seen by system : " + ToString(memory)); glGetIntegerv(GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX, &memory); Log("Size of total video memory evicted(in kb) : " + ToString(memory)); } CheckGLError(); _uiPtr = nullptr; _menuPtr = nullptr; return true; }