From be8b61218644941321c7caf3359a2b7c68791b20 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Sat, 25 Jun 2022 14:14:08 -0700 Subject: [PATCH] nv2a: Set C numeric locale before shader gen --- hw/xbox/nv2a/shaders.c | 16 +++++++++++++++- hw/xbox/nv2a/shaders.h | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/hw/xbox/nv2a/shaders.c b/hw/xbox/nv2a/shaders.c index 451eed728c..181b7e94b1 100644 --- a/hw/xbox/nv2a/shaders.c +++ b/hw/xbox/nv2a/shaders.c @@ -21,6 +21,7 @@ #include "qemu/osdep.h" #include "qemu-common.h" +#include #include "shaders_common.h" #include "shaders.h" @@ -941,11 +942,19 @@ static GLuint create_gl_shader(GLenum gl_shader_type, return shader; } -ShaderBinding* generate_shaders(const ShaderState *state) +ShaderBinding *generate_shaders(const ShaderState *state) { int i, j; char tmp[64]; + char *previous_numeric_locale = setlocale(LC_NUMERIC, NULL); + if (previous_numeric_locale) { + previous_numeric_locale = g_strdup(previous_numeric_locale); + } + + /* Ensure numeric values are printed with '.' radix, no grouping */ + setlocale(LC_NUMERIC, "C"); + char vtx_prefix; GLuint program = glCreateProgram(); @@ -1092,5 +1101,10 @@ ShaderBinding* generate_shaders(const ShaderState *state) ret->material_alpha_loc = -1; } + if (previous_numeric_locale) { + setlocale(LC_NUMERIC, previous_numeric_locale); + g_free(previous_numeric_locale); + } + return ret; } diff --git a/hw/xbox/nv2a/shaders.h b/hw/xbox/nv2a/shaders.h index 79d7db18f1..9f90d82762 100644 --- a/hw/xbox/nv2a/shaders.h +++ b/hw/xbox/nv2a/shaders.h @@ -134,6 +134,6 @@ typedef struct ShaderBinding { GLint material_alpha_loc; } ShaderBinding; -ShaderBinding* generate_shaders(const ShaderState *state); +ShaderBinding *generate_shaders(const ShaderState *state); #endif