Esempio n. 1
0
void glCheckError(GL *gl, struct mp_log *log, const char *info)
{
    for (;;) {
        GLenum error = gl->GetError();
        if (error == GL_NO_ERROR)
            break;
        mp_msg(log, MSGL_ERR, "%s: OpenGL error %s.\n", info,
               gl_error_to_string(error));
    }
}
Esempio n. 2
0
static void dump_and_clear_opengl_errors(std::ostream &out, GLenum first_error = GL_NO_ERROR)
{
	GLenum err = ((first_error == GL_NO_ERROR) ? glGetError() : first_error);
	if (err != GL_NO_ERROR) {
		out << "errors: ";
		do {
			out << gl_error_to_string(err) << " ";
			err = glGetError();
		} while (err != GL_NO_ERROR);
	}
}
Esempio n. 3
0
////////////////////////////////////////////////////////////////////////////////
// on update cb
void on_update()
{
	// clear back buffer
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

#ifdef _WIN32
	GLenum error = glGetError();
	if(error!=GL_NO_ERROR)
		std::cerr << "caught "
		          << gl_error_to_string(error)
		          << '\n';
#endif

	// redraw
	glutSwapBuffers();
	glutPostRedisplay();
}
Esempio n. 4
0
	manager::manager(shader_program_ptr shader)
	{
		// Reset errors, so we can track errors that happened here.
		glGetError();

		GLint blend_src_mode;
		GLint blend_dst_mode;
		// Save current blend mode
		glGetIntegerv(GL_BLEND_SRC, &blend_src_mode);
		glGetIntegerv(GL_BLEND_DST, &blend_dst_mode);
		blend_stack.push(blend_mode(blend_src_mode, blend_dst_mode, glIsEnabled(GL_BLEND) != 0));

		GLint atu;
		glGetIntegerv(GL_ACTIVE_TEXTURE, &atu);
		active_texture_unit.push(atu);

		if(shader == NULL || active_shader_program == shader) {
			return;
		}	

		if(active_shader_program != shader) {
			shader_stack.push(active_shader_program);
			active_shader_program = shader;
		}
		ASSERT_LOG(active_shader_program != NULL, "Active shader was NULL");
		check_gl_errors();
		active_shader_program->prepare_draw();

		GLenum err = glGetError();
		ASSERT_LOG(err == GL_NONE, "Error in shader code: " << shader->name() << " : 0x" << std::hex << err << ": " << gl_error_to_string(err));
	}
Esempio n. 5
0
////////////////////////////////////////////////////////////////////////////////
// on init cb
void on_init()
{

#ifndef _WIN32
	// Configure debug output
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
	glDebugMessageCallbackARB(
			reinterpret_cast<GLDEBUGPROCARB>(&gl_debug_message_callback),
			NULL );
#endif

	// gen names
	glGenBuffers(1, &buffer);
	glGenTextures(1, &texture);
	glGenVertexArrays(1, &vertexArray);
	program = glCreateProgram();

	// build buffer
	std::vector<GLint> bufferData(ELEM_CNT,-1);
	glBindBuffer(GL_TEXTURE_BUFFER, buffer);
		glBufferData(GL_TEXTURE_BUFFER,
		             sizeof(GLint)*bufferData.size(),
		             &bufferData[0],
		             GL_STATIC_DRAW);
	glBindBuffer(GL_TEXTURE_BUFFER, 0);

	// build texture
	glBindTexture(GL_TEXTURE_BUFFER, texture);
		glTexBuffer(GL_TEXTURE_BUFFER, GL_R32I, buffer);

	// bind as image
	glBindImageTexture(0,
	                   texture,
	                   0,
	                   GL_FALSE,
	                   0,
	                   GL_READ_WRITE,
	                   GL_R32I);

	// build vao
	glBindVertexArray(vertexArray);
		// empty
	glBindVertexArray(0);

	// build program
	GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
	glShaderSource(vertex, 5, vertexSrc, NULL);
	glCompileShader(vertex);
	glAttachShader(program, vertex);
	glDeleteShader(vertex);
	glLinkProgram(program);

	// set uniforms
	glProgramUniform1i(program,
	                   glGetUniformLocation(program, "imgData"),
	                   0);

	// draw data
	glUseProgram(program);
	glBindVertexArray(vertexArray);
	glDrawArrays(GL_POINTS, 0, ELEM_CNT);

	// map buffer and check data validity
	glBindVertexArray(0);
	glBindBuffer(GL_TEXTURE_BUFFER, buffer);
	GLint *dataPtr = (GLint*) glMapBuffer(GL_TEXTURE_BUFFER, GL_READ_ONLY);
	std::cout << "buffer content : ";
	for(GLint i = 0; i<ELEM_CNT; ++i)
		std::cout << dataPtr[i] << ' ';
	std::cout << std::endl;
	glUnmapBuffer(GL_TEXTURE_BUFFER);

#ifdef _WIN32
	GLenum error = glGetError();
	if(error!=GL_NO_ERROR)
		std::cerr << "caught "
		          << gl_error_to_string(error)
		          << '\n';
#endif

}
Esempio n. 6
0
////////////////////////////////////////////////////////////////////////////////
// on init cb
void on_init()
{
	// variables
	GLuint texture=0;
	GLint iterationCnt=sizeof(internalFormats)/(sizeof(GLenum));

#ifndef _WIN32
	// Configure debug output
	glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);
	glDebugMessageCallbackARB(
			reinterpret_cast<GLDEBUGPROCARB>(&gl_debug_message_callback),
			reinterpret_cast<GLvoid*>(&i) );
#endif

	for(i=0; i<iterationCnt; ++i)
	{
		glGenTextures(1, &texture);
		glBindTexture(GL_TEXTURE_1D, texture);
			glTexStorage1D(GL_TEXTURE_1D,
			               1,
			               internalFormats[i],
			               1);
		glBindTexture(GL_TEXTURE_1D, 0);
		glDeleteTextures(1, &texture);
#ifdef _WIN32
		GLenum error = glGetError();
		if(error!=GL_NO_ERROR)
			std::cerr << "glTexStorage1D gave "
			          << gl_error_to_string(error)
			          << " (internalformat= "
			          << internalFormatsStr[i]
		              << ")\n";
#endif
	}
	std::cerr << '\n';

	// 2D tests
	for(i=0; i<iterationCnt; ++i)
	{
		glGenTextures(1, &texture);
		glBindTexture(GL_TEXTURE_2D, texture);
			glTexStorage2D(GL_TEXTURE_2D,
			               1,
			               internalFormats[i],
			               1,
			               1);
		glDeleteTextures(1, &texture);
#ifdef _WIN32
		GLenum error = glGetError();
		if(error!=GL_NO_ERROR)
			std::cerr << "glTexStorage2D gave "
			          << gl_error_to_string(error)
			          << " (internalformat= "
			          << internalFormatsStr[i]
		              << ")\n";
#endif
	}
	std::cerr << '\n';

	// 3D tests
	for(i=0; i<iterationCnt; ++i)
	{

		glGenTextures(1, &texture);
		glBindTexture(GL_TEXTURE_3D, texture);
			glTexStorage3D(GL_TEXTURE_3D,
			               1,
			               internalFormats[i],
			               1,
			               1,
			               1);
		glDeleteTextures(1, &texture);
#ifdef _WIN32
		GLenum error = glGetError();
		if(error!=GL_NO_ERROR)
			std::cerr << "glTexStorage3D gave "
			          << gl_error_to_string(error)
			          << " (internalformat= "
			          << internalFormatsStr[i]
		              << ")\n";
#endif
	}
}