by Anonymous » 26 Aug 2025, 08:42
Es gibt einen OpenGL-Code unten, aber dies ist nicht mit OpenGL pro-SE zu tun. Es scheint, als hätte ich eine seltsame C ++-Quirk gefunden, die ich nicht verstehe.
Code: Select all
struct Renderer
{
GLuint program;
float aspectRatio;
};
// global scope
Renderer renderer;
bool shouldClose = false;
< /code>
Aus irgendeinem seltsamen Grund, wenn ich die folgende Funktion aufrufe: < /p>
void initRenderer(Renderer *renderer)
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_MULTISAMPLE);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// adding the temporary to show that `shouldClose` is not
// modified as a side effect of `shaderProgram`.
GLuint program = shaderProgram("../shaders/vertex.glsl", "../shaders/fragment.glsl");
// this line sets `shouldClose` to the value in `program`
renderer->program = program;
}
// main is in the same translation unit where `Renderer` and `shouldClose` are defined.
int main() {
// ...
initRenderer(&renderer);
// ...
}
Eine weitere seltsame Sache ist, dass, wenn ich die Reihenfolge wechsle, in der Renderer und in globalem Umfang definiert werden, wie unten gezeigt, verschwindet das Problem:
Code: Select all
bool shouldClose = false;
Renderer renderer;
Die Ausgabe von Cl.exe -version lautet:
Code: Select all
Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64
Warum ist das Festlegen des Attributs einer Struktur, die eine andere, völlig unabhängige Variable verändert?
Es gibt einen OpenGL-Code unten, aber dies ist nicht mit OpenGL pro-SE zu tun. Es scheint, als hätte ich eine seltsame C ++-Quirk gefunden, die ich nicht verstehe.[code]struct Renderer
{
GLuint program;
float aspectRatio;
};
// global scope
Renderer renderer;
bool shouldClose = false;
< /code>
Aus irgendeinem seltsamen Grund, wenn ich die folgende Funktion aufrufe: < /p>
void initRenderer(Renderer *renderer)
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_MULTISAMPLE);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// adding the temporary to show that `shouldClose` is not
// modified as a side effect of `shaderProgram`.
GLuint program = shaderProgram("../shaders/vertex.glsl", "../shaders/fragment.glsl");
// this line sets `shouldClose` to the value in `program`
renderer->program = program;
}
// main is in the same translation unit where `Renderer` and `shouldClose` are defined.
int main() {
// ...
initRenderer(&renderer);
// ...
}
[/code]
Eine weitere seltsame Sache ist, dass, wenn ich die Reihenfolge wechsle, in der Renderer und in globalem Umfang definiert werden, wie unten gezeigt, verschwindet das Problem:
[code]bool shouldClose = false;
Renderer renderer;
[/code]
Die Ausgabe von Cl.exe -version lautet:
[code]Microsoft (R) C/C++ Optimizing Compiler Version 19.44.35208 for x64
[/code]
Warum ist das Festlegen des Attributs einer Struktur, die eine andere, völlig unabhängige Variable verändert?