Exemple #1
0
		/// 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;
	}