Revision: 58717
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58717
Author:   jwilkins
Date:     2013-07-29 14:47:23 +0000 (Mon, 29 Jul 2013)
Log Message:
-----------
started working on getting blender to run under the core profile (with 
deprecated functions turned off), also sketching out a generic pixel format 
chooser

Modified Paths:
--------------
    branches/soc-2013-viewport_fx/extern/glew-es/src/glew.c
    branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.cpp
    branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.h
    branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_ContextWGL.cpp
    branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_SystemWin32.cpp
    branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_WindowWin32.cpp
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_extensions.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_immediate.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_immediate_glsl.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_object_gles.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_profile.h
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_safety.c
    branches/soc-2013-viewport_fx/source/blender/gpu/intern/gpu_safety.h
    
branches/soc-2013-viewport_fx/source/blender/windowmanager/intern/wm_window.c

Modified: branches/soc-2013-viewport_fx/extern/glew-es/src/glew.c
===================================================================
--- branches/soc-2013-viewport_fx/extern/glew-es/src/glew.c     2013-07-29 
11:42:23 UTC (rev 58716)
+++ branches/soc-2013-viewport_fx/extern/glew-es/src/glew.c     2013-07-29 
14:47:23 UTC (rev 58717)
@@ -409,16 +409,39 @@
  */
 static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, 
const GLubyte *end)
 {
-  const GLubyte* p;
-  GLuint len = _glewStrLen((const GLubyte*)name);
-  p = start;
-  while (p < end)
-  {
-    GLuint n = _glewStrCLen(p, ' ');
-    if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE;
-    p += n+1;
-  }
-  return GL_FALSE;
+       if (start != NULL) {
+         const GLubyte* p;
+         GLuint len = _glewStrLen((const GLubyte*)name);
+         p = start;
+         while (p < end)
+         {
+               GLuint n = _glewStrCLen(p, ' ');
+               if (len == n && _glewStrSame((const GLubyte*)name, p, n)) 
return GL_TRUE;
+               p += n+1;
+         }
+         return GL_FALSE;
+       }
+       else { // XXX jwilkins: unified extension string is deprecated
+               GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC pglGetStringi = 
glewGetProcAddress("glGetStringi");
+
+               int max = 0;
+               glGetIntegerv(GL_NUM_EXTENSIONS, &max);
+
+               if (pglGetStringi != NULL) {
+                       const char* ext;
+                       int i;
+                       GLuint len = _glewStrLen((const GLubyte*)name);
+
+                       for (i = 0; i < max; i++) {
+                               ext = pglGetStringi(GL_EXTENSIONS, i);
+
+                               if (_glewStrSame((const GLubyte*)name, ext, 
len))
+                                       return GL_TRUE;
+                       }
+               }
+       }
+
+       return GL_FALSE;
 }
 
 #if !defined(_WIN32) || !defined(GLEW_MX)
@@ -11775,10 +11798,16 @@
   }                                 
 
   /* query opengl extensions string */
-  extStart = glGetString(GL_EXTENSIONS);
-  if (extStart == 0)
-    extStart = (const GLubyte*)"";
-  extEnd = extStart + _glewStrLen(extStart);
+  if (!GLEW_VERSION_3_0) {
+         extStart = glGetString(GL_EXTENSIONS);
+         if (extStart == 0)
+               extStart = (const GLubyte*)"";
+         extEnd = extStart + _glewStrLen(extStart);
+  }
+  else { // XXX jwilkins: unified extension string is deprecated
+         extStart = 0;
+         extEnd   = 0;
+  }
 
   /* initialize extensions */
 #ifdef GL_VERSION_1_1

Modified: branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.cpp
===================================================================
--- branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.cpp 
2013-07-29 11:42:23 UTC (rev 58716)
+++ branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.cpp 
2013-07-29 14:47:23 UTC (rev 58717)
@@ -44,33 +44,33 @@
 const char* get_glew_error_message_string(GLenum error)
 {
        switch (error) {
-               case GLEW_OK: /* also GLEW_NO_ERROR */
-                       return "OK";
-
-               case GLEW_ERROR_NO_GL_VERSION:
-                       return "Missing GL version";
-
-               case GLEW_ERROR_GL_VERSION_10_ONLY:
-                       return "Need at least OpenGL 1.1";
-
-               case GLEW_ERROR_GLX_VERSION_11_ONLY:
-                       return "Need at least GLX 1.2";
-
-               case GLEW_ERROR_NOT_GLES_VERSION:
-                       return "Need to be OpenGL ES version";
-
-               case GLEW_ERROR_GLES_VERSION:
-                       return "Need to be desktop OpenGL version";
-
-               case GLEW_ERROR_NO_EGL_VERSION:
-                       return "Missing EGL version";
-
-               case GLEW_ERROR_EGL_VERSION_10_ONLY:
-                       return "Need at least EGL 1.1";
-
-               default:
-                       return NULL;
-       }
+               case GLEW_OK: /* also GLEW_NO_ERROR */
+                       return "OK";
+
+               case GLEW_ERROR_NO_GL_VERSION:
+                       return "Missing GL version";
+
+               case GLEW_ERROR_GL_VERSION_10_ONLY:
+                       return "Need at least OpenGL 1.1";
+
+               case GLEW_ERROR_GLX_VERSION_11_ONLY:
+                       return "Need at least GLX 1.2";
+
+               case GLEW_ERROR_NOT_GLES_VERSION:
+                       return "Need to be OpenGL ES version";
+
+               case GLEW_ERROR_GLES_VERSION:
+                       return "Need to be desktop OpenGL version";
+
+               case GLEW_ERROR_NO_EGL_VERSION:
+                       return "Missing EGL version";
+
+               case GLEW_ERROR_EGL_VERSION_10_ONLY:
+                       return "Need at least EGL 1.1";
+
+               default:
+                       return NULL;
+       }
 }
 
 
@@ -78,33 +78,33 @@
 const char* get_glew_error_enum_string(GLenum error)
 {
        switch (error) {
-               case GLEW_OK: /* also GLEW_NO_ERROR */
-                       return "GLEW_OK";
-
-               case GLEW_ERROR_NO_GL_VERSION:
-                       return "GLEW_ERROR_NO_GL_VERSION";
-
-               case GLEW_ERROR_GL_VERSION_10_ONLY:
-                       return "GLEW_ERROR_GL_VERSION_10_ONLY";
-
-               case GLEW_ERROR_GLX_VERSION_11_ONLY:
-                       return "GLEW_ERROR_GLX_VERSION_11_ONLY";
-
-               case GLEW_ERROR_NOT_GLES_VERSION:
-                       return "GLEW_ERROR_NOT_GLES_VERSION";
-
-               case GLEW_ERROR_GLES_VERSION:
-                       return "GLEW_ERROR_GLES_VERSION";
-
-               case GLEW_ERROR_NO_EGL_VERSION:
-                       return "GLEW_ERROR_NO_EGL_VERSION";
-
-               case GLEW_ERROR_EGL_VERSION_10_ONLY:
-                       return "GLEW_ERROR_EGL_VERSION_10_ONLY";
-
-               default:
-                       return NULL;
-       }
+               case GLEW_OK: /* also GLEW_NO_ERROR */
+                       return "GLEW_OK";
+
+               case GLEW_ERROR_NO_GL_VERSION:
+                       return "GLEW_ERROR_NO_GL_VERSION";
+
+               case GLEW_ERROR_GL_VERSION_10_ONLY:
+                       return "GLEW_ERROR_GL_VERSION_10_ONLY";
+
+               case GLEW_ERROR_GLX_VERSION_11_ONLY:
+                       return "GLEW_ERROR_GLX_VERSION_11_ONLY";
+
+               case GLEW_ERROR_NOT_GLES_VERSION:
+                       return "GLEW_ERROR_NOT_GLES_VERSION";
+
+               case GLEW_ERROR_GLES_VERSION:
+                       return "GLEW_ERROR_GLES_VERSION";
+
+               case GLEW_ERROR_NO_EGL_VERSION:
+                       return "GLEW_ERROR_NO_EGL_VERSION";
+
+               case GLEW_ERROR_EGL_VERSION_10_ONLY:
+                       return "GLEW_ERROR_EGL_VERSION_10_ONLY";
+
+               default:
+                       return NULL;
+       }
 }
 
 
@@ -123,15 +123,15 @@
                        line,
                        text,
                        error,
-                       code ? code : "<Unknown>",
-                       msg  ? msg  : "<Unknown>");
+                       code ? code : "<no symbol>",
+                       msg  ? msg  : "<no message>");
 #else
                fprintf(
                        stderr,
                        "GLEW Error (%04X): %s: %s\n",
                        error,
-                       code ? code : "<Unknown>",
-                       msg  ? msg  : "<Unknown>");
+                       code ? code : "<no symbol>",
+                       msg  ? msg  : "<no message>");
 #endif
        }
 
@@ -150,3 +150,21 @@
 
        GLEW_CHK(glewInit());
 }
+
+
+
+int GHOST_PixelFormat::computeWeight() const
+{
+}
+
+
+
+void GHOST_PixelFormat::print() const
+{
+}
+
+
+
+int GHOST_ChoosePixelFormat(GHOST_PixelFormatFactory& factory)
+{
+}

Modified: branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.h
===================================================================
--- branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.h   
2013-07-29 11:42:23 UTC (rev 58716)
+++ branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_Context.h   
2013-07-29 14:47:23 UTC (rev 58717)
@@ -111,4 +111,39 @@
 
 
 
