aboutsummaryrefslogtreecommitdiffstats
path: root/src/test
Commit message (Collapse)AuthorAgeFilesLines
* Bug 1211: Custom size for TestBug1211IRQ00NEWTSven Gothel2015-09-031-3/+9
| | | | | | Tested on GNU/Linux desktop machines (also our test node w/ nvidia, producing the issue sometimes) with jre8, jre7 and jre6. No interruption detected .. sadly.
* Bug 1211: Show Platform-Info for unit test TestBug1211IRQ00NEWT (commit ↵Sven Gothel2015-09-031-0/+2
| | | | 5f5553f1c0b6731970db6df24d79654661238247)
* Bug 1211: Adding unit test to identify Thread.interrupt() caller for ↵Sven Gothel2015-09-031-0/+230
| | | | DefaultEDTUtil.invokeImpl(..) wait interruption
* Bug 1210 - Use manual impl. XRenderFindVisualFormat instead of buggy ↵Sven Gothel2015-08-311-0/+158
| | | | | | | | | | | | | | | | | | | | generated version - XRenderDirectFormat XVisual2XRenderMask(..): - Move from JOGL's X11GLXGraphicsConfiguration -> Nativewindow X11GraphicsConfiguration - Always use manual impl. of XRenderFindVisualFormat Additionally: - Add X11GraphicsConfiguration.XVisualInfo2X11Capabilities(..) allowing to properly setup the resulting Capabilities instance as used in X11GraphicsConfigurationFactory.chooseGraphicsConfigurationImpl(..) - XVisualInfo: - Add 'String toString()' - 'XVisualInfo create(XVisualInfo s)' uses source buffer size! - XGetVisualInfo: Use returned buffer-capacity/count for element-size and also bail out if count<=0
* Bug 1203: Add missing constraints in desktop *GLContext.create* methods: ↵Sven Gothel2015-08-301-12/+22
| | | | | | | | | | | | | | | | | Bail out if GL ES is requested ; Fix test case *GLContext.createImpl(..) shall throw an GLException: *GLContext.createContextARBImpl(..) shall return 0: - Desktop implementation: if GL ES is requested - EGL implementation: if GL Desktop is requested, but not available Otherwise GLContextImpl may mistake a desktop context for an ES one. +++ Fix unit test TestGLAutoDrawableFactoryGLProfileDeviceNEWT.test11ES2OnDesktop(): We have to query the factory by desired profile, since the desktop factory cannot produce an GL ES context.
* Bug 1207 - GLDebugMessageHandler: Support GL_KHR_debug for Desktop and ES ↵Sven Gothel2015-08-302-22/+128
| | | | | | | | | | | | | | | | profile GL_KHR_debug <https://www.opengl.org/registry/specs/KHR/debug.txt> GL_KHR_debug shall be favorized before - GL_ARB_debug_output - GL_AMD_debug_output Allow GL_KHR_debug for GL2GL3 and GL2ES2 profiles, i.e. including ES profiles: GLES2, GLES3. GL_ARB_debug_output and GL_AMD_debug_output are only allowed for desktop GL2GL3 profiles.
* Bug 1203: Optimize OpenGL Profile probing/mapping (Skip redundant queries)Sven Gothel2015-08-301-2/+2
| | | | | | | | | | | | | | | Via GLDrawableFactory[Impl] the following details are considered while GLContextImpl.mapGLVersions(..): - hasOpenGLDesktopSupport If false, skip OpenGL Desktop queries - hasOpenGLESSupport If false, skip OpenGL ES queries - hasMajorMinorCreateContextARB If false, reduce [maxMajor.maxMinor..minMajor.minMinor] iteration, reducing to [maxMajor..minMajor], usually only one query.
* Bug 1203: Fix TestGLAutoDrawableFactoryGLProfileDeviceNEWT: Do not assume ↵Sven Gothel2015-08-291-0/+16
| | | | EGL/Desktop factories are available!
* Bug 1203: Adding factory-offscreen unit test, validating ES/GL usage with ↵Sven Gothel2015-08-291-0/+221
| | | | EGL and Desktop GLDrawableFactory
* Bug 1202 (related): Fix SEMVER regressions mostly due to Bug 1202 commits ↵Sven Gothel2015-08-291-3/+1
| | | | | | | | | (adding dummy methods) Commits deff49c901915e007f43a1df1a0d217a786e9f06 and 6ab634654f58afcf4549fcd1a796a0f9fd13298c changed/removed a few protected methods of public classes .. Re-added dummy methods .. shall be removed for next 2.4.* version
* Bug 1202 - Add support of Adaptive Vsync via [GLX|WGL]_EXT_swap_control_tearSven Gothel2015-08-2717-84/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [GLX|WGL]_EXT_swap_control_tear extensions support asynchronous buffer swaps, i.e. adaptive Vsync. <https://www.opengl.org/wiki/SwapInterval_aka_vsync#Adaptive_Vsync> <https://www.opengl.org/registry/specs/EXT/wgl_swap_control_tear.txt> <https://www.opengl.org/registry/specs/EXT/glx_swap_control_tear.txt> <http://keithp.com/blogs/async_flip/> The extensions utilizes a negative interval value, enabling late swaps to occur without synchronization to the video frame. Hence '-1' has new semantics, previously it was the 'default value' of 'untouched vsync interval'. New default is: - 0 for unrealized context - 1 for realized context +++ It requires [GLX|WGL]_EXT_swap_control, hence we shall ensure to use use this extension in the implementation of GLContext.setSwapInterval(..). +++ Mesa3D seems to support GLX_SGI_swap_control only. +++ Implemented on Windows and X11. +++ On GNU/Linux using NVidia driver w/ my setup(*), sadly the query GLX.glXQueryDrawable(displayHandle, drawable.getHandle(), GLX.GLX_LATE_SWAPS_TEAR_EXT, val); always returns zero here, indicating async vsync is not supported. (Queried the attribute for every frame in windowed or fullscreen mode) Fullscreen (*) - Debian 8 - Kernel 3.16 - KDE/Kwin - GL Version 4.5 (Core profile, arb, compat[ES2, ES3, ES31], FBO, hardware) - 4.5.0 NVIDIA 355.06 [GL 4.5.0, vendor 355.6.0 (NVIDIA 355.06)] - GL_RENDERER GeForce GTX 660/PCIe/SSE2 - Samsung U28D590 (DFP-4): Internal DisplayPort +++
* Bug 1188: Fix API doc of getSupportedStateMask(); Misc Changes (see below)Sven Gothel2015-08-251-21/+4
| | | | | | | | - Fix STATE_MASK_CREATENATIVE - Simplify resetStateMask() - Windows WindowDriver: Remove STATE_MASK_STICKY from supported states - TestGearsNEWT: Use NEWTDemoListener
* Bug 1188: Introduce getSupportedStateMask() implemented via WindowDriver's ↵Sven Gothel2015-08-211-0/+2
| | | | | | | | | | | | | getSupportedReconfigMaskImpl() - See getSupportedStateMask() for semantics - getSupportedReconfigMaskImpl() result now used for isReconfigureMaskSupported() - getSupportedReconfigMaskImpl() implementations: - Full featured: X11, Windows and OSX - X11: Use WindowManager Atoms for certain features (dynamic) - Others: Use fixed features. - TODO: Consider avoiding actions if not supported.
* Bug 1042: ImageIOUtil -> ImageType + ImageType.Util ; Fix implementation and ↵Sven Gothel2015-08-193-0/+385
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | test. - ImageIOUtil -> ImageType + ImageType.Util - ImageType.Util.getFileSuffix(..): - Fix byte type conversion, i.e. 'b == (byte)0x89', cast is required to avoid byte -> int conversion. Note: signed byte -128 - +128 - Parse in O(1), i.e. lexicographical parsing - FIXME: We seem to have at least three type collisions, validate! - ImageType: - Complete T_* w/ API doc -> FIXME/TODO missing type references! - ImageType instancing via InputStream or manual type definition. - TextureData - Contains optional source ImageType - TextureProvider: - Deprecate newTextureData(..) variants other than InputStream simplifying TextureIO. - TextureProvider.SupportsImageTypes: - Added interface, allowing mapping ImageType -> provider - Tested standalone ImageType (TestImageTypeNEWT) and via TextureIO (TestTextureIONEWT) utilizing list of all test data (ImageTstFiles), i.e. PNG, JPG, TGA and DDS.
* Bug 1188: Refine Maximized on X11 / Impl. Maximized and Iconify on WindowsSven Gothel2015-08-121-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | WindowImpl - remove updateMinMaxSize(..) - unused info - fix appendStateToString: show all maximized state changes if reconfig - add sizePosMaxInsetsChanged(..) and sendMouseEventRequestFocus(..) accumulating multiple callbacks from impl. - add: maximizedChanged(..) notification from native impl. - refine manual maximized mode used for OSX and Windows (single extent) - reconfigMaximizedManual(..) - resetMaximizedManual(..) X11 WindowDriver: - Update maximized at xreconfig, read from _NET_WM_STATE - Use less Java callbacks from JNI Windows WindowDriver: - Use native maximized, if HORZ && VERT, otherwise use manual maximized for single extent. - Invisible of top-window -> MINIMIZED/ICONIFY showing the app in task-bar.
* Bug 1188: Fix regression on X11 setVisible: in-visibility never reached on ↵Sven Gothel2015-08-111-1/+1
| | | | | | | | | child windows It has been experienced that UnmapNotify is not sent for child windows when using IconicState! Hence the visible:=false event never reaches the Window, causing an error. This patch only uses IconicState for top-level windows and if requested.
* Bug 1188, Bug 1186: NEWT Window: Support non-resizable, minimize, maximize, ↵Sven Gothel2015-08-106-630/+593
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | alwaysOnBottom and sticky/all-desktop (Part 1) Change also implements Bug 1186: 'NEWT Window: Use a Bitfield holding all state flags and expose it accordingly', since it is essential for an efficient implementation. Part 1: - Bug 1186 - Using Bitfield, holding public (Window) and private state bits/mask - Bug 1188 - Window adds: - [is|set]AlwaysOnBottom(..), - [is|set]Resizable(..), - [is|set]Sticky(..), - [is|set]Maximized(..), - isChildWindow(), - Full implementation for X11 - TODO: Implement for OSX and Windows - Manual tests: - TestGearsES2NEWT, TestGearsES2NEWTSimple and TestGearsES2NewtCanvasAWT utilize new NewtDemoListener, which has a key-listener to perform all [new] actions. See source code of NewtDemoListener.
* Bug 1145 - Fat Jar: Add default main entry test TestGearsES2SimpleNEWTSven Gothel2015-07-291-0/+378
|
* Bug 1154 - Make plugin3-public.jar optional: Part 1 / 2 (Relocate Applet3 ↵Sven Gothel2015-07-281-4/+5
| | | | classes)
* Bug 1180: Refine TestMapBufferRead01NEWT, add TestMapBufferRead02NEWT: Add ↵Sven Gothel2015-07-242-30/+235
| | | | assertion checks and latter test uses FloatBuffer
* Fix TestBug1146GLContextDialogToolTipAWT / AWTRobotUtil.mouseClick(..) use ↵Sven Gothel2015-07-242-6/+8
| | | | BUTTON1_MASK instead of BUTTON1_DOWN_MASK
* Bug 1160: Fix/Refine test case: Stable master thread; Disable 'masterLock' ↵Sven Gothel2015-07-241-19/+40
| | | | in slave-creation (causes failure on windows)
* Bug 1160: Fix test case (Avoid blocking/concurrent master context usage on AWT)Sven Gothel2015-07-241-81/+125
| | | | | | | | | | | | | | + // We cannot use EventQueue.invokeAndWait(..) since it will + // block this will block the current thread, holding the context! + // The whole issue w/ an external shared context is make-current + // synchronization. JOGL attempts to lock the surface/drawable + // of the master context to avoid concurrent usage. + // The semantic constraints of a shared context are not well defined, + // i.e. some driver may allow creating a shared context w/ a master context + // to be in use - others don't. + // Hence it is up to the user to sync the external master context in this case, + // see 'masterLock' of in this code! + // EventQueue.invokeAndWait(initializer);
* Bug 1160: Fix unit test name and some minor details .. (convention)Sven Gothel2015-07-241-30/+46
|
* Bug 1146, Bug 1158: Add missing GLClearColor classSven Gothel2015-07-241-0/+61
|
* Merge pull request #87 from TomNuydens/bug_1160Sven Gothel2015-07-241-0/+180
|\ | | | | Unit test for bug 1160: context sharing between external GL context and offscreen drawable
| * Unit test for bug 1160; context sharing between an offscreen drawable and an ↵Tom Nuydens2015-06-011-0/+180
| | | | | | | | external GL context
* | Bug 1146, Bug 1158: Add unit test for GLContext creation after showing ↵Sven Gothel2015-07-243-1/+280
| | | | | | | | | | | | | | | | tool-tip within JDialog Test passes on GNU/Linux X11 and Windows - both using NVidia driver. Unit test is based on Robin Provost's code as attached in Bug 1158.
* | Bug 1151 - Fix using DK1 on OVR 0.5*; Minor changesSven Gothel2015-07-201-5/+5
| |
* | StereoDevice (Generic/OVR): Add knowledge about LocationSensorParameter and ↵Sven Gothel2015-07-201-0/+20
| | | | | | | | allow reset origin of location-sensor
* | Clarify code in stereo/ovr: Comments, states, names, formatting.Sven Gothel2015-07-201-1/+2
| |
* | Bug 1151 - Working OculusVR SDK 0.5.0.1 on GNU/Linux w/ Positional Tracker (DK2)Sven Gothel2015-07-184-15/+26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Note: The ovrd server must run, otherwise no device is being detected. General Stereo API Changes: - EyePose -> ViewerPose - We only use the viewer pose and derive the pupile position via EyeParameter. - Hence we reduce complexity. - A single ViewerPose will be maintained by StereoDeviceRenderer - position is in meter, allowing StereoGLEventListener to scale device independent. - StereoDevice receives knowledge of certain sensors, to be queried and used for start-sensors. OVR: - Simply apply the above general changes - Build: Remove [more] unused API entries for SDK rendering
* | PointShader: Use same precision for shared uniform in vertex- and fragment ↵Sven Gothel2015-07-162-2/+14
|/ | | | | | | | | shader On GNU/Linux NVidia 340.76 the test TestGLPointsNEWT failed otherwise: error: precision mismatch between shaders for uniform (named mgl_PointParams[0]) error: precision mismatch between shaders for uniform (named mgl_PointParams[1])
* Use CompatibilityType.BACKWARD_COMPATIBLE_BINARY for 2.3.1 / Add ↵Sven Gothel2015-04-041-3/+3
| | | | EGL.KHRONOS_BOOLEAN_ENUM_FORCE_SIZE manually to avoid binary incompatibility
* TestVersionSemanticsNOUI: Fix expected compat result (inactive tests)Sven Gothel2015-04-031-4/+4
|
* Bug 1153 - Adopt to ArrayHashSet change, don't use deprecated ctor (gluegen ↵Sven Gothel2015-04-011-1/+1
| | | | commit c156343fec33ceea7f238b9766a9f4985fb92687)
* TestVersionSemanticsNOUI: Add version tests: v221 -> v230 and v230 -> v23x (*)v2.3.1v2.3.1_winexeSven Gothel2015-03-271-2/+25
| | | | | | | | | | | | | | | | | (*) Version v230 -> v23x Violates the semantic versioning spec a bit, i.e. minor API change within 'com/jogamp/opengl/util/stereo/' ! 2/ 11: com.jogamp.opengl.util.stereo.StereoDevice.Config : Remove 1, Change 0, Deprecate 0, Add 0 4/ 11: com.jogamp.opengl.util.stereo.StereoDeviceFactory : Remove 1, Change 0, Deprecate 0, Add 4 6/ 11: com.jogamp.opengl.util.stereo.StereoDeviceRenderer : Remove 1, Change 0, Deprecate 0, Add 1 Class com.jogamp.opengl.util.stereo.StereoDevice.Config Removed Class , access public super synchronized Class com.jogamp.opengl.util.stereo.StereoDeviceFactory Removed Method createDevice, desc (ILcom/jogamp/opengl/util/stereo/StereoDevice$Config;Z)Lcom/jogamp/opengl/util/stereo/StereoDevice;, access abstract public Class com.jogamp.opengl.util.stereo.StereoDeviceRenderer Removed Method getSingleSurfaceSize, desc ()Lcom/jogamp/nativewindow/util/DimensionImmutable;, access abstract public
* Bug 1116: Oculus SDK 0.4.4: Add extra DK1 detection; Add call to ↵Sven Gothel2015-03-271-0/+1
| | | | | | | | | | | | | | ovr_Shutdown() and ovrHmd_Destroy(hmdDesc). Add extra DK1 detection - SDK 0.4.4 w/ DK1 (Linux): ovrHmd_Detect() returns zero! - In such case: Try creating one device, which works for DK1 on Linux Add call to ovr_Shutdown() and ovrHmd_Destroy(hmdDesc). - Add StereoDeviceFactory.shutdown() and call ovr_Shutdown() for in OVRStereoDeviceFactory.shutdown(). - Call ovrHmd_Destroy(hmdDesc) in OVRStereoDevice.dispose().
* StereoDeviceUtil: Only rotate if current mode doesn't match required ↵Sven Gothel2015-03-271-0/+3
| | | | | | rotation. Add verbosity. Allowing user to permanently rotate the device ..
* Bug 1150 - Fix unit tests: Use same definition as in GLProfile for ↵Sven Gothel2015-03-262-2/+70
| | | | | | | | 'disableOpenGLARBContext', i.e. exclude OSX Also add 'TestGLProfileXXNEWTPost', run w/o any properties after TestGLProfile*NoARBCtx to be sure follow-up unit tests are tested under default conditions.
* Bug 1150 - Fix GLContextImpl.createImpl(..) NoARBCreateContext and '!ARB GL ↵Sven Gothel2015-03-265-844/+1211
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | >= 3.1' issues This fix solves the described issues below. Test cases added for onscreen and offscreen drawables, the latter includes Window's bitmap special case. GLContextImpl.createImpl(..): Fix NoARBCreateContext and '!ARB GL >= 3.1' issues: ================================================================================= GLContextImpl.createImpl(..) implementation of X11GLXContext and WindowsWGLContext wrongly handles the case of NoARBCreateContext. Here the !ARB created context shall allow GL >= 3.1, since ARB context creation is disabled and 'no mix' can occur. The latter was already intended due to failure criteris 'createContextARBTried' in: if( glCaps.getGLProfile().isGL3() && createContextARBTried ) { failure("createImpl ctx !ARB but ARB is used, profile > GL2 requested"); } Further, WindowsWGLContext treats glCaps.isBitmap() within the 'createContextARBTried=true' case, but it shall never tried using the ARB context creation method. This even lead to the issue of creating a 1.1 context, but having the ProcAddressTable being still on the GL > 2 cached table. This is due to 'setGLFunctionAvailability(..)'. Ensure 'setGLFunctionAvailability(..)' is functional ==================================================== Caller shall either throws an exception if method returns false or issues a state reset. In case 'setGLFunctionAvailability(..)' throws an exception itself, the states are no issue.
* Bug 1148 - OSX MonitorDevice: Use unique and native deviceID instead of indexSven Gothel2015-03-211-4/+4
| | | | | | | | | | | | | Adopt to bug 1147, commit 2c88b6dfd4eb7e2cd9a50fa48e08ecafc980931a. Using the native unique deviceID makes monitor identification more robust. This also allows us simplify displayID -> NSScreen-idx -> MonitorDevice into displayID -> MonitorDevice and to survive a primary monitor change.
* Bug 1116 - Add OculusVR DK2 Support - Part-1 (DK2 on DK1 SDK w/o Eye Tracker)Sven Gothel2015-03-211-4/+14
| | | | | | | | | | | | | | | | | - DK2's screen on X11 (at least) starts in rotated mode, detect and apply MonitorDevice rotation via NEWT's OpenGL StereoDeviceUtil - Move StereoDevice.Config -> StereoDeviceConfig - Expose generic StereoDevice to public: GenericStereoDeviceConfig + GenericStereoDeviceFactory - GenericStereoDeviceFactory exposes public GenericStereoDeviceConfig creation for mono, sbs-stereo and lense-sbs-stereo w/ diff. parameters. - Pass eye surface/texture size for each eye from device to renderer, instead of assuming unified values. - Unify GenericStereoDevice.createRenderer(..) and OVRStereoDevice.createRenderer(..) code
* Resolve RenameJavaSymbol issues (GLUgl2 and CGL) using GLEmitter (-> ↵v2.3.0Sven Gothel2015-03-112-13/+3
| | | | | | | | | | | | | | | | DelegateImplementation) due to new GlueGen Semantics GlueGen would usually use the original native C method name for proc-address or direct call. GLEmitter however uses the renamed method name, assuming it is shorter and resulted from a 'RenameExtensionIntoCore' directive. GLUgl2 native usage was broken since 2.2.4 GLUgl2 and CGL use RenameJavaSymbol w/ the intention of delegation, hence resolve the issue using the new DelegateImplementation directive which preserves the original function name for the native call.
* Bug 1142 - NEWT: Add support to retrieve the primary MonitorDeviceSven Gothel2015-03-091-38/+69
| | | | | | | | | | | | | | | | | Support added for - Windows - X11 XRandR 1.3 - OSX Note: Our whole MonitorMode association handling is currently _not_ dynamic. - only on Windows we actually use native unique ID, which might not change (adapter and monitor idx) - On OSX and X11 we simply use indices, but if monitor setup changes - they refer to different instances. In case it is desired to cover dynamic monitor setup change, we need to address this issue in a new bug entry.
* TestScreenMode02aNEWT: Incr. wait period, for some reason one older test ↵Sven Gothel2015-03-091-1/+1
| | | | machine (Linux/Ubuntu) doesn't rotate screen reliably.
* Bug 1130 - Add Mapping from AWT Component -> NEWT [Screen, MonitorDevice]Sven Gothel2015-02-171-33/+29
| | | | | | | | | | | | | | | | | | | | | | | The mapping AWT Component -> NEWT [Screen, MonitorDevice] shall allow generic AWT applications to utilize NEWT's MonitorDevice information like physical monitor-size and DPI. - AWT-Component -> NEWT-Display: - NewtFactoryAWT.createDisplay - AWT-Component -> NEWT-Screen: - NewtFactoryAWT.createScreen - AWT-Component -> NEWT-MonitorMode: - NewtFactoryAWT.getMonitorDevice - NewtFactoryAWT.getMonitorDevice - If OSX, utilizing OSX's AWT Component -> MonitorDevice-Index mapping - Otherwise using the coverage to identify MonitorDevice See TestGearsES2GLJPanelAWT 'GetPixelScale', demonstrating the mapping while pressing 'p' (cached MonitorMode) and pressing SHIFT-'p' (non-cached MonitorMode).
* NEWT MonitorDevice: Identify cloned devices (fully covered) ; Windows: ↵Sven Gothel2015-02-171-4/+12
| | | | | | | | | | | | | | | | | | | Iterate-over and identify all adapter:monitor. (Bug 1129) - Identify cloned devices (fully covered) - MonitorDevice gets 'isCloned()' to identify whether it is a cloned device, i.e. fully covered by another monitor. This detection may happen natively but will always performed platform agnostic. - getMainMonitor(..) now exclude 'cloned' devices - Windows: Iterate-over and identify all adapter:monitor - Since we also list cloned monitor, we need to iterate over all adapter and all it's monitor-devices. - The native monitor-id is now defined as: ( adapter-idx << 8 ) | monitor-idx. - Bug 1129 <- listed under this bug entry for convenience
* Fix typo: PixelFormat.Composition.[componenCount() -> componentCount()]Sven Gothel2015-02-161-4/+4
| | | | .. thx to Julien Gouesse's review.
* Bug 1129 - NEWT MonitorDevice's physical size on Windows must be read via EDIDSven Gothel2015-02-161-8/+11
| | | | | | | | | | | | | | | | | | | On Windows, one must read the monitor's EDID data as stored in the registry, no 'simple' API works otherwise. The proper way requires utilizing the Windows Setup-API. This code is inspired by Ofek Shilon's code and blog post: <http://ofekshilon.com/2014/06/19/reading-specific-monitor-dimensions/> See: function 'NewtEDID_GetMonitorSizeFromEDIDByModelName' In contrast to Ofek's code, function 'NewtEDID_GetMonitorSizeFromEDIDByDevice' uses the proper link from DISPLAY_DEVICE.DeviceID -> SP_DEVICE_INTERFACE_DETAIL_DATA.DevicePath, where DISPLAY_DEVICE.DeviceID is the monitor's enumeration via: EnumDisplayDevices(adapterName, monitor_idx, &ddMon, EDD_GET_DEVICE_INTERFACE_NAME); Hence the path to the registry-entry is well determined instead of just comparing the monitor's model name.