mirror of
https://github.com/leozide/leocad
synced 2025-01-28 19:58:12 +01:00
Multisample support.
This commit is contained in:
parent
8cdf9099a2
commit
b310864b18
3 changed files with 127 additions and 4 deletions
|
@ -369,6 +369,8 @@ GLUNMAPBUFFERARBPROC glUnmapBufferARB;
|
|||
GLGETBUFFERPARAMETERIVARBPROC glGetBufferParameterivARB;
|
||||
GLGETBUFFERPOINTERVARBPROC glGetBufferPointervARB;
|
||||
|
||||
PFNGLSAMPLECOVERAGEARBPROC glSampleCoverageARB;
|
||||
|
||||
// =============================================================================
|
||||
// Initialization functions
|
||||
|
||||
|
|
|
@ -472,6 +472,23 @@ typedef GLboolean (APIENTRY *GLUNMAPBUFFERARBPROC) (GLenum target);
|
|||
typedef void (APIENTRY *GLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
|
||||
typedef void (APIENTRY *GLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);
|
||||
|
||||
#ifndef GL_ARB_multisample
|
||||
#define GL_ARB_multisample 1
|
||||
|
||||
#define GL_MULTISAMPLE_ARB 0x809D
|
||||
#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
|
||||
#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
|
||||
#define GL_SAMPLE_COVERAGE_ARB 0x80A0
|
||||
#define GL_SAMPLE_BUFFERS_ARB 0x80A8
|
||||
#define GL_SAMPLES_ARB 0x80A9
|
||||
#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
|
||||
#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
|
||||
#define GL_MULTISAMPLE_BIT_ARB 0x20000000
|
||||
|
||||
typedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
|
||||
|
||||
#endif
|
||||
|
||||
// =============================================================================
|
||||
// OpenGL extern declarations
|
||||
|
||||
|
|
112
win/glwindow.cpp
112
win/glwindow.cpp
|
@ -4,16 +4,83 @@
|
|||
#include "tools.h"
|
||||
#include "resource.h"
|
||||
|
||||
#ifndef WGL_ARB_extensions_string
|
||||
#define WGL_ARB_extensions_string 1
|
||||
|
||||
typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
|
||||
|
||||
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = NULL;
|
||||
|
||||
#endif // WGL_ARB_extensions_string
|
||||
|
||||
#ifndef WGL_ARB_multisample
|
||||
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
||||
#define WGL_SAMPLES_ARB 0x2042
|
||||
#endif
|
||||
|
||||
#ifndef WGL_ARB_pixel_format
|
||||
#define WGL_ARB_pixel_format 1
|
||||
|
||||
#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
|
||||
#define WGL_DRAW_TO_WINDOW_ARB 0x2001
|
||||
#define WGL_DRAW_TO_BITMAP_ARB 0x2002
|
||||
#define WGL_ACCELERATION_ARB 0x2003
|
||||
#define WGL_NEED_PALETTE_ARB 0x2004
|
||||
#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
|
||||
#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
|
||||
#define WGL_SWAP_METHOD_ARB 0x2007
|
||||
#define WGL_NUMBER_OVERLAYS_ARB 0x2008
|
||||
#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
|
||||
#define WGL_TRANSPARENT_ARB 0x200A
|
||||
#define WGL_SHARE_DEPTH_ARB 0x200C
|
||||
#define WGL_SHARE_STENCIL_ARB 0x200D
|
||||
#define WGL_SHARE_ACCUM_ARB 0x200E
|
||||
#define WGL_SUPPORT_GDI_ARB 0x200F
|
||||
#define WGL_SUPPORT_OPENGL_ARB 0x2010
|
||||
#define WGL_DOUBLE_BUFFER_ARB 0x2011
|
||||
#define WGL_STEREO_ARB 0x2012
|
||||
#define WGL_PIXEL_TYPE_ARB 0x2013
|
||||
#define WGL_COLOR_BITS_ARB 0x2014
|
||||
#define WGL_RED_BITS_ARB 0x2015
|
||||
#define WGL_RED_SHIFT_ARB 0x2016
|
||||
#define WGL_GREEN_BITS_ARB 0x2017
|
||||
#define WGL_GREEN_SHIFT_ARB 0x2018
|
||||
#define WGL_BLUE_BITS_ARB 0x2019
|
||||
#define WGL_BLUE_SHIFT_ARB 0x201A
|
||||
#define WGL_ALPHA_BITS_ARB 0x201B
|
||||
#define WGL_ALPHA_SHIFT_ARB 0x201C
|
||||
#define WGL_ACCUM_BITS_ARB 0x201D
|
||||
#define WGL_ACCUM_RED_BITS_ARB 0x201E
|
||||
#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
|
||||
#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
|
||||
#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
|
||||
#define WGL_DEPTH_BITS_ARB 0x2022
|
||||
#define WGL_STENCIL_BITS_ARB 0x2023
|
||||
#define WGL_AUX_BUFFERS_ARB 0x2024
|
||||
#define WGL_NO_ACCELERATION_ARB 0x2025
|
||||
#define WGL_GENERIC_ACCELERATION_ARB 0x2026
|
||||
#define WGL_FULL_ACCELERATION_ARB 0x2027
|
||||
#define WGL_SWAP_EXCHANGE_ARB 0x2028
|
||||
#define WGL_SWAP_COPY_ARB 0x2029
|
||||
#define WGL_SWAP_UNDEFINED_ARB 0x202A
|
||||
#define WGL_TYPE_RGBA_ARB 0x202B
|
||||
#define WGL_TYPE_COLORINDEX_ARB 0x202C
|
||||
#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
|
||||
#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
|
||||
#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
|
||||
#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
|
||||
#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
|
||||
|
||||
typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues);
|
||||
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues);
|
||||
|
||||
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = NULL;
|
||||
PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormatARB = NULL;
|
||||
PFNWGLGETPIXELFORMATATTRIBFVARBPROC wglGetPixelFormatAttribfvARB = NULL;
|
||||
PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribivARB = NULL;
|
||||
|
||||
#endif // WGL_ARB_pixel_format
|
||||
|
||||
struct GLWindowPrivate
|
||||
{
|
||||
HGLRC m_hrc;
|
||||
|
@ -21,6 +88,7 @@ struct GLWindowPrivate
|
|||
CPalette* m_pPal;
|
||||
HWND m_hWnd;
|
||||
HCURSOR Cursor;
|
||||
bool Multisample;
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
|
@ -273,11 +341,44 @@ bool GLWindow::CreateFromWindow(void* data)
|
|||
pfd.cDepthBits = 24;
|
||||
pfd.iLayerType = PFD_MAIN_PLANE;
|
||||
|
||||
int nPixelFormat = ChoosePixelFormat(prv->m_pDC->m_hDC, &pfd);
|
||||
if (nPixelFormat == 0)
|
||||
int PixelFormat = 0;
|
||||
|
||||
if (wglChoosePixelFormatARB)
|
||||
{
|
||||
// Choose a Pixel Format Descriptor (PFD) with multisampling support.
|
||||
int iAttributes[] =
|
||||
{
|
||||
WGL_DRAW_TO_WINDOW_ARB, GL_TRUE,
|
||||
WGL_SUPPORT_OPENGL_ARB, GL_TRUE,
|
||||
WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB,
|
||||
WGL_COLOR_BITS_ARB, 24,
|
||||
WGL_DEPTH_BITS_ARB, 24,
|
||||
WGL_STENCIL_BITS_ARB, 0,
|
||||
WGL_DOUBLE_BUFFER_ARB, GL_TRUE,
|
||||
WGL_SAMPLE_BUFFERS_ARB, GL_TRUE,
|
||||
WGL_SAMPLES_ARB, 4,
|
||||
0, 0
|
||||
};
|
||||
float fAttributes[] = {0,0};
|
||||
UINT NumFormats;
|
||||
int MultisamplePixelFormat;
|
||||
|
||||
int Status = wglChoosePixelFormatARB(prv->m_pDC->m_hDC, iAttributes, fAttributes, 1, &MultisamplePixelFormat, &NumFormats);
|
||||
|
||||
if (Status && NumFormats > 0)
|
||||
{
|
||||
PixelFormat = MultisamplePixelFormat;
|
||||
prv->Multisample = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PixelFormat)
|
||||
PixelFormat = ChoosePixelFormat(prv->m_pDC->m_hDC, &pfd);
|
||||
|
||||
if (!PixelFormat)
|
||||
return false;
|
||||
|
||||
if (!SetPixelFormat(prv->m_pDC->m_hDC, nPixelFormat, &pfd))
|
||||
if (!SetPixelFormat(prv->m_pDC->m_hDC, PixelFormat, &pfd))
|
||||
return false;
|
||||
|
||||
prv->m_pPal = new CPalette;
|
||||
|
@ -304,6 +405,9 @@ bool GLWindow::CreateFromWindow(void* data)
|
|||
wglShareLists(share->m_hrc, prv->m_hrc);
|
||||
}
|
||||
|
||||
if (prv->Multisample)
|
||||
glEnable(GL_MULTISAMPLE_ARB);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue