예제 #1
0
void initialize() {
	
	if(!isEnabled()) {
		return;
	}
	
	bool have_debug = ARX_HAVE_GL_VER(4, 3) || ARX_HAVE_GL_EXT(KHR_debug);
	#if ARX_HAVE_EPOXY
	have_debug = have_debug || (epoxy_is_desktop_gl() && ARX_HAVE_GL_EXT(ARB_debug_output));
	#endif
	if(!have_debug) {
		LogWarning << "OpenGL debug output not available";
		return;
	}
	
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
	
	// GLEW versions before 1.11.0 define GLDEBUGPROC with a non-const user pointer
	#if !ARX_HAVE_GLEW || defined(GLEW_VERSION_4_5)
	glDebugMessageCallback(gldebug::callback, NULL);
	#else
	glDebugMessageCallback((GLDEBUGPROC)gldebug::callback, NULL);
	#endif
	
	// Forward messages with high severity level
	glDebugMessageControl(GL_DONT_CARE,
	                      GL_DONT_CARE,
	                      GL_DEBUG_SEVERITY_HIGH,
	                      0,
	                      NULL,
	                      GL_TRUE);
	
	// Forward messages with medium severity level
	glDebugMessageControl(GL_DONT_CARE,
	                      GL_DONT_CARE,
	                      GL_DEBUG_SEVERITY_MEDIUM,
	                      0,
	                      NULL,
	                      GL_TRUE);
	
	// Forward messages from the application
	glDebugMessageControl(GL_DEBUG_SOURCE_APPLICATION,
	                      GL_DONT_CARE,
	                      GL_DONT_CARE,
	                      0,
	                      NULL,
	                      GL_TRUE);
	
	
	std::string strInitialized("OpenGL debug output enabled");
	glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION,
	                     GL_DEBUG_TYPE_OTHER,
	                     1,
	                     GL_DEBUG_SEVERITY_LOW,
	                     GLsizei(strInitialized.size()), strInitialized.c_str());
}
예제 #2
0
파일: glstate.cpp 프로젝트: galek/apitrace
void dumpCurrentContext(std::ostream &os)
{
    JSONWriter json(os);

#ifndef NDEBUG
    GLint old_bindings[NUM_BINDINGS];
    for (unsigned i = 0; i < NUM_BINDINGS; ++i) {
        old_bindings[i] = 0;
        glGetIntegerv(bindings[i], &old_bindings[i]);
    }
#endif

    Context context;

    /* Temporarily disable messages, as dumpParameters blindlessly tries to
     * get state, regardless the respective extension is supported or not.
     */
    GLDEBUGPROC prevDebugCallbackFunction = 0;
    void *prevDebugCallbackUserParam = 0;
    if (context.KHR_debug) {
        glGetPointerv(GL_DEBUG_CALLBACK_FUNCTION, (GLvoid **) &prevDebugCallbackFunction);
        glGetPointerv(GL_DEBUG_CALLBACK_USER_PARAM, &prevDebugCallbackUserParam);
        glDebugMessageCallback(NULL, NULL);
    }

    dumpParameters(json, context);

    // Use our own debug-message callback.
    if (context.KHR_debug) {
        glDebugMessageCallback(debugMessageCallback, NULL);
    }

    dumpShadersUniforms(json, context);
    dumpTextures(json, context);
    dumpFramebuffer(json, context);

#ifndef NDEBUG
    for (unsigned i = 0; i < NUM_BINDINGS; ++i) {
        GLint new_binding = 0;
        glGetIntegerv(bindings[i], &new_binding);
        if (new_binding != old_bindings[i]) {
            std::cerr << "warning: " << enumToString(bindings[i]) << " was clobbered\n";
        }
    }
#endif

    // Restore debug message callback
    if (context.KHR_debug) {
        glDebugMessageCallback(prevDebugCallbackFunction, prevDebugCallbackUserParam);
    }
}
예제 #3
0
파일: video.c 프로젝트: nexAkari/taisei
static void APIENTRY video_gl_debug_enable(void) {
	GLuint unused = 0;
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
	glDebugMessageCallback(video_gl_debug, NULL);
	glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, &unused, true);
	log_info("Enabled OpenGL debugging");
}
예제 #4
0
파일: window.cpp 프로젝트: pckbls/pulseviz
Window::Window()
    :
    window_handle(nullptr)
{
    this->window_handle = glfwCreateWindow(640, 480, "Hello World", nullptr, nullptr);
    if (!this->window_handle)
        throw "Cannot create window";

    glfwSetWindowUserPointer(this->window_handle, this);

    glfwMakeContextCurrent(this->window_handle);

    GLenum err = glewInit();
    if (GLEW_OK != err)
    {
        std::cerr << glewGetErrorString(err) << std::endl;
        throw "Cannot initialize GLEW";
    }
    std::cout << "OpenGL version supported by this platform: " << glGetString(GL_VERSION) << std::endl;

#ifndef NDEBUG
    glEnable(GL_DEBUG_OUTPUT);
    glDebugMessageCallback(MessageCallback, nullptr);
#endif
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengles_GLES32_nglDebugMessageCallback(JNIEnv *__env, jclass clazz, jlong callbackAddress, jlong userParamAddress) {
    glDebugMessageCallbackPROC glDebugMessageCallback = (glDebugMessageCallbackPROC)tlsGetFunction(318);
    intptr_t callback = (intptr_t)callbackAddress;
    intptr_t userParam = (intptr_t)userParamAddress;
    UNUSED_PARAM(clazz)
    glDebugMessageCallback(callback, userParam);
}
예제 #6
0
파일: main.c 프로젝트: pavolzetor/voronoi
static void
realize(GtkWidget *widget, gpointer user_data)
{
        gtk_gl_area_make_current(GTK_GL_AREA(widget));

        glDebugMessageCallback(debug, NULL);

        char *str = pk_io_read_file("data/vs.glsl");
        programs[0] = glCreateShaderProgramv(GL_VERTEX_SHADER, 1, &str);
        free(str);

        str = pk_io_read_file("data/fs.glsl");
        programs[1] = glCreateShaderProgramv(GL_FRAGMENT_SHADER, 1, &str);
        free(str);


        /* set up pipeline for rendering fullscreen quad */
        glCreateProgramPipelines(1, &pipeline);
        glUseProgramStages(pipeline, GL_VERTEX_SHADER_BIT, programs[0]);
        glUseProgramStages(pipeline, GL_FRAGMENT_SHADER_BIT, programs[1]);
        glBindProgramPipeline(pipeline);


        glCreateVertexArrays(1, &vao);
        glBindVertexArray(vao);
}
예제 #7
0
파일: GLHelpers.cpp 프로젝트: AniLeo/rpcs3
	void enable_debugging()
	{
#ifdef WIN32
		glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
		glDebugMessageCallback(static_cast<GLDEBUGPROC>(dbgFunc), nullptr);
#endif
	}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL43_nglDebugMessageCallback(JNIEnv *__env, jclass clazz, jlong callbackAddress, jlong userParamAddress, jlong __functionAddress) {
	GLDEBUGPROC callback = (GLDEBUGPROC)(intptr_t)callbackAddress;
	void *userParam = (void *)(intptr_t)userParamAddress;
	glDebugMessageCallbackPROC glDebugMessageCallback = (glDebugMessageCallbackPROC)(intptr_t)__functionAddress;
	UNUSED_PARAMS(__env, clazz)
	glDebugMessageCallback(callback, userParam);
}
예제 #9
0
void init(Data*data){

  if(data->args.size()<2){
    std::cerr<<"expected name of video"<<std::endl;
    std::exit(0);
  }
  data->video = std::make_shared<Video>(data->args[1]);

  data->window->setSize(data->video->getWidth(),data->video->getHeight());


  glEnable(GL_DEBUG_OUTPUT);
  glDebugMessageCallback((GLDEBUGPROC)defaultDebugMessage,NULL);

  glViewport(0,0,data->video->getWidth(),data->video->getHeight());

  data->frame = std::make_shared<TextureObject>();
  data->program = std::make_shared<ProgramObject>(createProgram(
        compileShader(GL_VERTEX_SHADER  ,
          "#version 450\n",
          loadFile("shaders/video_gray.vp")),
        compileShader(GL_FRAGMENT_SHADER,
          "#version 450\n",
          loadFile("shaders/noiseFunctions.vp"),
          loadFile("shaders/gradients.vp"),
          loadFile("shaders/video_gray.fp"))));

  glGenVertexArrays(1,&data->vao);

  glClearColor(0,0,0,1);
}
예제 #10
0
	/**
	*	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;
	}
예제 #11
0
// Debug context logger registration
void registerGlDebugLogger(unsigned int logLevel) {
	glDebugLogLevel = logLevel;
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
	glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLARBPROC) wglGetProcAddress("glDebugMessageControlARB");
	glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKARBPROC) wglGetProcAddress("glDebugMessageCallbackARB");
	glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
	glDebugMessageCallback(&debugCallback, NULL);
}
예제 #12
0
void RegisterErrorCallback()
{
    glDebugMessageCallback(OpenGLErrorCallback, nullptr);
    glDebugMessageControl(
        GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);

    glEnable(GL_DEBUG_OUTPUT);
}
예제 #13
0
void GlfwApp::onCreate() {
  windowAspect = glm::aspect(windowSize);
  windowAspectInverse = 1.0f / windowAspect;
  glfwSetWindowUserPointer(window, this);
  glfwSetKeyCallback(window, glfwKeyCallback);
  glfwSetMouseButtonCallback(window, glfwMouseButtonCallback);
  glfwMakeContextCurrent(window);
  glfwSwapInterval(1);

// Initialize the OpenGL bindings
// For some reason we have to set this experminetal flag to properly
// init GLEW if we use a core context.
  glewExperimental = GL_TRUE;
  if (0 != glewInit()) {
    FAIL("Failed to initialize GL3W");
  }
  glGetError();
#ifdef RIFT_DEBUG
  GL_CHECK_ERROR;
  glEnable (GL_DEBUG_OUTPUT_SYNCHRONOUS);
  GL_CHECK_ERROR;
  GLuint unusedIds = 0;
  if (glDebugMessageCallback) {
    glDebugMessageCallback(debugCallback, this);
    GL_CHECK_ERROR;
    glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE,
        0, &unusedIds, true);
    GL_CHECK_ERROR;

  } else if (glDebugMessageCallbackARB) {
    glDebugMessageCallbackARB(debugCallback, this);
    GL_CHECK_ERROR;
    glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE,
        0, &unusedIds, true);
    GL_CHECK_ERROR;
  }
#endif
  GL_CHECK_ERROR;
/*
  if (glNamedStringARB) {
    for (int i = 0;
        Resources::LIB_SHADERS[i] != Resource::NO_SHADER; ++i) {

      std::string shaderFile = getShaderPath(
          Resources::LIB_SHADERS[i]);
      std::string shaderSrc = Files::read(shaderFile);
      size_t lastSlash = shaderFile.rfind('/');
      std::string name = shaderFile.substr(lastSlash);
      glNamedStringARB(GL_SHADER_INCLUDE_ARB,
          name.length(), name.c_str(),
          shaderSrc.length(), shaderSrc.c_str());
      GL_CHECK_ERROR;
    }
  }
*/
  compileAllShaders(Resources::VERTEX_SHADERS, GL_VERTEX_SHADER);
  compileAllShaders(Resources::FRAGMENT_SHADERS, GL_FRAGMENT_SHADER);
}
예제 #14
0
/*--------------------------------GLFW3 and GLEW------------------------------*/
bool start_gl () {
	gl_log ("starting GLFW %s\n", glfwGetVersionString ());
	
	glfwSetErrorCallback (glfw_error_callback);
	if (!glfwInit ()) {
		fprintf (stderr, "ERROR: could not start GLFW3\n");
		return false;
	}

	// uncomment these lines if on Apple OS X
	glfwWindowHint (GLFW_CONTEXT_VERSION_MAJOR, 4);
	glfwWindowHint (GLFW_CONTEXT_VERSION_MINOR, 3);
	glfwWindowHint (GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
	glfwWindowHint (GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

//	glfwWindowHint (GLFW_SAMPLES, 32);
	
	/*GLFWmonitor* mon = glfwGetPrimaryMonitor ();
	const GLFWvidmode* vmode = glfwGetVideoMode (mon);
	g_window = glfwCreateWindow (
		vmode->width, vmode->height, "Extended GL Init", mon, NULL
	);*/

	g_window = glfwCreateWindow (
		g_gl_width, g_gl_height, "Extended Init.", NULL, NULL
	);
	if (!g_window) {
		fprintf (stderr, "ERROR: could not open window with GLFW3\n");
		glfwTerminate();
		return false;
	}
	glfwSetWindowSizeCallback (g_window, glfw_window_size_callback);
	glfwMakeContextCurrent (g_window);
	
	// start GLEW extension handler
	glewExperimental = GL_TRUE;
	glewInit ();
	
	if (GLEW_KHR_debug) {
		int param = -1;
		printf ("KHR_debug extension found\n");
		glDebugMessageCallback ((GLDEBUGPROC)debug_gl_callback, &param);
		glEnable (GL_DEBUG_OUTPUT_SYNCHRONOUS);
		printf ("debug callback engaged\n");
	} else {
		printf ("KHR_debug extension NOT found\n");
	}

	// get version info
	const GLubyte* renderer = glGetString (GL_RENDERER); // get renderer string
	const GLubyte* version = glGetString (GL_VERSION); // version as a string
	printf ("Renderer: %s\n", renderer);
	printf ("OpenGL version supported %s\n", version);
	gl_log ("renderer: %s\nversion: %s\n", renderer, version);
	//vysnch
//	glfwSwapInterval (1);
	return true;
}
예제 #15
0
파일: gfx_gl.cpp 프로젝트: yjaelex/glperf
// --------------------------------------------------------------------------------------------------------------------
bool GfxApiOpenGLBase::Init(const std::string& _title, int _x, int _y, int _width, int _height)
{
#if defined(_DEBUG)
    //glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, 1);
#endif

    mWnd = CreateGLWindow(_title.c_str(), _x, _y, _width, _height);
    if (!mWnd) {
        console::warn("Unable to create SDL Window, which is required for GL.");
        return false;
    }

    if (!GfxBaseApi::Init(_title, _x, _y, _width, _height)) {
        return false;
    }

    glfwMakeContextCurrent(mWnd);

    if (g_bInitOpenGL)
    {
        g_bInitOpenGL = false;
        GLenum err = glewInit();
        if (GLEW_OK != err)
        {
            console::error("Unable to initialize GLEW; err: %s -- required -- so exiting.", glewGetErrorString(err));
            return false;
        }
    }

    console::log("GL created successfully! Info follows.");
    console::log("Vendor: %s", glGetString(GL_VENDOR));
    console::log("Renderer: %s", glGetString(GL_RENDERER));
    console::log("Version: %s", glGetString(GL_VERSION));
    console::log("Shading Language Version: %s", glGetString(GL_SHADING_LANGUAGE_VERSION));

    glfwSwapInterval(0);

    // Default GL State
    glCullFace(GL_FRONT);
    glEnable(GL_CULL_FACE);
    glDisable(GL_SCISSOR_TEST);
    glEnable(GL_DEPTH_TEST);
    glDepthMask(1);
    glDepthFunc(GL_LESS);
    glDisable(GL_BLEND);
    glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);

#if defined(_DEBUG)
    if (glDebugMessageControl != NULL && glDebugMessageCallback != NULL) {
        glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
        // glDebugMessageControl(GL_DEBUG_SOURCE_API, GL_DEBUG_TYPE_OTHER, GL_DEBUG_SEVERITY_LOW, 0, nullptr, GL_FALSE);
        glDebugMessageCallback(ErrorCallback, nullptr);
        glEnable(GL_DEBUG_OUTPUT);
    }
#endif

    return true;
}
예제 #16
0
void initializeGL() {
  glDebugMessageCallback(GLUtils::debugCallback, NULL);
  glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
  glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, 
  GL_DEBUG_SEVERITY_NOTIFICATION, -1 , "Start debugging");
  
    glClearColor(0.5f,0.5f,0.5f,1.0f);
    scene->initScene();
}
예제 #17
0
void gl_log_enable() {
#if !defined(USING_GLES2)
#if 0
	glEnable(DEBUG_OUTPUT_SYNCHRONOUS_ARB);	// TODO: Look into disabling, for more perf
	glDebugMessageCallback(&log_callback, 0);
	glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE);
#endif
#endif
}
예제 #18
0
파일: debug.cpp 프로젝트: juantresde/gl
void set_debug_log_callback(const std::function<void(const debug_log&)>& callback, void* user_data)
{
  std::function<void(GLenum, GLenum, GLuint, GLenum, GLsizei, const char*, const void*)> function =
  [&](GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* data)
  {
    callback(debug_log({source, type, id, severity, std::string(message), data}));
  };
  glDebugMessageCallback((GLDEBUGPROC)function.target<void(GLenum, GLenum, GLuint, GLenum, GLsizei, const char*, const void*)>(), user_data);
}
void DebugImplementation_DebugKHR::registerCallback()
{
    if (m_isRegistered)
        return;

    glDebugMessageCallback(reinterpret_cast<GLDEBUGPROC>(debugMessageCallback), reinterpret_cast<void*>(this));

    m_isRegistered = true;
}
예제 #20
0
void api::setup_debugging( void )
{
#ifndef __APPLE__
	GLint flags;
	glGetIntegerv( GL_CONTEXT_FLAGS, &flags );
	if ( flags & GL_CONTEXT_FLAG_DEBUG_BIT)
		glDebugMessageCallback( &gldebugging, nullptr );
#endif
}
예제 #21
0
void Window::initializeGL() {
  if (!glfwInit()) {
    std::cout << "Failed to initialize GLFW." << std::endl;
    return;
  }

  glfwWindowHint(GLFW_SAMPLES, 4);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, FLEXT_MAJOR_VERSION);
  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, FLEXT_MINOR_VERSION);
  glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

  // Create window from parameters
  std::cout << "Creating GLFW window for OpenGL version " << FLEXT_MAJOR_VERSION
            << ", " << FLEXT_MINOR_VERSION << std::endl;
  auto window = glfwCreateWindow(1024, 768, "JungleIN", NULL, NULL);
  if (window == nullptr) {
    std::cout << "Failed to create GLFW window." << std::endl;
    glfwTerminate();
    return;
  }

  glfwMakeContextCurrent(window);
  glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_FALSE);

  // Load OpenGL extensions
  if (flextInit() != GL_TRUE) {
    glfwTerminate();
    std::cout << "Failed to initialize flextGL." << std::endl;
    return;
  }

  PRINT_GL_ERROR();
  glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
  PRINT_GL_ERROR();
  glDebugMessageCallback(&errorCallback, nullptr);
  PRINT_GL_ERROR();

  Utils::window = window;
  glfwShowWindow(window);

  //
  //  if (!strstr((char *)glGetString(GL_EXTENSIONS),
  //              "GL_EXT_texture_filter_anisotropic")) {
  Utils::USE_ANISO = false;
  Utils::MAX_ANISO = 0x0000;
  //  } else {
  //    Utils::USE_ANISO = true;
  //    float maxAniso;
  //    glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAniso);
  //    Utils::MAX_ANISO = maxAniso;
  //  }

  initializeObjects();
  PRINT_GL_ERROR();
}
예제 #22
0
	graphics_system::graphics_system(core::engine& engine)
	: engine_{engine}, window_{nullptr, [](SDL_Window*){}}, context_{nullptr}, width_{800}, height_{600},
	fullscreen_{false}, clear_color_{glm::vec4{0.4f, 0.6f, 0.9f, 1.f}},
	shader_manager_{std::make_unique<graphics::shader_manager>(engine_)},
	texture_manager_{std::make_unique<graphics::texture_manager>(engine_)} {
		SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
		SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
		SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
		SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
		SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
		SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS,1);
		SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES,8);

		auto window_mask = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | (fullscreen_ ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
		name_ = "Behaviour Trees";
		window_ = std::unique_ptr<SDL_Window, void(*)(SDL_Window*)>(
			SDL_CreateWindow(name_.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width_, height_, window_mask),
			SDL_DestroyWindow);

		if (!window_) {
			throw std::runtime_error{"could not create window"};
		}

		auto width = 0;
		auto height = 0;
		SDL_GetWindowSize(window_.get(), &width, &height);
		width_ = width;
		height_ = height;

		try {
			context_ = SDL_GL_CreateContext(window_.get());
		} catch (const std::runtime_error& ex) {
			throw std::runtime_error{std::string{"could not create opengl context with version 4.3. "} + ex.what()};
		}

		SDL_GL_SetSwapInterval(1);

		glewExperimental = GL_TRUE;
		if (glewInit() != GLEW_OK) {
			throw std::runtime_error("requested opengl 4.3 features are not available");
		}

		utils::log << "OpenGL version " << std::string{reinterpret_cast<const char*>(glGetString(GL_VERSION))} << std::endl;

		if(GLEW_KHR_debug){
			glDebugMessageCallback(
				+[](GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void*) {
					std::cerr << std::string(message,length) << " (source: " << source << ", type: " <<type<< ", id: "
						<< id <<", severity: " << severity << ")" <<std::endl;
				}, nullptr);
		}
		else{
			utils::log(utils::LOG_WARNING) << "no opengL debug log available." << std::endl;
		}
		clear_color(clear_color_);
	}
예제 #23
0
bool initDebug()
{
	bool Validated(true);

	glEnable(GL_DEBUG_OUTPUT);
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
	glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
	glDebugMessageCallback(&glf::debugOutput, NULL);

	return Validated;
}
예제 #24
0
void InitDebugProc()
{
	GLint flag(0);
	glGetIntegerv(GL_CONTEXT_FLAGS,&flag);
	if (!(flag&GL_CONTEXT_FLAG_DEBUG_BIT))
	{
		std::cerr<<"InitDebugProc requires a debug context!\n";
		return;
	}
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
	glDebugMessageCallback(CallBack,nullptr);
}
예제 #25
0
static void gl_enable_debug()
{
	if (GLAD_GL_VERSION_4_3) {
		glDebugMessageCallback(gl_debug_proc, NULL);
		gl_enable(GL_DEBUG_OUTPUT);
	} else if (GLAD_GL_ARB_debug_output) {
		glDebugMessageCallbackARB(gl_debug_proc, NULL);
	} else {
		blog(LOG_DEBUG, "Failed to set GL debug callback as it is "
		                "not supported.");
	}
}
예제 #26
0
static void gl_enable_debug()
{
	 /* Perhaps we should create GLEW contexts? */
	if (ogl_IsVersionGEQ(4, 3)) {
		glDebugMessageCallback(gl_debug_proc, NULL);
		gl_enable(GL_DEBUG_OUTPUT);
	} else if (ogl_ext_ARB_debug_output) {
		glDebugMessageCallbackARB(gl_debug_proc, NULL);
	} else {
		blog(LOG_DEBUG, "Failed to set GL debug callback as it is "
		                "not supported.");
	}
}
예제 #27
0
void nsfw::Window::init(unsigned width, unsigned height)
{
	//TODO_D("Should create and set an active windowing context. ONLY GLFW! No GL!");

	

	//set width and height for later use
	this->width = width;
	this->height = height;

	//Initialize glfw
	glfwInit();
	//tell glfw to use debug stuff
	glfwWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, true);
	//create title of the window
	const char* title = "nsfwgl Test";

	//create the window
	window = glfwCreateWindow(width, height, title, nullptr, nullptr);

	//check to make sure window is created and functioning
	//if window isn't creating properly then let the console know
	if (window == nullptr)
		std::cout << "\n\n\n\n ERROR: WINDOW CREATION UNSUCCESSFUL \n\n\n\n" << std::endl;

	//set window to current context
	glfwMakeContextCurrent(window);

	//load functions
	if (ogl_LoadFunctions() == ogl_LOAD_FAILED)
	{
		glfwDestroyWindow(window);
		glfwTerminate();
	}

	//this is for glfw debug 
#ifdef _DEBUG
	if (glDebugMessageCallback)
	{
		glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
		glDebugMessageCallback(oglErrorDefaultCallback, nullptr);

		GLuint unusedIDs = 0;
		glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, &unusedIDs, true);
	}
	else
	{
		std::cerr << "Failed to subscribe to glDebugMessageCallback." << std::endl;
	}
#endif
}
예제 #28
0
//--------------------------------------------------------------
void ofxOpenVR::exit()
{
	if (vr::VRCompositor()->IsMirrorWindowVisible()) {
		hideMirrorWindow();
	}

	if (_pHMD)
	{
		vr::VR_Shutdown();
		_pHMD = NULL;
	}

	for (std::vector< CGLRenderModel * >::iterator i = _vecRenderModels.begin(); i != _vecRenderModels.end(); i++)
	{
		delete (*i);
	}
	_vecRenderModels.clear();

	if (_bIsGLInit)
	{
		glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_FALSE);
		glDebugMessageCallback(nullptr, nullptr);
		glDeleteBuffers(1, &_glIDVertBuffer);
		glDeleteBuffers(1, &_glIDIndexBuffer);

		glDeleteRenderbuffers(1, &leftEyeDesc._nDepthBufferId);
		glDeleteTextures(1, &leftEyeDesc._nRenderTextureId);
		glDeleteFramebuffers(1, &leftEyeDesc._nRenderFramebufferId);
		glDeleteTextures(1, &leftEyeDesc._nResolveTextureId);
		glDeleteFramebuffers(1, &leftEyeDesc._nResolveFramebufferId);

		glDeleteRenderbuffers(1, &rightEyeDesc._nDepthBufferId);
		glDeleteTextures(1, &rightEyeDesc._nRenderTextureId);
		glDeleteFramebuffers(1, &rightEyeDesc._nRenderFramebufferId);
		glDeleteTextures(1, &rightEyeDesc._nResolveTextureId);
		glDeleteFramebuffers(1, &rightEyeDesc._nResolveFramebufferId);

		if (_unLensVAO != 0)
		{
			glDeleteVertexArrays(1, &_unLensVAO);
		}

		_lensShader.unload();
		_controllersTransformShader.unload();
		_renderModelsShader.unload();
	}

	
}
예제 #29
0
	void BaseApplication::InitDependency(vec3 a_vCamPos)
	{
		if (ogl_LoadFunctions() == ogl_LOAD_FAILED)
		{
			glfwTerminate();
			printf("<ERROR>: ogl_LoadFunctions has fail initialization. \n");
			exit(EXIT_FAILURE);
		}
		else
		{
			printf("--------------------------------------------------------------------------------");
			printf("-- OGL LOADED SUCCESSFULLY. \n");
			if (this->m_oApp->APPINFO.Flags.m_uiDebug)
			{ 
				glDebugMessageCallback(debug_callback, NULL);
				if (glDebugMessageCallback != NULL)
				{
					glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
				}
				glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE);
				glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, GL_DEBUG_SEVERITY_NOTIFICATION, -1, "START DEBUGGING\n");
			}
			//this->DATA.m_oTweeking = new Bar();
			//this->DATA.m_oTweeking->InitTweek();
			printf("-- GL DEBUG MESSAGE ENABLED. \n");
			glfwSetCharModsCallback(this->m_oApp->DATA.m_oWin, on_char_callback);
			printf("-- CHAR_CALLBACK ENABLED. \n");
			glfwSetKeyCallback(this->m_oApp->DATA.m_oWin, key_callback);
			printf("-- KEY_CALLBACK ENABLED. \n");
			glfwSetMouseButtonCallback(this->m_oApp->DATA.m_oWin, mouse_button_callback);
			glfwSetCursorPosCallback(this->m_oApp->DATA.m_oWin, mouse_callback);
			glfwSetCursorPos(this->m_oApp->DATA.m_oWin, (double)this->m_oApp->APPINFO.m_viWinSize.x / 2.0, (double)this->m_oApp->APPINFO.m_viWinSize.y / 2.0);
			printf("-- MOUSE_CALLBACK ENABLED. \n");
			glfwSetScrollCallback(this->m_oApp->DATA.m_oWin, scroll_callback);
			printf("-- SCROLL_CALLBACK ENABLED. \n");
			glfwSetFramebufferSizeCallback(this->m_oApp->DATA.m_oWin, framebuffer_size_callback);
			printf("-- WINDOW_BUFFER_CALLBACK ENABLED. \n");
			//
			this->m_oApp->DATA.m_oCurrCamera = new Camera(vec2(this->m_oApp->APPINFO.m_viWinSize.x,
				this->m_oApp->APPINFO.m_viWinSize.y));
			this->m_oApp->DATA.m_oCurrCamera->BuildCamera(a_vCamPos);
			this->m_oApp->DATA.m_oTotalCameras[0] = this->m_oApp->DATA.m_oCurrCamera;
			printf("-- CAMERA BUILT SUCCESSFULLY. \n");
			//Note: I should consider moving this function call into the appropriate application.
			//m_oTweek.InitTweek();
			printf("--------------------------------------------------------------------------------");
		}
	}
예제 #30
0
bool Renderer_OpenGL::Initialize(const RenderInitParameter& init_param)
{
	MLOG("## Initialize OpenGL\n");

	// initialize parent member variable
	Renderer::Initialize(init_param);

	// create OpenGL context
#if MG_PLATFORM_WINDOWS
	bool result = Initialize_Windows(init_param);
	if (!result)
	{
		MASSERT_MSG(0, "Failed initialize opengl context");
		return false;
	}
#else
#endif

	// retrieve hardware and opengl information
	const GLubyte *renderer = glGetString(GL_RENDERER);
	const GLubyte *vendor = glGetString(GL_VENDOR);
	const GLubyte *version = glGetString(GL_VERSION);
	const GLubyte *glslVersion = glGetString(GL_SHADING_LANGUAGE_VERSION);
	GLint major, minor;
	glGetIntegerv(GL_MAJOR_VERSION, &major);
	glGetIntegerv(GL_MINOR_VERSION, &minor);
	MLOG("## GL Vendor : %s\n", vendor);
	MLOG("## GL Renderer : %s\n", renderer);
	MLOG("## GL Version (string) : %s\n", version);
	MLOG("## GL Version (integer) : %d.%d\n", major, minor);
	MLOG("## GLSL Version : %s\n", glslVersion);

#if MUGGLE_DEBUG
	// if gl version >= 4.3, enable debug callback
	GLint gl_version = major * 100 + minor;
	if (gl_version >= 403)
	{
		glEnable(GL_DEBUG_OUTPUT);
		glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
		glDebugMessageCallback(GLDebugCallback, nullptr);
		glDebugMessageControl(
			GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, true
		);
	}
#endif

	return true;
}