Beispiel #1
0
FBO::FBO(const std::string& debug_name, Size size, const Params& params)
	: _debug_name(debug_name), _size(size), _params(params)
	, _color_tex(nullptr, size, params.color_format, TexParams::clamped_linear(), debug_name + "_color")
{
	VLOG_SCOPE_F(1, "FBO %s", debug_name.c_str());

	CHECK_FOR_GL_ERROR;

	glGenFramebuffers(1, &_fbo_id);
	CHECK_FOR_GL_ERROR;

	{
		FBO::Lock lock(this);
		CHECK_FOR_GL_ERROR;
		// glEnable(GL_TEXTURE_2D);

		{
			CHECK_FOR_GL_ERROR;
			_color_tex.bind();
			if (!_color_tex.has_data()) {
				// We must init texture or we'll get a GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
				_color_tex.set_data(nullptr);
			}
			glFramebufferTexture2D(
				GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _color_tex.id(), 0);
			CHECK_FOR_GL_ERROR;
		}

		CHECK_FOR_GL_ERROR;

#if !GLLIB_GLES
		if (params.with_depth) {
			CHECK_FOR_GL_ERROR;
			glGenRenderbuffers(1, &_depth_rbo_id);
			glBindRenderbuffer(GL_RENDERBUFFER, _depth_rbo_id);
			glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32, width(), height());
			glBindRenderbuffer(GL_RENDERBUFFER, 0);
			glFramebufferRenderbuffer(
				GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depth_rbo_id);
			CHECK_FOR_GL_ERROR;
		}
#endif // !GLLIB_GLES
	}

	CHECK_FOR_GL_ERROR;

	{
		FBO::Lock lock(this);
		auto status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
		CHECK_EQ_F(status, GL_FRAMEBUFFER_COMPLETE,
		    "Framebuffer '%s' not complete after initialization: %s",
			debug_name.c_str(), framebuffer_completion_to_string(status));
	}

	CHECK_FOR_GL_ERROR;
}
Beispiel #2
0
int main(int argc, char* argv[])
{
	if (argc > 1 && argv[1] == std::string("test"))
	{
		return main_test(argc, argv);
	}

	loguru::init(argc, argv);

	// auto verbose_type_name = loguru::demangle(typeid(std::ofstream).name());
	// loguru::add_stack_cleanup(verbose_type_name.c_str(), "std::ofstream");
	// std::ofstream os;
	// die(os);

	if (argc == 1)
	{
		loguru::add_file("latest_readable.log", loguru::Truncate, loguru::Verbosity_INFO);
		loguru::add_file("everything.log",      loguru::Append,   loguru::Verbosity_MAX);

		LOG_F(INFO, "Loguru test");
		test_thread_names();

		test_scopes();
		test_levels();
		test_stream();
	}
	else
	{
		std::string test = argv[1];
		if (test == "ABORT_F") {
			ABORT_F("ABORT_F format message");
		} else if (test == "ABORT_S") {
			ABORT_S() << "ABORT_S stream message";
		} else if (test == "assert") {
			const char* ptr = 0;
			assert(ptr && "Error that was unexpected");
		} else if (test == "LOG_F(FATAL)") {
			LOG_F(FATAL, "Fatal format message");
		} else if (test == "LOG_S(FATAL)") {
			LOG_S(FATAL) << "Fatal stream message";
		} else if (test == "CHECK_NOTNULL_F") {
			const char* ptr = 0;
			CHECK_NOTNULL_F(ptr);
		} else if (test == "CHECK_F") {
			CHECK_F(1 > 2);
		} else if (test == "CHECK_EQ_F") {
			CHECK_EQ_F(always_increasing(),  0);
			CHECK_EQ_F(always_increasing(),  1);
			CHECK_EQ_F(always_increasing(), 42);
		} else if (test == "CHECK_EQ_F_int") {
			int x = 42;
			CHECK_EQ_F(x, x + 1);
		} else if (test == "CHECK_EQ_F_unsigned") {
			unsigned x = 42;
			CHECK_EQ_F(x, x + 1);
		} else if (test == "CHECK_EQ_F_size_t") {
			size_t x = 42;
			CHECK_EQ_F(x, x + 1);
		} else if (test == "CHECK_EQ_F_message") {
			CHECK_EQ_F(always_increasing(),  0, "Should pass");
			CHECK_EQ_F(always_increasing(),  1, "Should pass");
			CHECK_EQ_F(always_increasing(), 42, "Should fail");
		} else if (test == "CHECK_EQ_S") {
			std::string str = "right";
			CHECK_EQ_S(str, "wrong") << "Expected to fail, since `str` isn't \"wrong\" but \"" << str << "\"";
		} else if (test == "CHECK_LT_S") {
			CHECK_EQ_S(always_increasing(), 0);
			CHECK_EQ_S(always_increasing(), 1);
			CHECK_EQ_S(always_increasing(), 42);
		} else if (test == "CHECK_LT_S_message") {
			CHECK_EQ_S(always_increasing(),  0) << "Should pass";
			CHECK_EQ_S(always_increasing(),  1) << "Should pass";
			CHECK_EQ_S(always_increasing(), 42) << "Should fail!";
		} else if (test == "deep_abort") {
			deep_abort_10({"deep_abort"});
		} else if (test == "SIGSEGV") {
			test_SIGSEGV_2();
		} else if (test == "hang") {
			test_hang_2();
		} else {
			LOG_F(ERROR, "Unknown test: '%s'", test.c_str());
		}
	}
}