PROBLÈME RÉSOLU: Les shaders ImGui compilent maintenant avec succès!
Changements majeurs:
- Remplacé vcpkg ImGui par FetchContent (compilation from source)
- Créé wrapper GLAD pour ImGui (imgui_opengl3_glad.cpp)
- Ajout de makeContextCurrent() pour gérer le contexte OpenGL multi-thread
- Release du contexte dans initialize(), puis rendu current dans uiThread()
Root Cause Analysis:
1. Rendering s'exécute dans uiThread() (thread séparé)
2. Contexte OpenGL créé dans thread principal n'était pas accessible
3. glCreateShader retournait 0 avec GL_INVALID_OPERATION (erreur 1282)
4. Solution: Transfer du contexte OpenGL du thread principal vers uiThread
Debugging profond:
- Ajout de logs debug dans ImGui pour tracer glCreateShader
- Découvert que handle=0 indiquait échec de création (pas compilation)
- Identifié erreur WGL \"ressource en cours d'utilisation\" = contexte locked
Fichiers modifiés:
- vcpkg.json: Supprimé imgui
- CMakeLists.txt: FetchContent pour ImGui + imgui_backends library
- src/imgui_opengl3_glad.cpp: Nouveau wrapper GLAD
- src/ui/TranslationUI.{h,cpp}: Ajout makeContextCurrent()
- src/core/Pipeline.cpp: Appel makeContextCurrent() dans uiThread()
- build/.../imgui_impl_opengl3.cpp: Debug logs (temporaire)
Résultat: UI fonctionne! NVIDIA RTX 4060 GPU, OpenGL 3.3.0, shaders compilent
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
38 lines
927 B
C++
38 lines
927 B
C++
#include <fstream>
|
|
#include <string>
|
|
#include <windows.h>
|
|
|
|
// This mimics what we have in TranslationUI.cpp
|
|
class UILogger {
|
|
public:
|
|
UILogger& operator<<(const std::string& msg) {
|
|
buffer_ += msg;
|
|
return *this;
|
|
}
|
|
UILogger& operator<<(int value) {
|
|
buffer_ += std::to_string(value);
|
|
return *this;
|
|
}
|
|
UILogger& operator<<(std::ostream& (*)(std::ostream&)) {
|
|
std::ofstream log("ui_debug.log", std::ios::app);
|
|
log << buffer_ << std::endl;
|
|
buffer_.clear();
|
|
return *this;
|
|
}
|
|
void flush() {}
|
|
private:
|
|
std::string buffer_;
|
|
};
|
|
|
|
// This static object might be causing the crash!
|
|
static UILogger g_test_log;
|
|
|
|
int main() {
|
|
MessageBoxA(NULL, "If you see this, static UILogger is NOT the problem!", "Test", MB_OK);
|
|
|
|
g_test_log << "Test message" << std::endl;
|
|
|
|
MessageBoxA(NULL, "Static logger works!", "Success", MB_OK);
|
|
return 0;
|
|
}
|