• 第16月第9天 opengl glCltDispatchTable


    1.glCltDispatchTable

    typedef struct _GLTEBINFO {
        // glCltDispatchTable must be the first field for the assembly code to work.
        // We pad the table with an extra entry if necessary to make glMsgBatchInfo
        // start at a qword boundary.
        PVOID glCltDispatchTable[(OPENGL_VERSION_110_ENTRIES+GL_EXT_PROC_TABLE_SIZE+1)/2*2];
    
        // This field must be qword aligned!
        BYTE glMsgBatchInfo[SHARED_SECTION_SIZE];
    
    #ifdef _WIN95_
        // These fields must match the NT TEB definitions!
    
        PVOID glDispatchTable[280]; // fast dispatch table
        ULONG glReserved1[26];      // POLYARRAY structure
        PVOID glReserved2;          // pointer to POLYMATERIAL structure
        PVOID glSectionInfo;        // generic server GC
        PVOID glSection;            // Not used
        PVOID glTable;              // Used only for NT x86
        PVOID glCurrentRC;          // generic client RC
        PVOID glContext;            // reserved by OpenGL ICD drivers
    #endif // _WIN95_
    } GLTEBINFO, *PGLTEBINFO;
    // There are now 2 tables!
    // One table is used for RGBA mode and the other is for CI mode.
    
    GLCLTPROCTABLE glCltRGBAProcTable = {
    
    /* Number of function entries in the table */
    
         sizeof(GLDISPATCHTABLE) / sizeof(PROC),
    
    /* gl Entry points */
      {
         glcltNewList                ,
         glcltEndList                ,
         glcltCallList               ,
         glcltCallLists              ,
         glcltDeleteLists            ,
         glcltGenLists               ,
         glcltListBase               ,
         glcltBegin                  ,
         glcltBitmap                 ,
         glcltColor3b_InRGBA         ,
         glcltColor3bv_InRGBA        ,
         glcltColor3d_InRGBA         ,
         glcltColor3dv_InRGBA        ,
         glcltColor3f_InRGBA         ,
         glcltColor3fv_InRGBA        ,
         glcltColor3i_InRGBA         ,
         glcltColor3iv_InRGBA        ,
         glcltColor3s_InRGBA         ,
         glcltColor3sv_InRGBA        ,
         glcltColor3ub_InRGBA        ,
         glcltColor3ubv_InRGBA       ,
         glcltColor3ui_InRGBA        ,
         glcltColor3uiv_InRGBA       ,
         glcltColor3us_InRGBA        ,
         glcltColor3usv_InRGBA       ,
         glcltColor4b_InRGBA         ,
         glcltColor4bv_InRGBA        ,
         glcltColor4d_InRGBA         ,
         glcltColor4dv_InRGBA        ,
         glcltColor4f_InRGBA         ,
         glcltColor4fv_InRGBA        ,
         glcltColor4i_InRGBA         ,
         glcltColor4iv_InRGBA        ,
         glcltColor4s_InRGBA         ,
         glcltColor4sv_InRGBA        ,
         glcltColor4ub_InRGBA        ,
         glcltColor4ubv_InRGBA       ,
         glcltColor4ui_InRGBA        ,
         glcltColor4uiv_InRGBA       ,
         glcltColor4us_InRGBA        ,
         glcltColor4usv_InRGBA       ,
         glcltEdgeFlag               ,
         glcltEdgeFlagv              ,
         glcltEnd                    ,
         glcltIndexd_InRGBA          ,
         glcltIndexdv_InRGBA         ,
         glcltIndexf_InRGBA          ,
         glcltIndexfv_InRGBA         ,
         glcltIndexi_InRGBA          ,
         glcltIndexiv_InRGBA         ,
         glcltIndexs_InRGBA          ,
         glcltIndexsv_InRGBA         ,
         glcltNormal3b               ,
         glcltNormal3bv              ,
         glcltNormal3d               ,
         glcltNormal3dv              ,
         glcltNormal3f               ,
         glcltNormal3fv              ,
         glcltNormal3i               ,
         glcltNormal3iv              ,
         glcltNormal3s               ,
         glcltNormal3sv              ,
         glcltRasterPos2d            ,
         glcltRasterPos2dv           ,
         glcltRasterPos2f            ,
         glcltRasterPos2fv           ,
         glcltRasterPos2i            ,
         glcltRasterPos2iv           ,
         glcltRasterPos2s            ,
         glcltRasterPos2sv           ,
         glcltRasterPos3d            ,
         glcltRasterPos3dv           ,
         glcltRasterPos3f            ,
         glcltRasterPos3fv           ,
         glcltRasterPos3i            ,
         glcltRasterPos3iv           ,
         glcltRasterPos3s            ,
         glcltRasterPos3sv           ,
         glcltRasterPos4d            ,
         glcltRasterPos4dv           ,
         glcltRasterPos4f            ,
         glcltRasterPos4fv           ,
         glcltRasterPos4i            ,
         glcltRasterPos4iv           ,
         glcltRasterPos4s            ,
         glcltRasterPos4sv           ,
         glcltRectd                  ,
         glcltRectdv                 ,
         glcltRectf                  ,
         glcltRectfv                 ,
         glcltRecti                  ,
         glcltRectiv                 ,
         glcltRects                  ,
         glcltRectsv                 ,
         glcltTexCoord1d             ,
         glcltTexCoord1dv            ,
         glcltTexCoord1f             ,
         glcltTexCoord1fv            ,
         glcltTexCoord1i             ,
         glcltTexCoord1iv            ,
         glcltTexCoord1s             ,
         glcltTexCoord1sv            ,
         glcltTexCoord2d             ,
         glcltTexCoord2dv            ,
         glcltTexCoord2f             ,
         glcltTexCoord2fv            ,
         glcltTexCoord2i             ,
         glcltTexCoord2iv            ,
         glcltTexCoord2s             ,
         glcltTexCoord2sv            ,
         glcltTexCoord3d             ,
         glcltTexCoord3dv            ,
         glcltTexCoord3f             ,
         glcltTexCoord3fv            ,
         glcltTexCoord3i             ,
         glcltTexCoord3iv            ,
         glcltTexCoord3s             ,
         glcltTexCoord3sv            ,
         glcltTexCoord4d             ,
         glcltTexCoord4dv            ,
         glcltTexCoord4f             ,
         glcltTexCoord4fv            ,
         glcltTexCoord4i             ,
         glcltTexCoord4iv            ,
         glcltTexCoord4s             ,
         glcltTexCoord4sv            ,
         glcltVertex2d               ,
         glcltVertex2dv              ,
         glcltVertex2f               ,
         glcltVertex2fv              ,
         glcltVertex2i               ,
         glcltVertex2iv              ,
         glcltVertex2s               ,
         glcltVertex2sv              ,
         glcltVertex3d               ,
         glcltVertex3dv              ,
         glcltVertex3f               ,
         glcltVertex3fv              ,
         glcltVertex3i               ,
         glcltVertex3iv              ,
         glcltVertex3s               ,
         glcltVertex3sv              ,
         glcltVertex4d               ,
         glcltVertex4dv              ,
         glcltVertex4f               ,
         glcltVertex4fv              ,
         glcltVertex4i               ,
         glcltVertex4iv              ,
         glcltVertex4s               ,
         glcltVertex4sv              ,
         glcltClipPlane              ,
         glcltColorMaterial          ,
         glcltCullFace               ,
         glcltFogf                   ,
         glcltFogfv                  ,
         glcltFogi                   ,
         glcltFogiv                  ,
         glcltFrontFace              ,
         glcltHint                   ,
         glcltLightf                 ,
         glcltLightfv                ,
         glcltLighti                 ,
         glcltLightiv                ,
         glcltLightModelf            ,
         glcltLightModelfv           ,
         glcltLightModeli            ,
         glcltLightModeliv           ,
         glcltLineStipple            ,
         glcltLineWidth              ,
         glcltMaterialf              ,
         glcltMaterialfv             ,
         glcltMateriali              ,
         glcltMaterialiv             ,
         glcltPointSize              ,
         glcltPolygonMode            ,
         glcltPolygonStipple         ,
         glcltScissor                ,
         glcltShadeModel             ,
         glcltTexParameterf          ,
         glcltTexParameterfv         ,
         glcltTexParameteri          ,
         glcltTexParameteriv         ,
         glcltTexImage1D             ,
         glcltTexImage2D             ,
         glcltTexEnvf                ,
         glcltTexEnvfv               ,
         glcltTexEnvi                ,
         glcltTexEnviv               ,
         glcltTexGend                ,
         glcltTexGendv               ,
         glcltTexGenf                ,
         glcltTexGenfv               ,
         glcltTexGeni                ,
         glcltTexGeniv               ,
         glcltFeedbackBuffer         ,
         glcltSelectBuffer           ,
         glcltRenderMode             ,
         glcltInitNames              ,
         glcltLoadName               ,
         glcltPassThrough            ,
         glcltPopName                ,
         glcltPushName               ,
         glcltDrawBuffer             ,
         glcltClear                  ,
         glcltClearAccum             ,
         glcltClearIndex             ,
         glcltClearColor             ,
         glcltClearStencil           ,
         glcltClearDepth             ,
         glcltStencilMask            ,
         glcltColorMask              ,
         glcltDepthMask              ,
         glcltIndexMask              ,
         glcltAccum                  ,
         glcltDisable                ,
         glcltEnable                 ,
         glcltFinish                 ,
         glcltFlush                  ,
         glcltPopAttrib              ,
         glcltPushAttrib             ,
         glcltMap1d                  ,
         glcltMap1f                  ,
         glcltMap2d                  ,
         glcltMap2f                  ,
         glcltMapGrid1d              ,
         glcltMapGrid1f              ,
         glcltMapGrid2d              ,
         glcltMapGrid2f              ,
         glcltEvalCoord1d            ,
         glcltEvalCoord1dv           ,
         glcltEvalCoord1f            ,
         glcltEvalCoord1fv           ,
         glcltEvalCoord2d            ,
         glcltEvalCoord2dv           ,
         glcltEvalCoord2f            ,
         glcltEvalCoord2fv           ,
         glcltEvalMesh1              ,
         glcltEvalPoint1             ,
         glcltEvalMesh2              ,
         glcltEvalPoint2             ,
         glcltAlphaFunc              ,
         glcltBlendFunc              ,
         glcltLogicOp                ,
         glcltStencilFunc            ,
         glcltStencilOp              ,
         glcltDepthFunc              ,
         glcltPixelZoom              ,
         glcltPixelTransferf         ,
         glcltPixelTransferi         ,
         glcltPixelStoref            ,
         glcltPixelStorei            ,
         glcltPixelMapfv             ,
         glcltPixelMapuiv            ,
         glcltPixelMapusv            ,
         glcltReadBuffer             ,
         glcltCopyPixels             ,
         glcltReadPixels             ,
         glcltDrawPixels             ,
         glcltGetBooleanv            ,
         glcltGetClipPlane           ,
         glcltGetDoublev             ,
         glcltGetError               ,
         glcltGetFloatv              ,
         glcltGetIntegerv            ,
         glcltGetLightfv             ,
         glcltGetLightiv             ,
         glcltGetMapdv               ,
         glcltGetMapfv               ,
         glcltGetMapiv               ,
         glcltGetMaterialfv          ,
         glcltGetMaterialiv          ,
         glcltGetPixelMapfv          ,
         glcltGetPixelMapuiv         ,
         glcltGetPixelMapusv         ,
         glcltGetPolygonStipple      ,
         glcltGetString              ,
         glcltGetTexEnvfv            ,
         glcltGetTexEnviv            ,
         glcltGetTexGendv            ,
         glcltGetTexGenfv            ,
         glcltGetTexGeniv            ,
         glcltGetTexImage            ,
         glcltGetTexParameterfv      ,
         glcltGetTexParameteriv      ,
         glcltGetTexLevelParameterfv ,
         glcltGetTexLevelParameteriv ,
         glcltIsEnabled              ,
         glcltIsList                 ,
         glcltDepthRange             ,
         glcltFrustum                ,
         glcltLoadIdentity           ,
         glcltLoadMatrixf            ,
         glcltLoadMatrixd            ,
         glcltMatrixMode             ,
         glcltMultMatrixf            ,
         glcltMultMatrixd            ,
         glcltOrtho                  ,
         glcltPopMatrix              ,
         glcltPushMatrix             ,
         glcltRotated                ,
         glcltRotatef                ,
         glcltScaled                 ,
         glcltScalef                 ,
         glcltTranslated             ,
         glcltTranslatef             ,
         glcltViewport               ,
         glcltArrayElement           ,
         glcltBindTexture            ,
         glcltColorPointer           ,
         glcltDisableClientState     ,
         glcltDrawArrays             ,
         glcltDrawElements           ,
         glcltEdgeFlagPointer        ,
         glcltEnableClientState      ,
         glcltIndexPointer           ,
         glcltIndexub_InRGBA         ,
         glcltIndexubv_InRGBA        ,
         glcltInterleavedArrays      ,
         glcltNormalPointer          ,
         glcltPolygonOffset          ,
         glcltTexCoordPointer        ,
         glcltVertexPointer          ,
         glcltAreTexturesResident    ,
         glcltCopyTexImage1D         ,
         glcltCopyTexImage2D         ,
         glcltCopyTexSubImage1D      ,
         glcltCopyTexSubImage2D      ,
         glcltDeleteTextures         ,
         glcltGenTextures            ,
         glcltGetPointerv            ,
         glcltIsTexture              ,
         glcltPrioritizeTextures     ,
         glcltTexSubImage1D          ,
         glcltTexSubImage2D          ,
         glcltPopClientAttrib        ,
         glcltPushClientAttrib       ,
      }
    
    };
    
    GLCLTPROCTABLE glCltCIProcTable = {
    
    /* Number of function entries in the table */
    
         sizeof(GLDISPATCHTABLE) / sizeof(PROC),
    
    /* gl Entry points */
      {
    ...

    2.ntstubs.c

    HWND _CreateWindowEx(
        DWORD dwExStyle,
        LPCTSTR pClassName,
        LPCTSTR pWindowName,
        DWORD dwStyle,
        int x,
        int y,
        int nWidth,
        int nHeight,
        HWND hwndParent,
        HMENU hmenu,
        HANDLE hModule,
        LPVOID pParam,
        DWORD dwFlags,
        LPDWORD pWOW)
    {
    ...
    
    HWND NtUserCreateWindowEx(
        IN DWORD dwExStyle,
        IN PLARGE_STRING pstrClassName,
        IN PLARGE_STRING pstrWindowName OPTIONAL,
        IN DWORD dwStyle,
        IN int x,
        IN int y,
        IN int nWidth,
        IN int nHeight,
        IN HWND hwndParent,
        IN HMENU hmenu,
        IN HANDLE hModule,
        IN LPVOID pParam,
        IN DWORD dwFlags,
        IN LPDWORD pWOW OPTIONAL)
    {
    ...
    
    PWND xxxCreateWindowExWOW(
        DWORD         dwExStyle,
        PLARGE_STRING pstrClass,
        PLARGE_STRING pstrName,
        DWORD         style,
        int           x,
        int           y,
        int           cx,
        int           cy,
        PWND          pwndParent,
        PMENU         pMenu,
        HANDLE        hInstance,
        LPVOID        lpCreateParams,
        DWORD         dwExpWinVerAndFlags,
        LPDWORD       lpWOW)
    {
    ...

    3.CreateThread

    CWinThread::CWinThread(AFX_THREADPROC pfnThreadProc, LPVOID pParam)
    {
            m_pfnThreadProc = pfnThreadProc;
            m_pThreadParams = pParam;
    
            CommonConstruct();
    }
    
    ...
    
    BOOL CWinThread::CreateThread(DWORD dwCreateFlags, UINT nStackSize,
            LPSECURITY_ATTRIBUTES lpSecurityAttrs)
    {
    #if !defined(_MT) || defined(_NTSDK)
            dwCreateFlags;
            nStackSize;
            lpSecurityAttrs;
    
            return FALSE;
    #else
            ASSERT(m_hThread == NULL);  // already created?
    
            // create thread state
            AFX_THREAD_STATE* pThreadState = new AFX_THREAD_STATE;
            if (pThreadState == NULL)
                    return FALSE;
    
            // hook up the CWinThread object to the thread state
            pThreadState->m_pCurrentWinThread = this;
    
            // create the thread (it may or may not start to run)
            m_hThread = (HANDLE)_beginthreadex(lpSecurityAttrs, nStackSize,
                    &_AfxThreadEntry, pThreadState, dwCreateFlags, (UINT*)&m_nThreadID);
            if (m_hThread == NULL)
            {
                    // cleanup before returning
                    pThreadState->m_pCurrentWinThread = NULL;
                    delete pThreadState;
                    return FALSE;
            }
    
            return TRUE;
    #endif //!defined(_MT) || defined(_NTSDK)
    }
    
    ...
    
    UINT APIENTRY _AfxThreadEntry(void* pParam)
    {
            // initialize the thread state to point to this thread
            AFX_THREAD_STATE* pThreadState = (AFX_THREAD_STATE*)pParam;
            CWinThread* pThread = pThreadState->m_pCurrentWinThread;
            TlsSetValue(_afxThreadTlsIndex, pThreadState);
            ASSERT(AfxGetThreadState() == pThreadState);
            ASSERT(AfxGetThread() == pThread);
    
            // initialize MFC exception handling
    #ifndef _AFX_OLD_EXCEPTIONS
            set_terminate(&AfxStandardTerminate);
    #endif
            _set_new_handler(&AfxNewHandler);
    
            // thread inherits app's main window if not already set
            CWnd threadWnd;
            CWinApp* pApp = AfxGetApp();
            ASSERT(pApp != NULL);
            if (pThread->m_pMainWnd == NULL && pApp->m_pMainWnd->GetSafeHwnd() != NULL)
            {
                    // just attach the HWND
                    threadWnd.Attach(pApp->m_pMainWnd->m_hWnd);
                    pThread->m_pMainWnd = &threadWnd;
            }
    
    #if !defined(_USRDLL) && !defined(_AFXCTL)
            // initialize gray dialogs for this thread
            AFX_WIN_STATE* pWinState = AfxGetWinState();
    
            // initalize window creation hook
            ASSERT(pThreadState->m_hHookOldCbtFilter == NULL);
            pThreadState->m_hHookOldCbtFilter = ::SetWindowsHookEx(WH_CBT,
                    _AfxCbtFilterHook, NULL, ::GetCurrentThreadId());
    
            // initialize message filter hook
            ASSERT(pThreadState->m_hHookOldMsgFilter == NULL);
            pThreadState->m_hHookOldMsgFilter = ::SetWindowsHookEx(WH_MSGFILTER,
                    (HOOKPROC)_AfxMsgFilterHook, NULL, ::GetCurrentThreadId());
    
    #ifndef _MAC
            // intialize CTL3D for this thread
            if (pWinState->m_pfnAutoSubclass != NULL)
                    (*pWinState->m_pfnAutoSubclass)(AfxGetInstanceHandle());
    #endif
    #endif
    
            // first -- check for simple worker thread
            DWORD nResult;
            if (pThread->m_pfnThreadProc != NULL)
            {
                    nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams);
                    ASSERT_VALID(pThread);
            }
            // else -- check for thread with message loop
            else if (!pThread->InitInstance())
            {
                    ASSERT_VALID(pThread);
                    nResult = pThread->ExitInstance();
            }
            else
            {
                    // will stop after PostQuitMessage called
                    ASSERT_VALID(pThread);
                    nResult = pThread->Run();
            }
            AfxEndThread(nResult);
    
            return 0;   // not reached
    }
  • 相关阅读:
    Linux 常用命令总结(二)
    Linux(CentOS7)使用 RPM 安装 mysql 8.0.11
    Linux(CentOS7) 相关软件安装
    8、js——字符串
    7、js——数组
    6、js——创建对象方式
    5、js——this说明
    4、js——函数
    4、js——对象
    2、js编写位置
  • 原文地址:https://www.cnblogs.com/javastart/p/8251139.html
Copyright © 2020-2023  润新知