+class GHOST_PixelFormat {
+public:
+       enum swap_t { UNKNOWN, COPY, EXCHANGE, UNDEFINED };
+
+       virtual bool   isUsable()     const = 0;
+       virtual int    colorBits()    const = 0;
+       virtual int    alphaBits()    const = 0;
+       virtual int    depthBits()    const = 0;
+       virtual int    stencilBits()  const = 0;
+       virtual int    samples()      const = 0;
+       virtual bool   sRGB()         const = 0;
+       virtual swap_t swapMethod()   const = 0;
+
+       int computeWeight() const;
+
+       void print() const;
+};
+
+
+
+class GHOST_PixelFormatChooser {
+public:
+       int choosePixelFormat(GHOST_PixelFormatFactory& factory);
+
+protected:
+       virtual int                systemChoosePixelFormat() const = 0;
+       virtual int                count()                   const = 0;
+       virtual GHOST_PixelFormat* get(int i)                const = 0;
+};
+
+
+
+
+
+
 #endif // __GHOST_CONTEXT_H__

Modified: branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_ContextWGL.cpp
===================================================================
--- branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_ContextWGL.cpp      
2013-07-29 11:42:23 UTC (rev 58716)
+++ branches/soc-2013-viewport_fx/intern/ghost/intern/GHOST_ContextWGL.cpp      
2013-07-29 14:47:23 UTC (rev 58717)
@@ -154,6 +154,140 @@
 
 
 
+class GHOST_PixelFormatPFD : public GHOST_PixelFormat {
+public:
+       GHOST_PixelFormatPFD(HDC hDC, int i)
+       {
+               int check = ::DescribePixelFormat(hDC, i, 
sizeof(PIXELFORMATDESCRIPTOR), &pfd);
+               WIN32_CHK(check != 0);
+       }
+
+       virtual bool isUsable() const
+       {
+               const DWORD love = 
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER|PFD_TYPE_RGBA;
+               const DWORD hate = PFD_GENERIC_FORMAT;
+
+               return (love & pfd.dwFlags) == love  &&  !(hate & pfd.dwFlags);
+       }
+
+       virtual swap_t swapMethod() const
+       {
+               if (pfd.dwFlags & PFD_SWAP_COPY)
+                       return COPY;
+               else if (pfd.dwFlags & PFD_SWAP_EXCHANGE)
+                       return EXCHANGE;
+               else
+                       return UNKNOWN;
+       }
+
+       virtual int    colorBits()    const { return pfd.cColorBits;   }
+       virtual int    alphaBits()    const { return pfd.cAlphaBits;   }
+       virtual int    depthBits()    const { return pfd.cDepthBits;   }
+       virtual int    stencilBits()  const { return pfd.cStencilBits; }
+       virtual int    samples()      const { return 0;                }
+       virtual bool   sRGB()         const { return false;            }
+
+private:
+       PIXELFORMATDESCRIPTOR pfd;
+};
+
+
+
+class GHOST_PixelFormatARB : public GHOST_PixelFormat {
+public:
+       GHOST_PixelFormatARB(HDC hDC, int iPixelFormat)
+       {
+               valid = ::wglGetPixelFormatAttribivARB(hDC, iPixelFormat, 0, 
nAttributes, iAttributes, value);
+
+               WIN32_CHK(valid);
+
+               if (WGLEW_ARB_multisample) {
+                       int attribute = WGL_SAMPLES_ARB;
+
+                       BOOL check = ::wglGetPixelFormatAttribivARB(hDC, 
iPixelFormat, 0, 1, &attribute, &_samples);
+
+                       if (!check)
+                               _samples = 0;
+               }
+               else {
+                       _samples = 0;
+               }
+
+               if (WGL_ARB_framebuffer_sRGB) {
+                       int attribute = WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB;
+
+                       BOOL check = ::wglGetPixelFormatAttribivARB(hDC, 
iPixelFormat, 0, 1, &attribute, &_sRGB);
+
+                       if (!check)
+                               _sRGB = false;
+               }
+               else {
+                       _sRGB = false;
+               }
+       }
+
+       virtual bool   isUsable()     const
+       {
+               return
+                       valid                                 &&
+                       value[0] /* draw to window */         &&
+                       value[1] == WGL_FULL_ACCELERATION_ARB &&
+                       value[3] /* support opengl */         &&
+                       value[4] /* double buffer  */         &&
+                       value[6] == WGL_TYPE_RGBA_ARB;
+       }
+
+       virtual swap_t swapMethod() const
+       {
+               switch (value[2]) {
+                       case WGL_SWAP_EXCHANGE_ARB:
+                               return EXCHANGE;
+
+                       case WGL_SWAP_COPY_ARB:
+                               return COPY;
+
+                       case WGL_SWAP_UNDEFINED_ARB:
+                               return UNDEFINED;
+
+                       default:
+                               return UNKNOWN;
+               }
+       }
+
+       virtual int    colorBits()    const { return value[ 7]; }
+       virtual int    alphaBits()    const { return value[ 8]; }
+       virtual int    depthBits()    const { return value[ 9]; }
+       virtual int    stencilBits()  const { return value[10]; }
+       virtual int    samples()      const { return _samples;  }
+       virtual bool   sRGB()         const { return _sRGB;     }
+
+private:
+       static const int nAttributes = 11;
+       static const int iAttributes[nAttributes];
+
+       bool valid;
+       int value[nAttributes];
+       int _samples;
+       int _sRGB;
+};
+

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to