Cheb's Home Page
Orphus system

Cheb's Home Page

Cheb's Game Engine Quake II facelift
Штошник на ушах




I moved further discussion and news to forum. Sorry, it's in Russian.


Public test #16 (download, 2.3Mb). Render to texture, automatic graphics quality control, adaptive supersampling using pixel shader for better smoothing


Unexpected glitches during testing in 32-bit Wine in 64-bit Debian 7.2 wheezy. One was eventually written off as a glitch of sshfs/fuse, but the second one was more serious. The application was locking up on exit, with Wine logging in an endless cycle:

err:ntdll:RtlpWaitForCriticalSection section 0x1d4148 "?" wait timed out in thread 0009, blocked by 3d3d3d3d, retrying (60 sec)

My code was using bare TRTLCriticalSection, I changed it to use TCriticalSection wrapper class from syncobjs unit. That solved the problem and I could observe 20 FPS on a free implementation of OpenGL 2


The exception handling problem in Win32 is utterly defeated! Using the sources of the System unit, I wrote a simple hack that extends the exception catching to the module DLL making any wrappers unnecessary. It's really simple. Install your own exception handler where you check if exception address belongs to your DLL and just jump to the proc in the DLL that raises a language exception. Otherwise just call the old handler..It's simple!


I did a horrible, perverted thing with my spare computer... But I now know that Chentrah does work in a vanilla, freshly-installed Windows 98 SE (installing it brought back so much memories... Ahh, nostalgic ). The only upgrade I applied was the nVidia display driver (guess what? There is OpenGL 2.0 support for the ole Win98!)


I upgraded FreePascal for Linux from 2.2.0 to 2.2.2... and unexpectedly, it created a problem with Vampyre Imaging library. Or, more precisely, with the OpenJpeg library it uses. The formerly working {$linklib stdc++} didn't work any more, and the errors hinted that my executable doesn't have some additional c libraries linked in.

I remade the corresponding Vampyre unit for dynamic linking of but surprisingly, that didn't work either. After some googling and additional researching I found that the .so expected my executable to have the c libraries it needed! I resolved this by dynamically loading libstdc++ with the magic RTLD_GLOBAL flag, like this:
dll2:= dlopen(PChar(, RTLD_NOW or RTLD_GLOBAL);
dll := dlopen(PChar(, RTLD_NOW or RTLD_GLOBAL);


I tested it under user with name "山田" (Yamada) made of characters not representable in the system 8-bit encoding (CP 1251 in my case). Chentrah properly reported invalid user name and inacessibility of the user's home folder in "documents and settings" (the path had question marks in it). What is really strange, the user name also appeared to be "??" despite the fact that I use GetUserNameW(). Wonders of WinAPI?


Another perversion. The win32 version can detect when it runs in Wine and exploit the fact that Wine by default maps the filesystem root as drive Z:\ - so Chentrah tries to store its user data and settings data the Linux way: /home/<username>/.chentrah

News archive >>