⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fxwgl.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 3 页
字号:
}GLAPI int GLAPIENTRYwglGetSwapIntervalEXT (void){   return (ctx == NULL) ? -1 : ctx->swapInterval;}GLAPI BOOL GLAPIENTRYwglGetDeviceGammaRamp3DFX (HDC hdc, LPVOID arrays){   /* gammaTable should be per-context */   memcpy(arrays, gammaTable, 3 * 256 * sizeof(GLushort));   return TRUE;}GLAPI BOOL GLAPIENTRYwglSetDeviceGammaRamp3DFX (HDC hdc, LPVOID arrays){   GLint i, tableSize, inc, index;   GLushort *red, *green, *blue;   FxU32 gammaTableR[256], gammaTableG[256], gammaTableB[256];   /* gammaTable should be per-context */   memcpy(gammaTable, arrays, 3 * 256 * sizeof(GLushort));   tableSize = FX_grGetInteger(GR_GAMMA_TABLE_ENTRIES);   inc = 256 / tableSize;   red = (GLushort *)arrays;   green = (GLushort *)arrays + 256;   blue = (GLushort *)arrays + 512;   for (i = 0, index = 0; i < tableSize; i++, index += inc) {      gammaTableR[i] = red[index] >> 8;      gammaTableG[i] = green[index] >> 8;      gammaTableB[i] = blue[index] >> 8;   }   grLoadGammaTable(tableSize, gammaTableR, gammaTableG, gammaTableB);   return TRUE;}typedef void *HPBUFFERARB;/* WGL_ARB_pixel_format */GLAPI BOOL GLAPIENTRYwglGetPixelFormatAttribivARB (HDC hdc,                              int iPixelFormat,                              int iLayerPlane,                              UINT nAttributes,                              const int *piAttributes,                              int *piValues){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglGetPixelFormatAttribfvARB (HDC hdc,                              int iPixelFormat,                              int iLayerPlane,                              UINT nAttributes,                              const int *piAttributes,                              FLOAT *pfValues){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglChoosePixelFormatARB (HDC hdc,                         const int *piAttribIList,                         const FLOAT *pfAttribFList,                         UINT nMaxFormats,                         int *piFormats,                         UINT *nNumFormats){   SetLastError(0);   return FALSE;}/* WGL_ARB_render_texture */GLAPI BOOL GLAPIENTRYwglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglSetPbufferAttribARB (HPBUFFERARB hPbuffer,                        const int *piAttribList){   SetLastError(0);   return FALSE;}/* WGL_ARB_pbuffer */GLAPI HPBUFFERARB GLAPIENTRYwglCreatePbufferARB (HDC hDC,                     int iPixelFormat,                     int iWidth,                     int iHeight,                     const int *piAttribList){   SetLastError(0);   return NULL;}GLAPI HDC GLAPIENTRYwglGetPbufferDCARB (HPBUFFERARB hPbuffer){   SetLastError(0);   return NULL;}GLAPI int GLAPIENTRYwglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC){   SetLastError(0);   return -1;}GLAPI BOOL GLAPIENTRYwglDestroyPbufferARB (HPBUFFERARB hPbuffer){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglQueryPbufferARB (HPBUFFERARB hPbuffer,                    int iAttribute,                    int *piValue){   SetLastError(0);   return FALSE;}GLAPI const char * GLAPIENTRYwglGetExtensionsStringEXT (void){   return "WGL_3DFX_gamma_control "          "WGL_EXT_swap_control "          "WGL_EXT_extensions_string WGL_ARB_extensions_string"         /*WGL_ARB_pixel_format WGL_ARB_render_texture WGL_ARB_pbuffer*/;}GLAPI const char * GLAPIENTRYwglGetExtensionsStringARB (HDC hdc){   return wglGetExtensionsStringEXT();}static struct {   const char *name;   PROC func;} wgl_ext[] = {       {"wglGetExtensionsStringARB",    (PROC)wglGetExtensionsStringARB},       {"wglGetExtensionsStringEXT",    (PROC)wglGetExtensionsStringEXT},       {"wglSwapIntervalEXT",           (PROC)wglSwapIntervalEXT},       {"wglGetSwapIntervalEXT",        (PROC)wglGetSwapIntervalEXT},       {"wglGetDeviceGammaRamp3DFX",    (PROC)wglGetDeviceGammaRamp3DFX},       {"wglSetDeviceGammaRamp3DFX",    (PROC)wglSetDeviceGammaRamp3DFX},       /* WGL_ARB_pixel_format */       {"wglGetPixelFormatAttribivARB", (PROC)wglGetPixelFormatAttribivARB},       {"wglGetPixelFormatAttribfvARB", (PROC)wglGetPixelFormatAttribfvARB},       {"wglChoosePixelFormatARB",      (PROC)wglChoosePixelFormatARB},       /* WGL_ARB_render_texture */       {"wglBindTexImageARB",           (PROC)wglBindTexImageARB},       {"wglReleaseTexImageARB",        (PROC)wglReleaseTexImageARB},       {"wglSetPbufferAttribARB",       (PROC)wglSetPbufferAttribARB},       /* WGL_ARB_pbuffer */       {"wglCreatePbufferARB",          (PROC)wglCreatePbufferARB},       {"wglGetPbufferDCARB",           (PROC)wglGetPbufferDCARB},       {"wglReleasePbufferDCARB",       (PROC)wglReleasePbufferDCARB},       {"wglDestroyPbufferARB",         (PROC)wglDestroyPbufferARB},       {"wglQueryPbufferARB",           (PROC)wglQueryPbufferARB},       {NULL, NULL}};GLAPI PROC GLAPIENTRYwglGetProcAddress (LPCSTR lpszProc){   int i;   PROC p = (PROC)_glapi_get_proc_address((const char *)lpszProc);   /* we can't BlendColor. work around buggy applications */   if (p && strcmp(lpszProc, "glBlendColor")         && strcmp(lpszProc, "glBlendColorEXT"))      return p;   for (i = 0; wgl_ext[i].name; i++) {      if (!strcmp(lpszProc, wgl_ext[i].name)) {         return wgl_ext[i].func;      }   }   SetLastError(0);   return NULL;}GLAPI PROC GLAPIENTRYwglGetDefaultProcAddress (LPCSTR lpszProc){   SetLastError(0);   return NULL;}GLAPI BOOL GLAPIENTRYwglMakeCurrent (HDC hdc, HGLRC hglrc){   if ((hdc == NULL) && (hglrc == NULL))      return TRUE;   if (!ctx || hglrc != (HGLRC)1 || WindowFromDC(hdc) != hWND) {      SetLastError(0);      return FALSE;   }   hDC = hdc;   fxMesaMakeCurrent(ctx);   return TRUE;}GLAPI BOOL GLAPIENTRYwglShareLists (HGLRC hglrc1, HGLRC hglrc2){   if (!ctx || hglrc1 != (HGLRC)1 || hglrc1 != hglrc2) {      SetLastError(0);      return FALSE;   }   return TRUE;}static BOOLwglUseFontBitmaps_FX (HDC fontDevice, DWORD firstChar, DWORD numChars,                      DWORD listBase){   TEXTMETRIC metric;   BITMAPINFO *dibInfo;   HDC bitDevice;   COLORREF tempColor;   int i;   GetTextMetrics(fontDevice, &metric);   dibInfo = (BITMAPINFO *)calloc(sizeof(BITMAPINFO) + sizeof(RGBQUAD), 1);   dibInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);   dibInfo->bmiHeader.biPlanes = 1;   dibInfo->bmiHeader.biBitCount = 1;   dibInfo->bmiHeader.biCompression = BI_RGB;   bitDevice = CreateCompatibleDC(fontDevice);   /* Swap fore and back colors so the bitmap has the right polarity */   tempColor = GetBkColor(bitDevice);   SetBkColor(bitDevice, GetTextColor(bitDevice));   SetTextColor(bitDevice, tempColor);   /* Place chars based on base line */   SetTextAlign(bitDevice, TA_BASELINE);   for (i = 0; i < (int)numChars; i++) {      SIZE size;      char curChar;      int charWidth, charHeight, bmapWidth, bmapHeight, numBytes, res;      HBITMAP bitObject;      HGDIOBJ origBmap;      unsigned char *bmap;      curChar = (char)(i + firstChar); /* [koolsmoky] explicit cast */      /* Find how high/wide this character is */      GetTextExtentPoint32(bitDevice, &curChar, 1, &size);      /* Create the output bitmap */      charWidth = size.cx;      charHeight = size.cy;      bmapWidth = ((charWidth + 31) / 32) * 32; /* Round up to the next multiple of 32 bits */      bmapHeight = charHeight;      bitObject = CreateCompatibleBitmap(bitDevice, bmapWidth, bmapHeight);      /*VERIFY(bitObject);*/      /* Assign the output bitmap to the device */      origBmap = SelectObject(bitDevice, bitObject);      PatBlt(bitDevice, 0, 0, bmapWidth, bmapHeight, BLACKNESS);      /* Use our source font on the device */      SelectObject(bitDevice, GetCurrentObject(fontDevice, OBJ_FONT));      /* Draw the character */      TextOut(bitDevice, 0, metric.tmAscent, &curChar, 1);      /* Unselect our bmap object */      SelectObject(bitDevice, origBmap);      /* Convert the display dependant representation to a 1 bit deep DIB */      numBytes = (bmapWidth * bmapHeight) / 8;      bmap = MALLOC(numBytes);      dibInfo->bmiHeader.biWidth = bmapWidth;      dibInfo->bmiHeader.biHeight = bmapHeight;      res = GetDIBits(bitDevice, bitObject, 0, bmapHeight, bmap,                      dibInfo, DIB_RGB_COLORS);      /* Create the GL object */      glNewList(i + listBase, GL_COMPILE);      glBitmap(bmapWidth, bmapHeight, 0.0, metric.tmDescent,               charWidth, 0.0, bmap);      glEndList();      /* CheckGL(); */      /* Destroy the bmap object */      DeleteObject(bitObject);      /* Deallocate the bitmap data */      FREE(bmap);   }   /* Destroy the DC */   DeleteDC(bitDevice);   FREE(dibInfo);   return TRUE;}GLAPI BOOL GLAPIENTRYwglUseFontBitmapsW (HDC hdc, DWORD first, DWORD count, DWORD listBase){   return FALSE;}GLAPI BOOL GLAPIENTRYwglUseFontOutlinesA (HDC hdc, DWORD first, DWORD count,                     DWORD listBase, FLOAT deviation,                     FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglUseFontOutlinesW (HDC hdc, DWORD first, DWORD count,                     DWORD listBase, FLOAT deviation,                     FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf){   SetLastError(0);   return FALSE;}GLAPI BOOL GLAPIENTRYwglSwapLayerBuffers (HDC hdc, UINT fuPlanes){   if (ctx && WindowFromDC(hdc) == hWND) {      fxMesaSwapBuffers();      return TRUE;   }   SetLastError(0);   return FALSE;}static intpfd_tablen (void){   /* we should take an envvar for `fxMesaSelectCurrentBoard' */   return (fxMesaSelectCurrentBoard(0) < GR_SSTTYPE_Voodoo4)         ? 2                      /* only 16bit entries */         : sizeof(pix) / sizeof(pix[0]);  /* full table */}GLAPI int GLAPIENTRYwglChoosePixelFormat (HDC hdc, const PIXELFORMATDESCRIPTOR *ppfd){   int i, best = -1, qt_valid_pix;   PIXELFORMATDESCRIPTOR pfd = *ppfd;   qt_valid_pix = pfd_tablen();#if 1 || QUAKE2 || GORE   /* QUAKE2: 24+32 */   /* GORE  : 24+16 */   if ((pfd.cColorBits == 24) || (pfd.cColorBits == 32)) {      /* the first 2 entries are 16bit */      pfd.cColorBits = (qt_valid_pix > 2) ? 32 : 16;   }   if (pfd.cColorBits == 32) {      pfd.cDepthBits = 24;   } else if (pfd.cColorBits == 16) {      pfd.cDepthBits = 16;   }#endif   if (pfd.nSize != sizeof(PIXELFORMATDESCRIPTOR) || pfd.nVersion != 1) {      SetLastError(0);      return 0;   }   for (i = 0; i < qt_valid_pix; i++) {      if (pfd.cColorBits > 0 && pix[i].pfd.cColorBits != pfd.cColorBits)         continue;      if ((pfd.dwFlags & PFD_DRAW_TO_WINDOW)          && !(pix[i].pfd.dwFlags & PFD_DRAW_TO_WINDOW)) continue;      if ((pfd.dwFlags & PFD_DRAW_TO_BITMAP)          && !(pix[i].pfd.dwFlags & PFD_DRAW_TO_BITMAP)) continue;      if ((pfd.dwFlags & PFD_SUPPORT_GDI)          && !(pix[i].pfd.dwFlags & PFD_SUPPORT_GDI)) continue;      if ((pfd.dwFlags & PFD_SUPPORT_OPENGL)          && !(pix[i].pfd.dwFlags & PFD_SUPPORT_OPENGL)) continue;      if (!(pfd.dwFlags & PFD_DOUBLEBUFFER_DONTCARE)          && ((pfd.dwFlags & PFD_DOUBLEBUFFER) !=              (pix[i].pfd.dwFlags & PFD_DOUBLEBUFFER))) continue;#if 1 /* Doom3 fails here! */      if (!(pfd.dwFlags & PFD_STEREO_DONTCARE)          && ((pfd.dwFlags & PFD_STEREO) !=              (pix[i].pfd.dwFlags & PFD_STEREO))) continue;#endif      if (pfd.cDepthBits > 0 && pix[i].pfd.cDepthBits == 0)         continue;              /* need depth buffer */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -