Ejemplo n.º 1
0
bool SliderSize(const std::string& label, size_t* v, size_t v_min, size_t v_max, float power)
{
    CHECK_NOTNULL_F(v);
    float v_float = *v;
    bool changed = ImGui::SliderFloat(label.c_str(), &v_float, static_cast<float>(v_min), static_cast<float>(v_max), "%.0f", power);
    if (changed) {
        *v = static_cast<size_t>(std::round(v_float));
        *v = std::max(*v, v_min);
        *v = std::min(*v, v_max);
    }
    return changed;
}
Ejemplo n.º 2
0
bool Combo(const std::string& label, std::string* current_item, const std::vector<std::string>& items, int height_in_items)
{
    CHECK_NOTNULL_F(current_item);
    std::vector<const char*> items_c_str;
    items_c_str.reserve(items.size());
    int current_item_index = -1;
    for (int i = 0; i < items.size(); ++i) {
        items_c_str.push_back(items[i].c_str());
        if (items[i] == *current_item) {
            current_item_index = i;
        }
    }

    if (ImGui::Combo(label.c_str(), &current_item_index, items_c_str.data(), (int)items.size(), height_in_items)) {
        CHECK_F(0 <= current_item_index && current_item_index < items.size());
        *current_item = items[current_item_index];
        return true;
    } else {
        return false;
    }
}
Ejemplo n.º 3
0
void init_glew()
{
#if !GLLIB_GLES
	#ifndef GLEW_OK
	#	error "No GLEW!"
	#endif

	static bool s_initialized = false;
	if (s_initialized) { return; }
	s_initialized = true;

	LOG_SCOPE_FUNCTION(INFO);
	CHECK_FOR_GL_ERROR;

	glewExperimental = true;
	GLenum glewErr = glewInit();
	CHECK_F(glewErr == GLEW_OK, "Failed to initialize GLEW: %s", glewGetErrorString(glewErr));
	glGetError();  // glew sometimes produces faux GL_INVALID_ENUM
	CHECK_FOR_GL_ERROR;

	CHECK_NOTNULL_F(glCreateProgram);

	char gl_version_string[64];
	snprintf(gl_version_string, sizeof(gl_version_string) - 1,
		"GL_VERSION_%d_%d", GLLIB_OPENGL_VERSION / 100, (GLLIB_OPENGL_VERSION / 10) % 10);
	CHECK_F(glewIsSupported(gl_version_string), "Not supported: %s", gl_version_string);

	// CHECK_F(glewIsSupported("GL_VERSION_3_2"));

	if (glDebugMessageCallbackARB) {
		LOG_F(INFO, "ARB_debug_output supported");
		glDebugMessageCallbackARB( on_gl_error, nullptr );
		glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB );
	} else {
		LOG_F(INFO, "ARB_debug_output not supported");
	}
#endif // !GLLIB_GLES

	CHECK_FOR_GL_ERROR;
}
Ejemplo n.º 4
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());
		}
	}
}