win32-add opengl display method
This commit is contained in:
parent
6506df3a30
commit
d310766240
|
@ -821,6 +821,10 @@
|
||||||
RelativePath=".\ogl.cpp"
|
RelativePath=".\ogl.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\ogl.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\OpenArchive.cpp"
|
RelativePath=".\OpenArchive.cpp"
|
||||||
>
|
>
|
||||||
|
@ -2656,6 +2660,38 @@
|
||||||
RelativePath="..\GPU_osd.h"
|
RelativePath="..\GPU_osd.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_FRAMEADVANCE.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_OPEN.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_PAUSE.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_PLAY.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_RESET.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_ROTATECCW.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_ROTATECW.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\bitmaps\IDB_STOP.bmp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\instruction_attributes.h"
|
RelativePath="..\instruction_attributes.h"
|
||||||
>
|
>
|
||||||
|
|
|
@ -0,0 +1,648 @@
|
||||||
|
#ifndef __wglext_h_
|
||||||
|
#define __wglext_h_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Copyright (c) 2007 The Khronos Group Inc.
|
||||||
|
**
|
||||||
|
** Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
** copy of this software and/or associated documentation files (the
|
||||||
|
** "Materials"), to deal in the Materials without restriction, including
|
||||||
|
** without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
** distribute, sublicense, and/or sell copies of the Materials, and to
|
||||||
|
** permit persons to whom the Materials are 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 Materials.
|
||||||
|
**
|
||||||
|
** THE MATERIALS ARE 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 THE AUTHORS OR COPYRIGHT HOLDERS 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
|
||||||
|
** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
|
||||||
|
#define WIN32_LEAN_AND_MEAN 1
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef APIENTRY
|
||||||
|
#define APIENTRY
|
||||||
|
#endif
|
||||||
|
#ifndef APIENTRYP
|
||||||
|
#define APIENTRYP APIENTRY *
|
||||||
|
#endif
|
||||||
|
#ifndef GLAPI
|
||||||
|
#define GLAPI extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*************************************************************/
|
||||||
|
|
||||||
|
/* Header file version number */
|
||||||
|
/* wglext.h last updated 2007/02/09 */
|
||||||
|
/* Current version at http://www.opengl.org/registry/ */
|
||||||
|
#define WGL_WGLEXT_VERSION 9
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_buffer_region
|
||||||
|
#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001
|
||||||
|
#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002
|
||||||
|
#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004
|
||||||
|
#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_multisample
|
||||||
|
#define WGL_SAMPLE_BUFFERS_ARB 0x2041
|
||||||
|
#define WGL_SAMPLES_ARB 0x2042
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_extensions_string
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pixel_format
|
||||||
|
#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_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
|
||||||
|
#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
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_make_current_read
|
||||||
|
#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043
|
||||||
|
#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pbuffer
|
||||||
|
#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
|
||||||
|
#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
|
||||||
|
#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
|
||||||
|
#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
|
||||||
|
#define WGL_PBUFFER_LARGEST_ARB 0x2033
|
||||||
|
#define WGL_PBUFFER_WIDTH_ARB 0x2034
|
||||||
|
#define WGL_PBUFFER_HEIGHT_ARB 0x2035
|
||||||
|
#define WGL_PBUFFER_LOST_ARB 0x2036
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_render_texture
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071
|
||||||
|
#define WGL_TEXTURE_FORMAT_ARB 0x2072
|
||||||
|
#define WGL_TEXTURE_TARGET_ARB 0x2073
|
||||||
|
#define WGL_MIPMAP_TEXTURE_ARB 0x2074
|
||||||
|
#define WGL_TEXTURE_RGB_ARB 0x2075
|
||||||
|
#define WGL_TEXTURE_RGBA_ARB 0x2076
|
||||||
|
#define WGL_NO_TEXTURE_ARB 0x2077
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078
|
||||||
|
#define WGL_TEXTURE_1D_ARB 0x2079
|
||||||
|
#define WGL_TEXTURE_2D_ARB 0x207A
|
||||||
|
#define WGL_MIPMAP_LEVEL_ARB 0x207B
|
||||||
|
#define WGL_CUBE_MAP_FACE_ARB 0x207C
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081
|
||||||
|
#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082
|
||||||
|
#define WGL_FRONT_LEFT_ARB 0x2083
|
||||||
|
#define WGL_FRONT_RIGHT_ARB 0x2084
|
||||||
|
#define WGL_BACK_LEFT_ARB 0x2085
|
||||||
|
#define WGL_BACK_RIGHT_ARB 0x2086
|
||||||
|
#define WGL_AUX0_ARB 0x2087
|
||||||
|
#define WGL_AUX1_ARB 0x2088
|
||||||
|
#define WGL_AUX2_ARB 0x2089
|
||||||
|
#define WGL_AUX3_ARB 0x208A
|
||||||
|
#define WGL_AUX4_ARB 0x208B
|
||||||
|
#define WGL_AUX5_ARB 0x208C
|
||||||
|
#define WGL_AUX6_ARB 0x208D
|
||||||
|
#define WGL_AUX7_ARB 0x208E
|
||||||
|
#define WGL_AUX8_ARB 0x208F
|
||||||
|
#define WGL_AUX9_ARB 0x2090
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pixel_format_float
|
||||||
|
#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_make_current_read
|
||||||
|
#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pixel_format
|
||||||
|
#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000
|
||||||
|
#define WGL_DRAW_TO_WINDOW_EXT 0x2001
|
||||||
|
#define WGL_DRAW_TO_BITMAP_EXT 0x2002
|
||||||
|
#define WGL_ACCELERATION_EXT 0x2003
|
||||||
|
#define WGL_NEED_PALETTE_EXT 0x2004
|
||||||
|
#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005
|
||||||
|
#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006
|
||||||
|
#define WGL_SWAP_METHOD_EXT 0x2007
|
||||||
|
#define WGL_NUMBER_OVERLAYS_EXT 0x2008
|
||||||
|
#define WGL_NUMBER_UNDERLAYS_EXT 0x2009
|
||||||
|
#define WGL_TRANSPARENT_EXT 0x200A
|
||||||
|
#define WGL_TRANSPARENT_VALUE_EXT 0x200B
|
||||||
|
#define WGL_SHARE_DEPTH_EXT 0x200C
|
||||||
|
#define WGL_SHARE_STENCIL_EXT 0x200D
|
||||||
|
#define WGL_SHARE_ACCUM_EXT 0x200E
|
||||||
|
#define WGL_SUPPORT_GDI_EXT 0x200F
|
||||||
|
#define WGL_SUPPORT_OPENGL_EXT 0x2010
|
||||||
|
#define WGL_DOUBLE_BUFFER_EXT 0x2011
|
||||||
|
#define WGL_STEREO_EXT 0x2012
|
||||||
|
#define WGL_PIXEL_TYPE_EXT 0x2013
|
||||||
|
#define WGL_COLOR_BITS_EXT 0x2014
|
||||||
|
#define WGL_RED_BITS_EXT 0x2015
|
||||||
|
#define WGL_RED_SHIFT_EXT 0x2016
|
||||||
|
#define WGL_GREEN_BITS_EXT 0x2017
|
||||||
|
#define WGL_GREEN_SHIFT_EXT 0x2018
|
||||||
|
#define WGL_BLUE_BITS_EXT 0x2019
|
||||||
|
#define WGL_BLUE_SHIFT_EXT 0x201A
|
||||||
|
#define WGL_ALPHA_BITS_EXT 0x201B
|
||||||
|
#define WGL_ALPHA_SHIFT_EXT 0x201C
|
||||||
|
#define WGL_ACCUM_BITS_EXT 0x201D
|
||||||
|
#define WGL_ACCUM_RED_BITS_EXT 0x201E
|
||||||
|
#define WGL_ACCUM_GREEN_BITS_EXT 0x201F
|
||||||
|
#define WGL_ACCUM_BLUE_BITS_EXT 0x2020
|
||||||
|
#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021
|
||||||
|
#define WGL_DEPTH_BITS_EXT 0x2022
|
||||||
|
#define WGL_STENCIL_BITS_EXT 0x2023
|
||||||
|
#define WGL_AUX_BUFFERS_EXT 0x2024
|
||||||
|
#define WGL_NO_ACCELERATION_EXT 0x2025
|
||||||
|
#define WGL_GENERIC_ACCELERATION_EXT 0x2026
|
||||||
|
#define WGL_FULL_ACCELERATION_EXT 0x2027
|
||||||
|
#define WGL_SWAP_EXCHANGE_EXT 0x2028
|
||||||
|
#define WGL_SWAP_COPY_EXT 0x2029
|
||||||
|
#define WGL_SWAP_UNDEFINED_EXT 0x202A
|
||||||
|
#define WGL_TYPE_RGBA_EXT 0x202B
|
||||||
|
#define WGL_TYPE_COLORINDEX_EXT 0x202C
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pbuffer
|
||||||
|
#define WGL_DRAW_TO_PBUFFER_EXT 0x202D
|
||||||
|
#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
|
||||||
|
#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
|
||||||
|
#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
|
||||||
|
#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
|
||||||
|
#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032
|
||||||
|
#define WGL_PBUFFER_LARGEST_EXT 0x2033
|
||||||
|
#define WGL_PBUFFER_WIDTH_EXT 0x2034
|
||||||
|
#define WGL_PBUFFER_HEIGHT_EXT 0x2035
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_depth_float
|
||||||
|
#define WGL_DEPTH_FLOAT_EXT 0x2040
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_3DFX_multisample
|
||||||
|
#define WGL_SAMPLE_BUFFERS_3DFX 0x2060
|
||||||
|
#define WGL_SAMPLES_3DFX 0x2061
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_multisample
|
||||||
|
#define WGL_SAMPLE_BUFFERS_EXT 0x2041
|
||||||
|
#define WGL_SAMPLES_EXT 0x2042
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_digital_video_control
|
||||||
|
#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050
|
||||||
|
#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051
|
||||||
|
#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052
|
||||||
|
#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_gamma
|
||||||
|
#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E
|
||||||
|
#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_genlock
|
||||||
|
#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044
|
||||||
|
#define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045
|
||||||
|
#define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046
|
||||||
|
#define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047
|
||||||
|
#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048
|
||||||
|
#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049
|
||||||
|
#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A
|
||||||
|
#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B
|
||||||
|
#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_image_buffer
|
||||||
|
#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001
|
||||||
|
#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_swap_frame_lock
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_NV_render_depth_texture
|
||||||
|
#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4
|
||||||
|
#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5
|
||||||
|
#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6
|
||||||
|
#define WGL_DEPTH_COMPONENT_NV 0x20A7
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_NV_render_texture_rectangle
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1
|
||||||
|
#define WGL_TEXTURE_RECTANGLE_NV 0x20A2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ATI_pixel_format_float
|
||||||
|
#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_NV_float_buffer
|
||||||
|
#define WGL_FLOAT_COMPONENTS_NV 0x20B0
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3
|
||||||
|
#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4
|
||||||
|
#define WGL_TEXTURE_FLOAT_R_NV 0x20B5
|
||||||
|
#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6
|
||||||
|
#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7
|
||||||
|
#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_3DL_stereo_control
|
||||||
|
#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055
|
||||||
|
#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056
|
||||||
|
#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057
|
||||||
|
#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pixel_format_packed_float
|
||||||
|
#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_framebuffer_sRGB
|
||||||
|
#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************************************/
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pbuffer
|
||||||
|
DECLARE_HANDLE(HPBUFFERARB);
|
||||||
|
#endif
|
||||||
|
#ifndef WGL_EXT_pbuffer
|
||||||
|
DECLARE_HANDLE(HPBUFFEREXT);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_buffer_region
|
||||||
|
#define WGL_ARB_buffer_region 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern HANDLE WINAPI wglCreateBufferRegionARB (HDC, int, UINT);
|
||||||
|
extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE);
|
||||||
|
extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE, int, int, int, int);
|
||||||
|
extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE, int, int, int, int, int, int);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType);
|
||||||
|
typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_multisample
|
||||||
|
#define WGL_ARB_multisample 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_extensions_string
|
||||||
|
#define WGL_ARB_extensions_string 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern const char * WINAPI wglGetExtensionsStringARB (HDC);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pixel_format
|
||||||
|
#define WGL_ARB_pixel_format 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC, int, int, UINT, const int *, int *);
|
||||||
|
extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC, int, int, UINT, const int *, FLOAT *);
|
||||||
|
extern BOOL WINAPI wglChoosePixelFormatARB (HDC, const int *, const FLOAT *, UINT, int *, UINT *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_make_current_read
|
||||||
|
#define WGL_ARB_make_current_read 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglMakeContextCurrentARB (HDC, HDC, HGLRC);
|
||||||
|
extern HDC WINAPI wglGetCurrentReadDCARB (void);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||||
|
typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pbuffer
|
||||||
|
#define WGL_ARB_pbuffer 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC, int, int, int, const int *);
|
||||||
|
extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB);
|
||||||
|
extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB, HDC);
|
||||||
|
extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB);
|
||||||
|
extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB, int, int *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||||
|
typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
|
||||||
|
typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_render_texture
|
||||||
|
#define WGL_ARB_render_texture 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB, int);
|
||||||
|
extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB, int);
|
||||||
|
extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB, const int *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ARB_pixel_format_float
|
||||||
|
#define WGL_ARB_pixel_format_float 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_display_color_table
|
||||||
|
#define WGL_EXT_display_color_table 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort);
|
||||||
|
extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *, GLuint);
|
||||||
|
extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort);
|
||||||
|
extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||||
|
typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length);
|
||||||
|
typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||||
|
typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_extensions_string
|
||||||
|
#define WGL_EXT_extensions_string 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern const char * WINAPI wglGetExtensionsStringEXT (void);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_make_current_read
|
||||||
|
#define WGL_EXT_make_current_read 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglMakeContextCurrentEXT (HDC, HDC, HGLRC);
|
||||||
|
extern HDC WINAPI wglGetCurrentReadDCEXT (void);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
|
||||||
|
typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pbuffer
|
||||||
|
#define WGL_EXT_pbuffer 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC, int, int, int, const int *);
|
||||||
|
extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT);
|
||||||
|
extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT, HDC);
|
||||||
|
extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT);
|
||||||
|
extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT, int, int *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
|
||||||
|
typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer);
|
||||||
|
typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pixel_format
|
||||||
|
#define WGL_EXT_pixel_format 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC, int, int, UINT, int *, int *);
|
||||||
|
extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC, int, int, UINT, int *, FLOAT *);
|
||||||
|
extern BOOL WINAPI wglChoosePixelFormatEXT (HDC, const int *, const FLOAT *, UINT, int *, UINT *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_swap_control
|
||||||
|
#define WGL_EXT_swap_control 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglSwapIntervalEXT (int);
|
||||||
|
extern int WINAPI wglGetSwapIntervalEXT (void);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval);
|
||||||
|
typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_depth_float
|
||||||
|
#define WGL_EXT_depth_float 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_NV_vertex_array_range
|
||||||
|
#define WGL_NV_vertex_array_range 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern void* WINAPI wglAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat);
|
||||||
|
extern void WINAPI wglFreeMemoryNV (void *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority);
|
||||||
|
typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_3DFX_multisample
|
||||||
|
#define WGL_3DFX_multisample 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_multisample
|
||||||
|
#define WGL_EXT_multisample 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_OML_sync_control
|
||||||
|
#define WGL_OML_sync_control 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetSyncValuesOML (HDC, INT64 *, INT64 *, INT64 *);
|
||||||
|
extern BOOL WINAPI wglGetMscRateOML (HDC, INT32 *, INT32 *);
|
||||||
|
extern INT64 WINAPI wglSwapBuffersMscOML (HDC, INT64, INT64, INT64);
|
||||||
|
extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC, int, INT64, INT64, INT64);
|
||||||
|
extern BOOL WINAPI wglWaitForMscOML (HDC, INT64, INT64, INT64, INT64 *, INT64 *, INT64 *);
|
||||||
|
extern BOOL WINAPI wglWaitForSbcOML (HDC, INT64, INT64 *, INT64 *, INT64 *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator);
|
||||||
|
typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||||
|
typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_digital_video_control
|
||||||
|
#define WGL_I3D_digital_video_control 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC, int, int *);
|
||||||
|
extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC, int, const int *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_gamma
|
||||||
|
#define WGL_I3D_gamma 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC, int, int *);
|
||||||
|
extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC, int, const int *);
|
||||||
|
extern BOOL WINAPI wglGetGammaTableI3D (HDC, int, USHORT *, USHORT *, USHORT *);
|
||||||
|
extern BOOL WINAPI wglSetGammaTableI3D (HDC, int, const USHORT *, const USHORT *, const USHORT *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_genlock
|
||||||
|
#define WGL_I3D_genlock 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglEnableGenlockI3D (HDC);
|
||||||
|
extern BOOL WINAPI wglDisableGenlockI3D (HDC);
|
||||||
|
extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC, BOOL *);
|
||||||
|
extern BOOL WINAPI wglGenlockSourceI3D (HDC, UINT);
|
||||||
|
extern BOOL WINAPI wglGetGenlockSourceI3D (HDC, UINT *);
|
||||||
|
extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC, UINT);
|
||||||
|
extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC, UINT *);
|
||||||
|
extern BOOL WINAPI wglGenlockSampleRateI3D (HDC, UINT);
|
||||||
|
extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC, UINT *);
|
||||||
|
extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC, UINT);
|
||||||
|
extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC, UINT *);
|
||||||
|
extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC, UINT *, UINT *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_image_buffer
|
||||||
|
#define WGL_I3D_image_buffer 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern LPVOID WINAPI wglCreateImageBufferI3D (HDC, DWORD, UINT);
|
||||||
|
extern BOOL WINAPI wglDestroyImageBufferI3D (HDC, LPVOID);
|
||||||
|
extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC, const HANDLE *, const LPVOID *, const DWORD *, UINT);
|
||||||
|
extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC, const LPVOID *, UINT);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_swap_frame_lock
|
||||||
|
#define WGL_I3D_swap_frame_lock 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglEnableFrameLockI3D (void);
|
||||||
|
extern BOOL WINAPI wglDisableFrameLockI3D (void);
|
||||||
|
extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *);
|
||||||
|
extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_I3D_swap_frame_usage
|
||||||
|
#define WGL_I3D_swap_frame_usage 1
|
||||||
|
#ifdef WGL_WGLEXT_PROTOTYPES
|
||||||
|
extern BOOL WINAPI wglGetFrameUsageI3D (float *);
|
||||||
|
extern BOOL WINAPI wglBeginFrameTrackingI3D (void);
|
||||||
|
extern BOOL WINAPI wglEndFrameTrackingI3D (void);
|
||||||
|
extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *, DWORD *, float *);
|
||||||
|
#endif /* WGL_WGLEXT_PROTOTYPES */
|
||||||
|
typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void);
|
||||||
|
typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_ATI_pixel_format_float
|
||||||
|
#define WGL_ATI_pixel_format_float 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_NV_float_buffer
|
||||||
|
#define WGL_NV_float_buffer 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_pixel_format_packed_float
|
||||||
|
#define WGL_EXT_pixel_format_packed_float 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef WGL_EXT_framebuffer_sRGB
|
||||||
|
#define WGL_EXT_framebuffer_sRGB 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006 Theo Berkau
|
Copyright (C) 2006 Theo Berkau
|
||||||
Copyright (C) 2006-2012 DeSmuME team
|
Copyright (C) 2006-2013 DeSmuME team
|
||||||
|
|
||||||
This file is free software: you can redistribute it and/or modify
|
This file is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -80,6 +80,7 @@
|
||||||
#include "aggdraw.h"
|
#include "aggdraw.h"
|
||||||
#include "agg2d.h"
|
#include "agg2d.h"
|
||||||
#include "winutil.h"
|
#include "winutil.h"
|
||||||
|
#include "ogl.h"
|
||||||
|
|
||||||
//tools and dialogs
|
//tools and dialogs
|
||||||
#include "pathsettings.h"
|
#include "pathsettings.h"
|
||||||
|
@ -300,6 +301,7 @@ BOOL Mic_Init_Physical();
|
||||||
|
|
||||||
void UpdateHotkeyAssignments(); //Appends hotkey mappings to corresponding menu items
|
void UpdateHotkeyAssignments(); //Appends hotkey mappings to corresponding menu items
|
||||||
|
|
||||||
|
DWORD dwMainThread;
|
||||||
HMENU mainMenu = NULL; //Holds handle to the main DeSmuME menu
|
HMENU mainMenu = NULL; //Holds handle to the main DeSmuME menu
|
||||||
CToolBar* MainWindowToolbar;
|
CToolBar* MainWindowToolbar;
|
||||||
|
|
||||||
|
@ -819,13 +821,18 @@ void ToDSScreenRelativeCoords(s32& x, s32& y, int whichScreen)
|
||||||
//-----window style handling----
|
//-----window style handling----
|
||||||
const u32 DISPMETHOD_DDRAW_HW = 1;
|
const u32 DISPMETHOD_DDRAW_HW = 1;
|
||||||
const u32 DISPMETHOD_DDRAW_SW = 2;
|
const u32 DISPMETHOD_DDRAW_SW = 2;
|
||||||
|
const u32 DISPMETHOD_OPENGL = 3;
|
||||||
|
|
||||||
const u32 DWS_NORMAL = 0;
|
const u32 DWS_NORMAL = 0;
|
||||||
const u32 DWS_ALWAYSONTOP = 1;
|
const u32 DWS_ALWAYSONTOP = 1;
|
||||||
const u32 DWS_LOCKDOWN = 2;
|
const u32 DWS_LOCKDOWN = 2;
|
||||||
const u32 DWS_FULLSCREEN = 4;
|
const u32 DWS_FULLSCREEN = 4;
|
||||||
const u32 DWS_DDRAW_SW = 8;
|
const u32 DWS_VSYNC = 8;
|
||||||
const u32 DWS_VSYNC = 16;
|
const u32 DWS_DDRAW_SW = 16;
|
||||||
|
const u32 DWS_DDRAW_HW = 32;
|
||||||
|
const u32 DWS_OPENGL = 64;
|
||||||
|
const u32 DWS_DISPMETHODS = (DWS_DDRAW_SW|DWS_DDRAW_HW|DWS_OPENGL);
|
||||||
|
const u32 DWS_FILTER = 128;
|
||||||
|
|
||||||
static u32 currWindowStyle = DWS_NORMAL;
|
static u32 currWindowStyle = DWS_NORMAL;
|
||||||
static void SetStyle(u32 dws)
|
static void SetStyle(u32 dws)
|
||||||
|
@ -1394,6 +1401,222 @@ static void DD_FillRect(LPDIRECTDRAWSURFACE7 surf, int left, int top, int right,
|
||||||
surf->Blt(&r,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&fx);
|
surf->Blt(&r,NULL,NULL,DDBLT_COLORFILL | DDBLT_WAIT,&fx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct GLDISPLAY
|
||||||
|
{
|
||||||
|
HGLRC privateContext;
|
||||||
|
bool init;
|
||||||
|
|
||||||
|
GLDISPLAY()
|
||||||
|
: init(false)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool initialize()
|
||||||
|
{
|
||||||
|
//do we need to use another HDC?
|
||||||
|
if(init) return true;
|
||||||
|
init = initContext(MainWindow->getHWnd(),&privateContext);
|
||||||
|
return init;
|
||||||
|
}
|
||||||
|
|
||||||
|
void kill()
|
||||||
|
{
|
||||||
|
if(!init) return;
|
||||||
|
wglDeleteContext(privateContext);
|
||||||
|
init = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool begin()
|
||||||
|
{
|
||||||
|
DWORD myThread = GetCurrentThreadId();
|
||||||
|
//if(myThread != dwMainThread) //single threading differences not needed right now
|
||||||
|
{
|
||||||
|
if(!init)
|
||||||
|
{
|
||||||
|
if(!initialize()) return false;
|
||||||
|
}
|
||||||
|
HWND hwnd = MainWindow->getHWnd();
|
||||||
|
HDC dc = GetDC(hwnd);
|
||||||
|
wglMakeCurrent(dc,privateContext);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//we can render no problem in this thread (i hope)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void showPage()
|
||||||
|
{
|
||||||
|
HWND hwnd = MainWindow->getHWnd();
|
||||||
|
HDC dc = GetDC(hwnd);
|
||||||
|
SwapBuffers(dc);
|
||||||
|
}
|
||||||
|
} gldisplay;
|
||||||
|
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#include <GL/glext.h>
|
||||||
|
static void OGL_DoDisplay()
|
||||||
|
{
|
||||||
|
if(!gldisplay.begin()) return;
|
||||||
|
|
||||||
|
static GLuint tex = 0;
|
||||||
|
if(tex == 0)
|
||||||
|
glGenTextures(1,&tex);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D,tex);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, video.width,video.height,0,GL_BGRA,GL_UNSIGNED_BYTE,video.finalBuffer());
|
||||||
|
|
||||||
|
//the ds screen fills the texture entirely, so we dont have garbage at edge to worry about,
|
||||||
|
//but we need to make sure this is clamped for when filtering is selected
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
|
||||||
|
|
||||||
|
if(GetStyle()&DWS_FILTER)
|
||||||
|
{
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
|
||||||
|
}
|
||||||
|
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
RECT rc;
|
||||||
|
HWND hwnd = MainWindow->getHWnd();
|
||||||
|
GetClientRect(hwnd,&rc);
|
||||||
|
int width = rc.right - rc.left;
|
||||||
|
int height = rc.bottom - rc.top;
|
||||||
|
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
|
||||||
|
glViewport(0,0,width,height);
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity();
|
||||||
|
glOrtho(0.0f, (float)width, (float)height, 0.0f, -100.0f, 100.0f);
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
glLoadIdentity();
|
||||||
|
|
||||||
|
RECT dr[] = {MainScreenRect, SubScreenRect, GapRect};
|
||||||
|
for(int i=0;i<2;i++) //dont change gap rect, for some reason
|
||||||
|
{
|
||||||
|
ScreenToClient(hwnd,(LPPOINT)&dr[i].left);
|
||||||
|
ScreenToClient(hwnd,(LPPOINT)&dr[i].right);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//clear entire area, for cases where the screen is maximized
|
||||||
|
glClearColor(0,0,0,0);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
//use clear+scissor for gap
|
||||||
|
if(video.screengap > 0)
|
||||||
|
{
|
||||||
|
//adjust client rect into scissor rect (0,0 at bottomleft)
|
||||||
|
dr[2].bottom = height - dr[2].bottom;
|
||||||
|
dr[2].top = height - dr[2].top;
|
||||||
|
glScissor(dr[2].left,dr[2].bottom,dr[2].right-dr[2].left,dr[2].top-dr[2].bottom);
|
||||||
|
|
||||||
|
u32 color_rev = (u32)ScreenGapColor;
|
||||||
|
int r = (color_rev>>0)&0xFF;
|
||||||
|
int g = (color_rev>>8)&0xFF;
|
||||||
|
int b = (color_rev>>16)&0xFF;
|
||||||
|
glClearColor(r/255.0f,g/255.0f,b/255.0f,1);
|
||||||
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glDisable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RECT srcRects [2];
|
||||||
|
|
||||||
|
if(video.swap == 0)
|
||||||
|
{
|
||||||
|
srcRects[0] = MainScreenSrcRect;
|
||||||
|
srcRects[1] = SubScreenSrcRect;
|
||||||
|
if(osd) osd->swapScreens = false;
|
||||||
|
}
|
||||||
|
else if(video.swap == 1)
|
||||||
|
{
|
||||||
|
srcRects[0] = SubScreenSrcRect;
|
||||||
|
srcRects[1] = MainScreenSrcRect;
|
||||||
|
if(osd) osd->swapScreens = true;
|
||||||
|
}
|
||||||
|
else if(video.swap == 2)
|
||||||
|
{
|
||||||
|
srcRects[0] = (MainScreen.offset) ? SubScreenSrcRect : MainScreenSrcRect;
|
||||||
|
srcRects[1] = (MainScreen.offset) ? MainScreenSrcRect : SubScreenSrcRect;
|
||||||
|
if(osd) osd->swapScreens = (MainScreen.offset != 0);
|
||||||
|
}
|
||||||
|
else if(video.swap == 3)
|
||||||
|
{
|
||||||
|
srcRects[0] = (MainScreen.offset) ? MainScreenSrcRect : SubScreenSrcRect;
|
||||||
|
srcRects[1] = (MainScreen.offset) ? SubScreenSrcRect : MainScreenSrcRect;
|
||||||
|
if(osd) osd->swapScreens = (SubScreen.offset != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf("%d,%d %dx%d -- %d,%d %dx%d\n",
|
||||||
|
// srcRects[0].left,srcRects[0].top, srcRects[0].right-srcRects[0].left, srcRects[0].bottom-srcRects[0].top,
|
||||||
|
// srcRects[1].left,srcRects[1].top, srcRects[1].right-srcRects[1].left, srcRects[1].bottom-srcRects[1].top
|
||||||
|
// );
|
||||||
|
|
||||||
|
|
||||||
|
//draw two screens
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
|
||||||
|
for(int i=0;i<2;i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
//none of this makes any goddamn sense. dont even try.
|
||||||
|
int idx = i;
|
||||||
|
int ofs = 0;
|
||||||
|
switch(video.rotation)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
ofs = 3;
|
||||||
|
idx = 1-i;
|
||||||
|
std::swap(srcRects[idx].right,srcRects[idx].bottom);
|
||||||
|
std::swap(srcRects[idx].left,srcRects[idx].top);
|
||||||
|
break;
|
||||||
|
case 180:
|
||||||
|
idx = 1-i;
|
||||||
|
ofs = 2;
|
||||||
|
break;
|
||||||
|
case 270:
|
||||||
|
std::swap(srcRects[idx].right,srcRects[idx].bottom);
|
||||||
|
std::swap(srcRects[idx].left,srcRects[idx].top);
|
||||||
|
ofs = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
float u1 = srcRects[idx].left/256.0f;
|
||||||
|
float u2 = srcRects[idx].right/256.0f;
|
||||||
|
float v1 = srcRects[idx].top/384.0f;
|
||||||
|
float v2 = srcRects[idx].bottom/384.0f;
|
||||||
|
float u[] = {u1,u2,u2,u1};
|
||||||
|
float v[] = {v1,v1,v2,v2};
|
||||||
|
|
||||||
|
glTexCoord2f(u[(ofs+0)%4],v[(ofs+0)%4]);
|
||||||
|
glVertex2i(dr[i].left,dr[i].top);
|
||||||
|
glTexCoord2f(u[(ofs+1)%4],v[(ofs+1)%4]);
|
||||||
|
glVertex2i(dr[i].right,dr[i].top);
|
||||||
|
glTexCoord2f(u[(ofs+2)%4],v[(ofs+2)%4]);
|
||||||
|
glVertex2i(dr[i].right,dr[i].bottom);
|
||||||
|
glTexCoord2f(u[(ofs+3)%4],v[(ofs+3)%4]);
|
||||||
|
glVertex2i(dr[i].left,dr[i].bottom);
|
||||||
|
}
|
||||||
|
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
gldisplay.showPage();
|
||||||
|
}
|
||||||
|
|
||||||
//the directdraw final presentation portion of display, including rotating
|
//the directdraw final presentation portion of display, including rotating
|
||||||
static void DD_DoDisplay()
|
static void DD_DoDisplay()
|
||||||
{
|
{
|
||||||
|
@ -1590,7 +1813,18 @@ static void DoDisplay(bool firstTime)
|
||||||
aggDraw.hud->clear();
|
aggDraw.hud->clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
DD_DoDisplay();
|
bool hw = (GetStyle()&DWS_DDRAW_HW)!=0;
|
||||||
|
bool sw = (GetStyle()&DWS_DDRAW_SW)!=0;
|
||||||
|
if(hw || sw)
|
||||||
|
{
|
||||||
|
gldisplay.kill();
|
||||||
|
DD_DoDisplay();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//other cases..?
|
||||||
|
OGL_DoDisplay();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void displayProc()
|
void displayProc()
|
||||||
|
@ -2531,6 +2765,8 @@ int _main()
|
||||||
//7zip initialization
|
//7zip initialization
|
||||||
InitDecoder();
|
InitDecoder();
|
||||||
|
|
||||||
|
dwMainThread = GetCurrentThreadId();
|
||||||
|
|
||||||
#ifdef HAVE_WX
|
#ifdef HAVE_WX
|
||||||
wxInitialize();
|
wxInitialize();
|
||||||
#endif
|
#endif
|
||||||
|
@ -2564,7 +2800,6 @@ int _main()
|
||||||
#endif
|
#endif
|
||||||
// struct configured_features my_config;
|
// struct configured_features my_config;
|
||||||
|
|
||||||
extern bool windows_opengl_init();
|
|
||||||
oglrender_init = windows_opengl_init;
|
oglrender_init = windows_opengl_init;
|
||||||
|
|
||||||
|
|
||||||
|
@ -2598,6 +2833,10 @@ int _main()
|
||||||
int dispMethod = GetPrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_HW, IniName);
|
int dispMethod = GetPrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_HW, IniName);
|
||||||
if(dispMethod == DISPMETHOD_DDRAW_SW)
|
if(dispMethod == DISPMETHOD_DDRAW_SW)
|
||||||
style |= DWS_DDRAW_SW;
|
style |= DWS_DDRAW_SW;
|
||||||
|
if(dispMethod == DISPMETHOD_DDRAW_HW)
|
||||||
|
style |= DWS_DDRAW_HW;
|
||||||
|
if(dispMethod == DISPMETHOD_OPENGL)
|
||||||
|
style |= DWS_OPENGL;
|
||||||
|
|
||||||
windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName);
|
windowSize = GetPrivateProfileInt("Video","Window Size", 0, IniName);
|
||||||
video.rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
|
video.rotation = GetPrivateProfileInt("Video","Window Rotate", 0, IniName);
|
||||||
|
@ -3289,8 +3528,8 @@ void SetRotate(HWND hwnd, int rot, bool user)
|
||||||
case 270: cwid = IDC_ROTATE0; ccwid = IDC_ROTATE180; break;
|
case 270: cwid = IDC_ROTATE0; ccwid = IDC_ROTATE180; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindowToolbar->ChangeButtonID(6, ccwid);
|
MainWindowToolbar->ChangeButtonID(4, ccwid);
|
||||||
MainWindowToolbar->ChangeButtonID(7, cwid);
|
MainWindowToolbar->ChangeButtonID(5, cwid);
|
||||||
|
|
||||||
WritePrivateProfileInt("Video","Window Rotate",video.rotation,IniName);
|
WritePrivateProfileInt("Video","Window Rotate",video.rotation,IniName);
|
||||||
if(user)
|
if(user)
|
||||||
|
@ -4121,8 +4360,10 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
MainWindow->checkMenu(IDC_STATEREWINDING, staterewindingenabled == 1 );
|
MainWindow->checkMenu(IDC_STATEREWINDING, staterewindingenabled == 1 );
|
||||||
|
|
||||||
MainWindow->checkMenu(ID_DISPLAYMETHOD_VSYNC, (GetStyle()&DWS_VSYNC)!=0);
|
MainWindow->checkMenu(ID_DISPLAYMETHOD_VSYNC, (GetStyle()&DWS_VSYNC)!=0);
|
||||||
MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWHW, (GetStyle()&DWS_DDRAW_SW)==0);
|
MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWHW, (GetStyle()&DWS_DDRAW_HW)!=0);
|
||||||
MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWSW, (GetStyle()&DWS_DDRAW_SW)!=0);
|
MainWindow->checkMenu(ID_DISPLAYMETHOD_DIRECTDRAWSW, (GetStyle()&DWS_DDRAW_SW)!=0);
|
||||||
|
MainWindow->checkMenu(ID_DISPLAYMETHOD_OPENGL, (GetStyle()&DWS_OPENGL)!=0);
|
||||||
|
MainWindow->checkMenu(ID_DISPLAYMETHOD_FILTER, (GetStyle()&DWS_FILTER)!=0);
|
||||||
|
|
||||||
MainWindow->checkMenu(IDC_BACKGROUNDPAUSE, lostFocusPause);
|
MainWindow->checkMenu(IDC_BACKGROUNDPAUSE, lostFocusPause);
|
||||||
MainWindow->checkMenu(IDC_BACKGROUNDINPUT, allowBackgroundInput);
|
MainWindow->checkMenu(IDC_BACKGROUNDINPUT, allowBackgroundInput);
|
||||||
|
@ -4173,18 +4414,19 @@ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
||||||
MainWindowToolbar->AppendButton(IDM_PAUSE, IDB_PLAY, 0, false);
|
MainWindowToolbar->AppendButton(IDM_PAUSE, IDB_PLAY, 0, false);
|
||||||
MainWindowToolbar->AppendSeparator();
|
MainWindowToolbar->AppendSeparator();
|
||||||
|
|
||||||
int cwid, ccwid;
|
//zero 03-feb-2013 - this isnt necessary, since the SetRotate function gets called eventually
|
||||||
DWORD rotstate = (video.layout == 0) ? TBSTATE_ENABLED : 0;
|
//int cwid, ccwid;
|
||||||
switch (video.rotation)
|
//switch (video.rotation)
|
||||||
{
|
//{
|
||||||
case 0: cwid = IDC_ROTATE90; ccwid = IDC_ROTATE270; break;
|
// case 0: cwid = IDC_ROTATE90; ccwid = IDC_ROTATE270; break;
|
||||||
case 90: cwid = IDC_ROTATE180; ccwid = IDC_ROTATE0; break;
|
// case 90: cwid = IDC_ROTATE180; ccwid = IDC_ROTATE0; break;
|
||||||
case 180: cwid = IDC_ROTATE270; ccwid = IDC_ROTATE90; break;
|
// case 180: cwid = IDC_ROTATE270; ccwid = IDC_ROTATE90; break;
|
||||||
case 270: cwid = IDC_ROTATE0; ccwid = IDC_ROTATE180; break;
|
// case 270: cwid = IDC_ROTATE0; ccwid = IDC_ROTATE180; break;
|
||||||
}
|
//}
|
||||||
|
|
||||||
MainWindowToolbar->AppendButton(ccwid, IDB_ROTATECCW, rotstate, false);
|
DWORD rotstate = (video.layout == 0) ? TBSTATE_ENABLED : 0;
|
||||||
MainWindowToolbar->AppendButton(cwid, IDB_ROTATECW, rotstate, false);
|
MainWindowToolbar->AppendButton(0, IDB_ROTATECCW, rotstate, false);
|
||||||
|
MainWindowToolbar->AppendButton(0, IDB_ROTATECW, rotstate, false);
|
||||||
|
|
||||||
//we WANT it to be hard to do these operations. accidents would be bad. lets not use these buttons
|
//we WANT it to be hard to do these operations. accidents would be bad. lets not use these buttons
|
||||||
//MainWindowToolbar->AppendSeparator();
|
//MainWindowToolbar->AppendSeparator();
|
||||||
|
@ -4982,7 +5224,6 @@ DOKEYDOWN:
|
||||||
|
|
||||||
case IDM_IMPORTBACKUPMEMORY:
|
case IDM_IMPORTBACKUPMEMORY:
|
||||||
{
|
{
|
||||||
OPENFILENAME ofn;
|
|
||||||
NDS_Pause();
|
NDS_Pause();
|
||||||
if (!importSave(hwnd, hAppInst))
|
if (!importSave(hwnd, hAppInst))
|
||||||
MessageBox(hwnd,"Save was not successfully imported", "Error", MB_OK | MB_ICONERROR);
|
MessageBox(hwnd,"Save was not successfully imported", "Error", MB_OK | MB_ICONERROR);
|
||||||
|
@ -5328,7 +5569,7 @@ DOKEYDOWN:
|
||||||
case ID_DISPLAYMETHOD_DIRECTDRAWHW:
|
case ID_DISPLAYMETHOD_DIRECTDRAWHW:
|
||||||
{
|
{
|
||||||
Lock lock (win_backbuffer_sync);
|
Lock lock (win_backbuffer_sync);
|
||||||
SetStyle(GetStyle()&~DWS_DDRAW_SW);
|
SetStyle((GetStyle()&~DWS_DISPMETHODS) | DWS_DDRAW_HW);
|
||||||
WritePrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_HW, IniName);
|
WritePrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_HW, IniName);
|
||||||
ddraw.createSurfaces(hwnd);
|
ddraw.createSurfaces(hwnd);
|
||||||
}
|
}
|
||||||
|
@ -5337,12 +5578,29 @@ DOKEYDOWN:
|
||||||
case ID_DISPLAYMETHOD_DIRECTDRAWSW:
|
case ID_DISPLAYMETHOD_DIRECTDRAWSW:
|
||||||
{
|
{
|
||||||
Lock lock (win_backbuffer_sync);
|
Lock lock (win_backbuffer_sync);
|
||||||
SetStyle(GetStyle()|DWS_DDRAW_SW);
|
SetStyle((GetStyle()&~DWS_DISPMETHODS) | DWS_DDRAW_SW);
|
||||||
WritePrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_SW, IniName);
|
WritePrivateProfileInt("Video","Display Method", DISPMETHOD_DDRAW_SW, IniName);
|
||||||
ddraw.createSurfaces(hwnd);
|
ddraw.createSurfaces(hwnd);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ID_DISPLAYMETHOD_OPENGL:
|
||||||
|
{
|
||||||
|
Lock lock (win_backbuffer_sync);
|
||||||
|
SetStyle((GetStyle()&~DWS_DISPMETHODS) | DWS_OPENGL);
|
||||||
|
WritePrivateProfileInt("Video","Display Method", DISPMETHOD_OPENGL, IniName);
|
||||||
|
ddraw.createSurfaces(hwnd);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ID_DISPLAYMETHOD_FILTER:
|
||||||
|
{
|
||||||
|
Lock lock (win_backbuffer_sync);
|
||||||
|
SetStyle((GetStyle()^DWS_FILTER));
|
||||||
|
WritePrivateProfileInt("Video","Display Method Filter", (GetStyle()^DWS_FILTER)?1:0, IniName);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case IDM_RESET:
|
case IDM_RESET:
|
||||||
ResetGame();
|
ResetGame();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -6617,11 +6875,9 @@ bool DDRAW::release()
|
||||||
{
|
{
|
||||||
if (!handle) return true;
|
if (!handle) return true;
|
||||||
|
|
||||||
if (clip !=NULL)
|
if (clip != NULL) clip->Release();
|
||||||
clip->Release();
|
if (surface.back != NULL) surface.back->Release();
|
||||||
|
if (surface.primary != NULL) surface.primary->Release();
|
||||||
if (surface.primary != NULL)
|
|
||||||
surface.primary->Release();
|
|
||||||
|
|
||||||
if (FAILED(handle->Release())) return false;
|
if (FAILED(handle->Release())) return false;
|
||||||
return true;
|
return true;
|
||||||
|
@ -6631,9 +6887,14 @@ bool DDRAW::createSurfaces(HWND hwnd)
|
||||||
{
|
{
|
||||||
if (!handle) return true;
|
if (!handle) return true;
|
||||||
|
|
||||||
if (clip) clip->Release();
|
if (clip) { clip->Release(); clip = NULL; }
|
||||||
if (surface.back) surface.back->Release();
|
if (surface.back) { surface.back->Release(); surface.back = NULL; }
|
||||||
if (surface.primary) surface.primary->Release();
|
if (surface.primary) { surface.primary->Release(); surface.primary = NULL; }
|
||||||
|
|
||||||
|
bool hw = (GetStyle()&DWS_DDRAW_HW)!=0;
|
||||||
|
bool sw = (GetStyle()&DWS_DDRAW_SW)!=0;
|
||||||
|
|
||||||
|
if(!hw && !sw) return true;
|
||||||
|
|
||||||
// primary
|
// primary
|
||||||
memset(&surfDesc, 0, sizeof(surfDesc));
|
memset(&surfDesc, 0, sizeof(surfDesc));
|
||||||
|
@ -6648,7 +6909,7 @@ bool DDRAW::createSurfaces(HWND hwnd)
|
||||||
surfDescBack.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
surfDescBack.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
|
||||||
surfDescBack.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
surfDescBack.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
|
||||||
|
|
||||||
if(GetStyle()&DWS_DDRAW_SW)
|
if(sw)
|
||||||
surfDescBack.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
surfDescBack.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
|
||||||
else
|
else
|
||||||
surfDescBack.ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
|
surfDescBack.ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (C) 2006-2009 DeSmuME team
|
Copyright (C) 2006-2013 DeSmuME team
|
||||||
|
|
||||||
This file is free software: you can redistribute it and/or modify
|
This file is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -20,11 +20,14 @@
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
#include <gl/gl.h>
|
#include <gl/gl.h>
|
||||||
#include <gl/glext.h>
|
#include <gl/glext.h>
|
||||||
|
#include <GL/wglext.h>
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "CWindow.h"
|
#include "CWindow.h"
|
||||||
|
#include "OGLRender.h"
|
||||||
|
|
||||||
extern WINCLASS *MainWindow;
|
extern WINCLASS *MainWindow;
|
||||||
|
|
||||||
|
static HWND hwndFake;
|
||||||
static bool oglAlreadyInit = false;
|
static bool oglAlreadyInit = false;
|
||||||
|
|
||||||
int CheckHardwareSupport(HDC hdc)
|
int CheckHardwareSupport(HDC hdc)
|
||||||
|
@ -44,19 +47,51 @@ int CheckHardwareSupport(HDC hdc)
|
||||||
return -1; // check error
|
return -1; // check error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool initContext(HWND hwnd, HGLRC *hRC)
|
||||||
|
{
|
||||||
|
int pixelFormat;
|
||||||
|
|
||||||
|
*hRC = NULL;
|
||||||
|
|
||||||
|
HDC oglDC = GetDC (hwnd);
|
||||||
|
|
||||||
|
static PIXELFORMATDESCRIPTOR pfd =
|
||||||
|
{ 0, 0, PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
pixelFormat = ChoosePixelFormat(oglDC, &pfd);
|
||||||
|
if (pixelFormat == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(!SetPixelFormat(oglDC, pixelFormat, &pfd))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*hRC = wglCreateContext(oglDC);
|
||||||
|
if (!hRC)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static HGLRC main_hRC;
|
||||||
|
|
||||||
|
static bool _begin()
|
||||||
|
{
|
||||||
|
HDC oglDC = GetDC (NULL);
|
||||||
|
|
||||||
|
if(!wglMakeCurrent(oglDC, main_hRC))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool windows_opengl_init()
|
bool windows_opengl_init()
|
||||||
{
|
{
|
||||||
HDC oglDC = NULL;
|
static const char *opengl_modes[3]={"software","half hardware (MCD driver)","hardware"};
|
||||||
HGLRC hRC = NULL;
|
|
||||||
int pixelFormat;
|
|
||||||
PIXELFORMATDESCRIPTOR pfd;
|
|
||||||
int res;
|
|
||||||
char *opengl_modes[3]={"software","half hardware (MCD driver)","hardware"};
|
|
||||||
|
|
||||||
if(oglAlreadyInit == true) return true;
|
if(oglAlreadyInit == true) return true;
|
||||||
|
|
||||||
oglDC = GetDC (MainWindow->getHWnd());
|
GLuint PixelFormat;
|
||||||
|
static PIXELFORMATDESCRIPTOR pfd;
|
||||||
memset(&pfd,0, sizeof(PIXELFORMATDESCRIPTOR));
|
memset(&pfd,0, sizeof(PIXELFORMATDESCRIPTOR));
|
||||||
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
|
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
|
||||||
pfd.nVersion = 1;
|
pfd.nVersion = 1;
|
||||||
|
@ -67,22 +102,13 @@ bool windows_opengl_init()
|
||||||
pfd.cAlphaBits = 8;
|
pfd.cAlphaBits = 8;
|
||||||
pfd.cStencilBits = 8;
|
pfd.cStencilBits = 8;
|
||||||
pfd.iLayerType = PFD_MAIN_PLANE ;
|
pfd.iLayerType = PFD_MAIN_PLANE ;
|
||||||
|
HDC hDC = GetDC(NULL);
|
||||||
|
PixelFormat = ChoosePixelFormat(hDC, &pfd);
|
||||||
|
SetPixelFormat(hDC, PixelFormat, &pfd);
|
||||||
|
main_hRC = wglCreateContext(hDC);
|
||||||
|
wglMakeCurrent(hDC, main_hRC);
|
||||||
|
|
||||||
pixelFormat = ChoosePixelFormat(oglDC, &pfd);
|
int res = CheckHardwareSupport(hDC);
|
||||||
if (pixelFormat == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if(!SetPixelFormat(oglDC, pixelFormat, &pfd))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
hRC = wglCreateContext(oglDC);
|
|
||||||
if (!hRC)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if(!wglMakeCurrent(oglDC, hRC))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
res=CheckHardwareSupport(oglDC);
|
|
||||||
if (res>=0&&res<=2)
|
if (res>=0&&res<=2)
|
||||||
INFO("OpenGL mode: %s\n",opengl_modes[res]);
|
INFO("OpenGL mode: %s\n",opengl_modes[res]);
|
||||||
else
|
else
|
||||||
|
@ -90,5 +116,7 @@ bool windows_opengl_init()
|
||||||
|
|
||||||
oglAlreadyInit = true;
|
oglAlreadyInit = true;
|
||||||
|
|
||||||
|
oglrender_beginOpenGL = _begin;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2013 DeSmuME team
|
||||||
|
|
||||||
|
This file is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with the this software. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
bool windows_opengl_init();
|
||||||
|
bool initContext(HWND hwnd, HGLRC *hRC);
|
|
@ -905,9 +905,12 @@
|
||||||
#define ID_FILTRI_HQ4X 40092
|
#define ID_FILTRI_HQ4X 40092
|
||||||
#define ID_40093 40093
|
#define ID_40093 40093
|
||||||
#define IDM_SLOT1 40097
|
#define IDM_SLOT1 40097
|
||||||
|
#define ID_DISPLAYMETHOD_OPENGL 40102
|
||||||
#define IDM_FILE_IMPORT_DB 40103
|
#define IDM_FILE_IMPORT_DB 40103
|
||||||
#define IDM_AUTODETECTSAVETYPE_INTERNAL 40104
|
#define IDM_AUTODETECTSAVETYPE_INTERNAL 40104
|
||||||
|
#define ID_DISPLAYMETHOD_OPENGL_FILTER 40104
|
||||||
#define IDM_AUTODETECTSAVETYPE_FROMDATABASE 40105
|
#define IDM_AUTODETECTSAVETYPE_FROMDATABASE 40105
|
||||||
|
#define ID_DISPLAYMETHOD_FILTER 40106
|
||||||
#define ID_LABEL_HK3b 44670
|
#define ID_LABEL_HK3b 44670
|
||||||
#define ID_LABEL_HK8b 44720
|
#define ID_LABEL_HK8b 44720
|
||||||
#define IDC_LABEL_UP 50000
|
#define IDC_LABEL_UP 50000
|
||||||
|
@ -1011,7 +1014,7 @@
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 128
|
#define _APS_NEXT_RESOURCE_VALUE 128
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40102
|
#define _APS_NEXT_COMMAND_VALUE 40106
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1054
|
#define _APS_NEXT_CONTROL_VALUE 1054
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue