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

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/ghost/intern/GHOST_Context.cpp')
-rw-r--r--intern/ghost/intern/GHOST_Context.cpp159
1 files changed, 159 insertions, 0 deletions
diff --git a/intern/ghost/intern/GHOST_Context.cpp b/intern/ghost/intern/GHOST_Context.cpp
new file mode 100644
index 00000000000..f69f2181ef7
--- /dev/null
+++ b/intern/ghost/intern/GHOST_Context.cpp
@@ -0,0 +1,159 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Jason Wilkins
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file ghost/intern/GHOST_Context.cpp
+ * \ingroup GHOST
+ *
+ * Definition of GHOST_Context class.
+ */
+
+#include "GHOST_Context.h"
+
+#ifdef _WIN32
+# include <GL/wglew.h> // only for symbolic constants, do not use API functions
+# include <tchar.h>
+#
+# ifndef ERROR_PROFILE_DOES_NOT_MATCH_DEVICE
+# define ERROR_PROFILE_DOES_NOT_MATCH_DEVICE 0x7E7 // Mingw64 headers may have had this
+# endif
+#endif
+
+#include <cstdio>
+#include <cstring>
+
+
+#ifdef _WIN32
+
+bool win32_chk(bool result, const char *file, int line, const char *text)
+{
+ if (!result) {
+ LPTSTR formattedMsg = NULL;
+
+ DWORD error = GetLastError();
+
+ const char *msg;
+
+ DWORD count = 0;
+
+ switch (error) {
+ case ERROR_INVALID_VERSION_ARB:
+ msg = "The specified OpenGL version and feature set are either invalid or not supported.\n";
+ break;
+
+ case ERROR_INVALID_PROFILE_ARB:
+ msg = "The specified OpenGL profile and feature set are either invalid or not supported.\n";
+ break;
+
+ case ERROR_INVALID_PIXEL_TYPE_ARB:
+ msg = "The specified pixel type is invalid.\n";
+ break;
+
+ case ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB:
+ msg = ("The device contexts specified are not compatible. "
+ "This can occur if the device contexts are managed by "
+ "different drivers or possibly on different graphics adapters.\n");
+ break;
+
+#ifdef WITH_GLEW_ES
+ case ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV:
+ msg = "The device context(s) and rendering context have non-matching affinity masks.\n";
+ break;
+
+ case ERROR_MISSING_AFFINITY_MASK_NV:
+ msg = "The rendering context does not have an affinity mask set.\n";
+ break;
+#endif
+
+ case ERROR_PROFILE_DOES_NOT_MATCH_DEVICE:
+ msg = ("The specified profile is intended for a device of a "
+ "different type than the specified device.\n");
+ break;
+
+ default:
+ {
+ count =
+ FormatMessage(
+ (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS),
+ NULL,
+ error,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)(&formattedMsg),
+ 0,
+ NULL);
+
+ msg = count > 0 ? formattedMsg : "<no system message>\n";
+ break;
+ }
+ }
+
+#ifndef NDEBUG
+ _ftprintf(
+ stderr,
+ "%s(%d):[%s] -> Win32 Error# (%lu): %s",
+ file,
+ line,
+ text,
+ (unsigned long)error,
+ msg);
+#else
+ _ftprintf(
+ stderr,
+ "Win32 Error# (%lu): %s",
+ (unsigned long)error,
+ msg);
+#endif
+
+ SetLastError(NO_ERROR);
+
+ if (count != 0)
+ LocalFree(formattedMsg);
+ }
+
+ return result;
+}
+
+#endif // _WIN32
+
+
+void GHOST_Context::initContextGLEW()
+{
+ mxDestroyContext(m_mxContext); // no-op if m_mxContext is NULL
+
+ mxMakeCurrentContext(mxCreateContext());
+
+ m_mxContext = mxGetCurrentContext();
+}
+
+
+void GHOST_Context::initClearGL()
+{
+ glClearColor(0.447, 0.447, 0.447, 0.000);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glClearColor(0.000, 0.000, 0.000, 0.000);
+}