glcontext_wgl.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright 2011-2019 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
  4. */
  5. #ifndef BGFX_GLCONTEXT_WGL_H_HEADER_GUARD
  6. #define BGFX_GLCONTEXT_WGL_H_HEADER_GUARD
  7. #if BGFX_USE_WGL
  8. #include <wgl/wglext.h>
  9. namespace bgfx { namespace gl
  10. {
  11. typedef PROC (APIENTRYP PFNWGLGETPROCADDRESSPROC) (LPCSTR lpszProc);
  12. typedef BOOL (APIENTRYP PFNWGLMAKECURRENTPROC) (HDC hdc, HGLRC hglrc);
  13. typedef HGLRC (APIENTRYP PFNWGLCREATECONTEXTPROC) (HDC hdc);
  14. typedef BOOL (APIENTRYP PFNWGLDELETECONTEXTPROC) (HGLRC hglrc);
  15. //
  16. typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void);
  17. typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);
  18. typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
  19. typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
  20. typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
  21. typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
  22. typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param);
  23. typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
  24. typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture);
  25. typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures);
  26. typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures);
  27. typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
  28. typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func);
  29. typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap);
  30. typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
  31. typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices);
  32. typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *params);
  33. typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *params);
  34. typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC) (GLenum name);
  35. typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count);
  36. typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor);
  37. typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size);
  38. typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode);
  39. typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask);
  40. typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height);
  41. typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap);
  42. typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s);
  43. typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag);
  44. typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth);
  45. typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
  46. typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask);
  47. typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask);
  48. typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass);
  49. extern PFNWGLGETPROCADDRESSPROC wglGetProcAddress;
  50. extern PFNWGLMAKECURRENTPROC wglMakeCurrent;
  51. extern PFNWGLCREATECONTEXTPROC wglCreateContext;
  52. extern PFNWGLDELETECONTEXTPROC wglDeleteContext;
  53. struct SwapChainGL;
  54. struct GlContext
  55. {
  56. GlContext()
  57. : m_current(NULL)
  58. , m_opengl32dll(NULL)
  59. , m_context(NULL)
  60. , m_hdc(NULL)
  61. {
  62. }
  63. void create(uint32_t _width, uint32_t _height);
  64. void destroy();
  65. void resize(uint32_t _width, uint32_t _height, uint32_t _flags);
  66. uint64_t getCaps() const;
  67. SwapChainGL* createSwapChain(void* _nwh);
  68. void destroySwapChain(SwapChainGL* _swapChain);
  69. void swap(SwapChainGL* _swapChain = NULL);
  70. void makeCurrent(SwapChainGL* _swapChain = NULL);
  71. void import();
  72. bool isValid() const
  73. {
  74. return NULL != m_context;
  75. }
  76. int32_t m_contextAttrs[9];
  77. int m_pixelFormat;
  78. PIXELFORMATDESCRIPTOR m_pfd;
  79. SwapChainGL* m_current;
  80. void* m_opengl32dll;
  81. HGLRC m_context;
  82. HDC m_hdc;
  83. };
  84. } /* namespace gl */ } // namespace bgfx
  85. #endif // BGFX_USE_WGL
  86. #endif // BGFX_GLCONTEXT_WGL_H_HEADER_GUARD