Letter from Nexon Korea : “Reasons behind the D3D removal”
What we commonly refer to as the Counter Strike Online Engine, the GoldSrc Engine, is built to support many different types of rendering. Of the three possible types of rendering systems, OpenGL API, Direct3D (or D3D), and Software Renderer, Counter Strike Online was designed up until now for OpenGL and D3D. More specifically, the GoldSrc Engine calls the OpenGL API directly, and D3D really just re-implements OpenGL. The ultimate call order is GoldSrc => OpenGL API => D3D. Therefore, even when a user selects the D3D option, the commands for D3D get called through the OpenGL layer.
That means calling D3D, rather than calling the OpenGL API directly, generally requires larger overhead (additional computing cost) and is ultimately slower. Moreover, it's very difficult to improve the features of D3D, as it is a very old API using DirectX 6.0. There's always a barrier when trying to improve graphics here, as even the basic features of modern graphics APIs like fog, multi-textures, and so on, have not been fully implemented. To be honest, for Zombie Mode in D3D we've implemented exaggerated screen dimming since fog is not supported, and and light maps often break up because of multi-texture issues. Another issue is that it's just not possible to improve performance on D3D, since GoldSrc loads all graphic resources to system memory (RAM). This is also a major cause for crashes due to insufficient system memory. Most of the insufficient memory crash reports we receive are from D3D. This was a factor in deciding that Studio Mode, which required a lot of fixes regarding rendering, would only be allowed to be played using OpenGL.
The dev team had a lot of concerns regarding why so many users thought D3D was better than OpenGL. We can only speculate, but one possibility is that originally you could play at 100 frames per second using D3D, but the best you could do with OpenGL was 60 or 75 with max-window resolution. This was because D3D had vertical sync disabled by default while OpenGL had it on. That certainly led to the impression that OpenGL ran worse than D3D, since there was a noticeable performance gap between the two. Of course, some users would manually turn vertical sync off to get the full 100 FPS with OpenGL, and it's still possible to play at 100 FPS using the console commands "fpx_max 100; gl_vsync 0". Another reason that we can speculate on why users would lean toward D3D is that there were constant reports of OpenGL not initializing properly for users who had internal or switchable graphic cards. Although we could not identify the exact cause as it was difficult to reproduce this issue on our end, we believe updating your drivers will solve most instances of this.
In conclusion, we removed an outdated version of D3D, and will be strengthening the features of OpenGL to continuously improve and revamp the rendering of Counter Strike Online. A noteworthy effort from the past was hardware acceleration, supported experimentally through the r_hwaccel command, but this was only possible with OpenGL. It's currently removed, since it was experimental code and there were many security-related reports from many PCs. I hope you understand that we've made these decisions to provide the best results for the game, even though you may not be entirely satisfied. Please continue to report any issues or inconveniences due to the removal of D3D.