📄 dglcontext.h
字号:
/****************************************************************************** Mesa 3-D graphics library* Direct3D Driver Interface** ========================================================================** Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.** Permission is hereby granted, free of charge, to any person obtaining a* copy of this software and associated documentation files (the "Software"),* to deal in the Software without restriction, including without limitation* the rights to use, copy, modify, merge, publish, distribute, sublicense,* and/or sell copies of the Software, and to permit persons to whom the* Software is furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included* in all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL* SCITECH SOFTWARE INC BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE* SOFTWARE.** ======================================================================** Language: ANSI C* Environment: Windows 9x (Win32)** Description: OpenGL context handling.*****************************************************************************/#ifndef __DGLCONTEXT_H#define __DGLCONTEXT_H// Disable compiler complaints about DLL linkage#pragma warning (disable:4273)// Macros to control compilation#ifndef STRICT#define STRICT#endif // STRICT#define WIN32_LEAN_AND_MEAN#include <windows.h>#include <GL\gl.h>#ifdef _USE_GLD3_WGL #include "dglmacros.h" #include "dglglobals.h" #include "pixpack.h" #include "ddlog.h" #include "dglpf.h" #include "context.h" // Mesa context#else #include <ddraw.h> #include <d3d.h> #include "dglmacros.h" #include "dglglobals.h" #include "pixpack.h" #include "ddlog.h" #include "dglpf.h" #include "d3dvertex.h" #include "DirectGL.h" #include "context.h" // Mesa context #include "vb.h" // Mesa vertex buffer#endif // _USE_GLD3_WGL/*---------------------- Macros and type definitions ----------------------*/// TODO: Use a list instead of this constant!#define DGL_MAX_CONTEXTS 32// Structure for describing an OpenGL context#ifdef _USE_GLD3_WGLtypedef struct { BOOL bHasBeenCurrent; DGL_pixelFormat *lpPF; // Pointer to private driver data (this also contains the drawable). void *glPriv; // Mesa vars: GLcontext *glCtx; // The core Mesa context GLvisual *glVis; // Describes the color buffer GLframebuffer *glBuffer; // Ancillary buffers GLuint ClearIndex; GLuint CurrentIndex; GLubyte ClearColor[4]; GLubyte CurrentColor[4]; BOOL EmulateSingle; // Emulate single-buffering BOOL bDoubleBuffer; BOOL bDepthBuffer; // Shared driver vars: BOOL bAllocated; BOOL bFullscreen; // Is this a fullscreen context? BOOL bSceneStarted; // Has a lpDev->BeginScene been issued? BOOL bCanRender; // Flag: states whether rendering is OK BOOL bFrameStarted; // Has frame update started at all? BOOL bStencil; // TRUE if this context has stencil BOOL bGDIEraseBkgnd; // GDI Erase Background command // Window information HWND hWnd; // Window handle HDC hDC; // Windows' Device Context of the window DWORD dwWidth; // Window width DWORD dwHeight; // Window height DWORD dwBPP; // Window bits-per-pixel; RECT rcScreenRect; // Screen rectangle DWORD dwModeWidth; // Display mode width DWORD dwModeHeight; // Display mode height float dvClipX; float dvClipY; LONG lpfnWndProc; // window message handler function} DGL_ctx;#define GLD_context DGL_ctx#define GLD_GET_CONTEXT(c) (GLD_context*)(c)->DriverCtx#else // _USE_GLD3_WGLtypedef struct { BOOL bHasBeenCurrent; DGL_pixelFormat *lpPF; // // Mesa context vars: // GLcontext *glCtx; // The core Mesa context GLvisual *glVis; // Describes the color buffer GLframebuffer *glBuffer; // Ancillary buffers GLuint ClearIndex; GLuint CurrentIndex; GLubyte ClearColor[4]; GLubyte CurrentColor[4]; BOOL EmulateSingle; // Emulate single-buffering BOOL bDoubleBuffer; BOOL bDepthBuffer; int iZBufferPF; // Index of Zbuffer pixel format // Vertex buffer: one-to-one correlation with Mesa's vertex buffer. // This will be filled by our setup function (see d3dvsetup.c) DGL_TLvertex gWin[VB_SIZE]; // Transformed and lit vertices// DGL_Lvertex gObj[VB_SIZE]; // Lit vertices in object coordinates. // Indices for DrawIndexedPrimitive. // Clipped quads are drawn seperately, so use VB_SIZE. // 6 indices are needed to make 2 triangles for each possible quad// WORD wIndices[(VB_SIZE / 4) * 6]; WORD wIndices[32768]; // // Device driver vars: // BOOL bAllocated; BOOL bFullscreen; // Is this a fullscreen context? BOOL bSceneStarted; // Has a lpDev->BeginScene been issued? BOOL bCanRender; // Flag: states whether rendering is OK BOOL bFrameStarted; // Has frame update started at all? // DirectX COM interfaces, postfixed with the interface number IDirectDraw *lpDD1; IDirectDraw4 *lpDD4; IDirect3D3 *lpD3D3; IDirect3DDevice3 *lpDev3; IDirect3DViewport3 *lpViewport3; IDirectDrawSurface4 *lpFront4; IDirectDrawSurface4 *lpBack4; IDirectDrawSurface4 *lpDepth4; // Vertex buffers BOOL bD3DPipeline; // True if using D3D geometry pipeline IDirect3DVertexBuffer *m_vbuf; // Unprocessed vertices IDirect3DVertexBuffer *m_pvbuf; // Processed vertices ready to be rendered D3DTEXTUREOP ColorOp[MAX_TEXTURE_UNITS]; // Used for re-enabling texturing D3DTEXTUREOP AlphaOp[MAX_TEXTURE_UNITS]; // Used for re-enabling texturing struct gl_texture_object *tObj[MAX_TEXTURE_UNITS]; DDCAPS ddCaps; // DirectDraw caps D3DDEVICEDESC D3DDevDesc; // Direct3D Device description DDPIXELFORMAT ddpfRender; // Pixel format of the render buffer DDPIXELFORMAT ddpfDepth; // Pixel format of the depth buffer BOOL bStencil; // TRUE is this context has stencil PX_packFunc fnPackFunc; // Pixel packing function for SW PX_unpackFunc fnUnpackFunc; // Pixel unpacking function for SW PX_packSpanFunc fnPackSpanFunc; // Pixel span packer D3DVIEWPORT2 d3dViewport; // D3D Viewport object D3DCULL cullmode; // Direct3D cull mode D3DCOLOR curcolor; // Current color DWORD dwColorPF; // Current color, in format of target surface D3DCOLOR d3dClearColor; // Clear color D3DCOLOR ConstantColor; // For flat shading DWORD dwClearColorPF; // Clear color, in format of target surface BOOL bGDIEraseBkgnd; // GDI Erase Background command // Primitive caches// DGL_vertex LineCache[DGL_MAX_LINE_VERTS];// DGL_vertex TriCache[DGL_MAX_TRI_VERTS];// DWORD dwNextLineVert;// DWORD dwNextTriVert; // Window information HWND hWnd; // Window handle HDC hDC; // Windows' Device Context of the window DWORD dwWidth; // Window width DWORD dwHeight; // Window height DWORD dwBPP; // Window bits-per-pixel; RECT rcScreenRect; // Screen rectangle DWORD dwModeWidth; // Display mode width DWORD dwModeHeight; // Display mode height float dvClipX; float dvClipY; LONG lpfnWndProc; // window message handler function // Shared texture palette IDirectDrawPalette *lpGlobalPalette; // Usage counters. // One of these counters will be incremented when we choose // between hardware and software rendering functions.// DWORD dwHWUsageCount; // Hardware usage count// DWORD dwSWUsageCount; // Software usage count // Texture state flags.// BOOL m_texturing; // TRUE is texturing// BOOL m_mtex; // TRUE if multitexture// BOOL m_texHandleValid; // TRUE if tex state valid // Renderstate caches to ensure no redundant state changes DWORD dwRS[256]; // Renderstates DWORD dwTSS[2][24]; // Texture-stage states LPDIRECT3DTEXTURE2 lpTex[2]; // Texture (1 per stage) DWORD dwMaxTextureSize; // Max texture size: // clamped to 1024.} DGL_ctx;#endif // _USE_GLD3_WGL/*------------------------- Function Prototypes ---------------------------*/#ifdef __cplusplusextern "C" {#endifHHOOK hKeyHook;LRESULT CALLBACK dglKeyProc(int code,WPARAM wParam,LPARAM lParam);void dglInitContextState();void dglDeleteContextState();BOOL dglIsValidContext(HGLRC a);DGL_ctx* dglGetContextAddress(const HGLRC a);HDC dglGetCurrentDC(void);HGLRC dglGetCurrentContext(void);HGLRC dglCreateContext(HDC a, const DGL_pixelFormat *lpPF);BOOL dglMakeCurrent(HDC a, HGLRC b);BOOL dglDeleteContext(HGLRC a);BOOL dglSwapBuffers(HDC hDC);#ifdef __cplusplus}#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -