Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r_app_msvc.cpp')
-rw-r--r--src/slic3r_app_msvc.cpp58
1 files changed, 37 insertions, 21 deletions
diff --git a/src/slic3r_app_msvc.cpp b/src/slic3r_app_msvc.cpp
index 7cd97dfc3..ff5ad6cfa 100644
--- a/src/slic3r_app_msvc.cpp
+++ b/src/slic3r_app_msvc.cpp
@@ -21,6 +21,8 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/classification.hpp>
+#include <stdio.h>
+
class OpenGLVersionCheck
{
public:
@@ -44,8 +46,8 @@ public:
if (RegisterClass(&wc)) {
HWND hwnd = CreateWindowW(wc.lpszClassName, L"slic3r_opengl_version_check", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480, 0, 0, wc.hInstance, (LPVOID)this);
if (hwnd) {
- this->message_pump_exit = false;
- while (GetMessage(&msg, NULL, 0, 0 ) > 0 && ! this->message_pump_exit)
+ message_pump_exit = false;
+ while (GetMessage(&msg, NULL, 0, 0 ) > 0 && ! message_pump_exit)
DispatchMessage(&msg);
}
}
@@ -55,13 +57,18 @@ public:
void unload_opengl_dll()
{
if (this->hOpenGL) {
- FreeLibrary(this->hOpenGL);
+ BOOL released = FreeLibrary(this->hOpenGL);
+ if (released)
+ printf("System OpenGL library released\n");
+ else
+ printf("System OpenGL library NOT released\n");
this->hOpenGL = nullptr;
}
}
bool is_version_greater_or_equal_to(unsigned int major, unsigned int minor) const
{
+ // printf("is_version_greater_or_equal_to, version: %s\n", version.c_str());
std::vector<std::string> tokens;
boost::split(tokens, version, boost::is_any_of(" "), boost::token_compress_on);
if (tokens.empty())
@@ -76,6 +83,7 @@ public:
gl_major = ::atoi(numbers[0].c_str());
if (numbers.size() > 1)
gl_minor = ::atoi(numbers[1].c_str());
+ // printf("Major: %d, minor: %d\n", gl_major, gl_minor);
if (gl_major < major)
return false;
else if (gl_major > major)
@@ -85,7 +93,7 @@ public:
}
protected:
- bool message_pump_exit = false;
+ static bool message_pump_exit;
void check(HWND hWnd)
{
@@ -131,17 +139,18 @@ protected:
};
HDC ourWindowHandleToDeviceContext = ::GetDC(hWnd);
- // Gdi32.dll
+ // Gdi32.dll
int letWindowsChooseThisPixelFormat = ::ChoosePixelFormat(ourWindowHandleToDeviceContext, &pfd);
- // Gdi32.dll
- SetPixelFormat(ourWindowHandleToDeviceContext,letWindowsChooseThisPixelFormat, &pfd);
- // Opengl32.dll
+ // Gdi32.dll
+ SetPixelFormat(ourWindowHandleToDeviceContext, letWindowsChooseThisPixelFormat, &pfd);
+ // Opengl32.dll
HGLRC glcontext = wglCreateContext(ourWindowHandleToDeviceContext);
wglMakeCurrent(ourWindowHandleToDeviceContext, glcontext);
// Opengl32.dll
const char *data = (const char*)glGetString(GL_VERSION);
if (data != nullptr)
this->version = data;
+ // printf("check -version: %s\n", version.c_str());
data = (const char*)glGetString(0x8B8C); // GL_SHADING_LANGUAGE_VERSION
if (data != nullptr)
this->glsl_version = data;
@@ -153,6 +162,7 @@ protected:
this->renderer = data;
// Opengl32.dll
wglDeleteContext(glcontext);
+ ::ReleaseDC(hWnd, ourWindowHandleToDeviceContext);
this->success = true;
}
@@ -166,15 +176,19 @@ protected:
OpenGLVersionCheck *ogl_data = reinterpret_cast<OpenGLVersionCheck*>(pCreate->lpCreateParams);
ogl_data->check(hWnd);
DestroyWindow(hWnd);
- ogl_data->message_pump_exit = true;
return 0;
}
+ case WM_NCDESTROY:
+ message_pump_exit = true;
+ return 0;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
}
};
+bool OpenGLVersionCheck::message_pump_exit = false;
+
extern "C" {
typedef int (__stdcall *Slic3rMainFunc)(int argc, wchar_t **argv);
Slic3rMainFunc slic3r_main = nullptr;
@@ -190,6 +204,16 @@ int wmain(int argc, wchar_t **argv)
{
#endif
+ std::vector<wchar_t*> argv_extended;
+ argv_extended.emplace_back(argv[0]);
+#ifdef SLIC3R_WRAPPER_GUI
+ std::wstring cmd_gui = L"--gui";
+ argv_extended.emplace_back(const_cast<wchar_t*>(cmd_gui.data()));
+#endif
+ for (int i = 1; i < argc; ++i)
+ argv_extended.emplace_back(argv[i]);
+ argv_extended.emplace_back(nullptr);
+
OpenGLVersionCheck opengl_version_check;
bool load_mesa = ! opengl_version_check.load_opengl_dll() || ! opengl_version_check.is_version_greater_or_equal_to(2, 0);
@@ -213,7 +237,8 @@ int wmain(int argc, wchar_t **argv)
HINSTANCE hInstance_OpenGL = LoadLibraryExW(path_to_mesa, nullptr, 0);
if (hInstance_OpenGL == nullptr) {
printf("MESA OpenGL library was not loaded\n");
- }
+ } else
+ printf("MESA OpenGL library was loaded sucessfully\n");
}
wchar_t path_to_slic3r[MAX_PATH + 1] = { 0 };
@@ -239,15 +264,6 @@ int wmain(int argc, wchar_t **argv)
printf("could not locate the function slic3r_main in slic3r.dll\n");
return -1;
}
-
- std::vector<wchar_t*> argv_extended;
- argv_extended.emplace_back(argv[0]);
-#ifdef SLIC3R_WRAPPER_GUI
- std::wstring cmd_gui = L"--gui";
- argv_extended.emplace_back(const_cast<wchar_t*>(cmd_gui.data()));
-#endif
- for (int i = 1; i < argc; ++ i)
- argv_extended.emplace_back(argv[i]);
- argv_extended.emplace_back(nullptr);
- return slic3r_main(argc, argv_extended.data());
+ // argc minus the trailing nullptr of the argv
+ return slic3r_main(argv_extended.size() - 1, argv_extended.data());
}