zoukankan      html  css  js  c++  java
  • 第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
    }
  • 相关阅读:
    什么是结构化数据?什么是半结构化数据?
    安卓图表引擎AChartEngine(一)
    Android中通过pid获取app包名
    Android USER 版本与ENG 版本的差异--MTK官方解释
    Android 各层中日志打印功能的应用
    Android音频系统之AudioFlinger(二)
    Android音频系统之AudioFlinger(一)
    Android音频系统之音频框架
    第1章 音频系统
    Android音频系统之AudioPolicyService
  • 原文地址:https://www.cnblogs.com/javastart/p/8251139.html
Copyright © 2011-2022 走看看