diff --git a/src/overlay.cpp b/src/overlay.cpp index 5a89556a..d1d4975c 100644 --- a/src/overlay.cpp +++ b/src/overlay.cpp @@ -65,6 +65,12 @@ ImFont* font1 = nullptr; struct amdGpu amdgpu; double frameStart, frameEnd, targetFrameTime = 0; +#define RGBGetBValue(rgb) (rgb & 0x000000FF) +#define RGBGetGValue(rgb) ((rgb >> 8) & 0x000000FF) +#define RGBGetRValue(rgb) ((rgb >> 16) & 0x000000FF) + +#define ToRGBColor(r, g, b, a) ((r << 16) | (g << 8) | (b)); + /* Mapped from VkInstace/VkPhysicalDevice */ struct instance_data { struct vk_instance_dispatch_table vtable; @@ -1274,8 +1280,12 @@ static void compute_swapchain_display(struct swapchain_data *data) ImGui::Begin("Logging", &open, ImGuiWindowFlags_NoDecoration); ImVec2 horiz = ImVec2(data->width / 2 - (instance_data->params.crosshair_size / 2), data->height / 2); ImVec2 vert = ImVec2(data->width / 2, data->height / 2 - (instance_data->params.crosshair_size / 2)); - ImGui::GetWindowDrawList()->AddLine(horiz, ImVec2(horiz.x + instance_data->params.crosshair_size, horiz.y + 0), IM_COL32(0, 0, 0, 255), 2.0f); - ImGui::GetWindowDrawList()->AddLine(vert, ImVec2(vert.x + 0, vert.y + instance_data->params.crosshair_size), IM_COL32(0, 0, 0, 255), 2.0f); + ImGui::GetWindowDrawList()->AddLine(horiz, ImVec2(horiz.x + instance_data->params.crosshair_size, horiz.y + 0), + IM_COL32(RGBGetRValue(instance_data->params.crosshair_color), RGBGetGValue(instance_data->params.crosshair_color), + RGBGetBValue(instance_data->params.crosshair_color), 255), 2.0f); + ImGui::GetWindowDrawList()->AddLine(vert, ImVec2(vert.x + 0, vert.y + instance_data->params.crosshair_size), + IM_COL32(RGBGetRValue(instance_data->params.crosshair_color), RGBGetGValue(instance_data->params.crosshair_color), + RGBGetBValue(instance_data->params.crosshair_color), 255), 2.0f); ImGui::End(); } ImGui::PopStyleVar(2); diff --git a/src/overlay_params.cpp b/src/overlay_params.cpp index df593d8a..568c50d8 100644 --- a/src/overlay_params.cpp +++ b/src/overlay_params.cpp @@ -112,6 +112,14 @@ parse_no_display(const char *str) return strtol(str, NULL, 0) != 0; } +static unsigned +parse_color(const char (*str)) +{ + std::string string = str; + string = "0x" + string; + return strtol(string.c_str(), NULL, 0); +} + static unsigned parse_unsigned(const char *str) { @@ -124,6 +132,8 @@ parse_unsigned(const char *str) #define parse_offset_x(s) parse_unsigned(s) #define parse_offset_y(s) parse_unsigned(s) +#define parse_crosshair_color(s) parse_color(s) + static bool parse_help(const char *str) { diff --git a/src/overlay_params.h b/src/overlay_params.h index 08a051d4..047e1010 100644 --- a/src/overlay_params.h +++ b/src/overlay_params.h @@ -62,6 +62,7 @@ extern "C" { OVERLAY_PARAM_CUSTOM(crosshair_size) \ OVERLAY_PARAM_CUSTOM(offset_x) \ OVERLAY_PARAM_CUSTOM(offset_y) \ + OVERLAY_PARAM_CUSTOM(crosshair_color) \ OVERLAY_PARAM_CUSTOM(help) enum overlay_param_position { @@ -95,6 +96,7 @@ struct overlay_params { unsigned offset_x; unsigned offset_y; unsigned vsync; + unsigned crosshair_color; float font_size; KeySym toggle_hud; KeySym toggle_logging;