@mh
#2431 posted by Baker on 2018/08/20 19:23:35
Added to the list.
#2432 posted by Baker on 2018/08/21 00:43:35
Recursion is hated in lowest-level coding -- when you look at what is going on at the stack level.
Recursion causes tons of unnecessary stack push/pop slowing down what would be faster loop mechanics inside a single function.
Elegance hates "goto". Yet "goto" dominates the world and well-written low-level code is code that the compiler can reduce to "goto" form avoiding the use of recursion.
/The D3D9 sprite handling is making me think about how to best optimize sprites next round to fit how D3D9 wants the data fed.
#2433 posted by mh on 2018/08/21 07:51:06
This is just similar to the technique for making dynamic lights go fast - if you have a bunch of work to do, dividing it into fewer large batches will always outperform many smaller batches. Beyond that it's just a matter of understanding what patterns can prevent fewer large batches, and in any 3D API (including native OpenGL) that's going to be things like unnecessary state changes. Typically brought on by things that seem "right", such as unbinding textures/buffers, or putting state back the way it was after drawing an object.
The Quake code is riddled with small inefficiencies and it's death by 1000 cuts. None of this mattered in 1996 when GLQuake only ran on high end workstations, and everybody else had a 3DFX which routed it's drawing through a layer which tried to make something sensible out of it.
Ever bought a new GPU and found that Quake ran no faster on it?
Recursion is going to be down in the noise in any Q1 performance graph. Any decent compiler will automatically generate the right optimized tail-recursion code for you, without you needing to resort to tricksy or cutesy obfuscation. Don't waste time on the small beans.
In an ideal world that D3D9 code would not be needed; you could rip it out tomorrow and start investing time in making your OpenGL go fast, which IMO would be preferable to trying to make the 2 APIs coexist peacefully. The big secret is that Intel graphics are no longer crap, and haven't been for a long time. It's not Intel graphics, it's Quake's use of OpenGL that's crap.
As a general rule, bad OpenGL code will go faster than bad D3D code. But good D3D code will go faster than good OpenGL code. But in order to get good D3D code you need to go native and start writing code that's tailored to D3D's strengths; trying to translate bad GL code into something that tries to do the right thing in D3D can only get so far and will always throw up unexpected glitches and bottlenecks - like the sprites case.
@mh
#2434 posted by Baker on 2018/08/21 08:12:58
I was thinking of qmb and to some extent Nehahra extra effects that are in the engine (above and beyond stock Quake sprites). qmb is highly recursed.
#2435 posted by mh on 2018/08/21 10:31:52
Ah, I'm not familiar with the QMB code although I've been aware of the effects since almost the very beginning. That's something I must rectify.
@mh
#2436 posted by Baker on 2018/08/22 01:23:38
I took a look at the real-time lighting prototype you made a few hours ago.
Looking at the source, I thought the dates were funny because you wrote it at the same time as the DX9 wrapper.
#2437 posted by anonymous user on 2018/08/26 08:32:10
How do I enable vsync and set color depth in Mark V? And for a Quakespasmer just coming around to Mark V, what are some of the notable differences between Mark V and QS, ie. what's the reason behind developing two separate engines that do a lot of the same things?
Mark V Vs. QS
vid_vsync 1 (I think away from PC)
Mark V in DirectX 9, has mouse driven menus (if you get used to it and go to QS - you'll miss it), levels menu item, demos menu item, you can fast forward demos, some developer tools and a "find" function in the console - which is handy.
Quakespasm has excellent performance and compatibility with mods etc is very good. But I prefer Mark V overall for the reasons above.
#2439 posted by brassbite on 2018/08/26 15:17:36
Mark V does nehahra, whereas QS doesn't, correct me if I'm wrong
#2440 posted by R00k on 2018/08/28 07:09:50
Many of the MarkV features you speak of are not solely markV, but a culmination of other open source software.
Use what you like. But when you get down to brass tacks, gameplay, it's pretty much just Quake.
#2441 posted by mh on 2018/08/28 13:47:55
MarkV Direct3D 9 doesn't allow changing of colour depth; it's hard-coded to the colour depth of your desktop.
@mh
#2442 posted by anonymous user on 2018/08/28 16:42:35
Thanks. Mark V looks nicer on my machine (better colour depth, smoother gradients than QS) but as dumptruck_ds alluded to I have issues with performance. As a total package QS is tough to beat.
#2443 posted by metlslime on 2018/08/28 19:06:39
how could the color depth be better than QS? Is it HDR?
#2444 posted by mh on 2018/08/28 21:47:45
It should be identical unless the driver is doing some performance/quality tradeoffs behind the scenes.
#2445 posted by anonymous user on 2018/08/28 22:21:44
Black is a deeper black and fog gradates better in a map like honey for example. I thought it was my shitty monitor until I ran Mark V for the first time to play Nehahra. Performance was slower than QS (laggy mouselook) but it looked great. Too bad I can't show the difference. Could very well be my system which is getting up there in age but the two certainly don't look identical.
#2446 posted by mh on 2018/08/28 22:44:32
Fog being different would make some sense, because the two different APIs can potentially have different fog calculations, with OpenGL's hint mechanism in particular being quite weakly specified: it's perfectly legal for GL_NICEST fog to give you per-vertex fog, for example.
In general however I would attribute this to your driver just giving a different image, as I said, likely via a performance/quality tradeoff. There's certainly no magic voodoo going on here.
#2447 posted by anonymous user on 2018/08/28 23:50:30
Ah yes, that pesky driver update that failed on three different occasions is fucking me in the ass, thanks for the insight...
#2448 posted by Gunter on 2018/08/31 06:58:39
Hm. Baker... I found something you did and I don't like it :D
I was re-assigning some buttons so now I can use ALT to +attack (I was using the button on my trackpad with my thumb to +attack, but I've found it's less of a stretch -- physically -- to just hit the ALT key with my thumb instead).
So then I hit ALT + M to do a certain key combo that I occasionally use, and the console starts spitting this out at me:
Mute: ON --- ALT-M to Toggle
Mute: OFF --- ALT-M to Toggle
Sure enough, ALT + M puts Quake on Mute....
But I don't want that!
If you want a Mute feature, just make it a console command: "mute" and we can assign it to whatever key we choose.
As it is now, it's interfering with a key combo that I want to do something else....
Ya know, while I'm talking about ALT key combos, I remember suggesting in the past to allow key combos to be bound, so if I actually wanted ALT + M to do MUTE (if MUTE were a console command) I could do it like:
Bind @m mute
(if you made @ designate the ALT key combination)
Ah, on the Old Page #1352 I was thinking about "shift" keys for gamepad binding, but it could also work for keyboards. I suggested allowing any key to be designated at the "shifting" key for combinations....
Do any other Quake engines allow fancy binding of key combos?
Anyway, key combo binding is a "possible wishlist" kind of thing.
Whereas ALT+M = MUTE is a "NOOOOOOOOOOOO!!!" kind of thing :D
And probably a "Only Gunter would discover that undocumented feature and take issue with it" kind of thing ;)
#2449 posted by Spike on 2018/08/31 09:22:12
Do any other Quake engines allow fancy binding of key combos?
FTE allows you to bind alt+m "echo ALT+M was pressed"
(ctrl+alt+shift modifiers and variations thereof are supported. Note that if you use a key as a modifier then you should probably not bind it to something else at the same time - it'll work, you'll just get unwanted binds.)
A workaround for DP would be to write some csqc that looks for modifier keys and then reconfigures DP's bindmaps, which isn't user friendly for multiple reasons.
#2450 posted by mh on 2018/08/31 13:51:45
Yes, confirmed that MarkV has Alt-M hard-coded to toggling mute on/off.
Other hard-coded key combos:
Alt-Enter: switch between fullscreen and windows.
Alt-Tab: switch between different applications on the OS.
Ctrl-C: Copy.
Ctrl-V: Paste.
#2451 posted by Gunter on 2018/08/31 19:41:48
That FTE functionality wold be something really (really) good to import.
I hadn't thought about those other hard-coded combos, since they are standardized Windows behaviors.... so they behave as most people would already expect.
I suppose you don't need to have CTRL+C and CTRL+V function when the console isn't down though. Those would be the only other combos I would think that might potentially interfere with something someone might bind. Few people are going to mess with the TAB or ENTER key, since they already have commonly-used functions in Quake (scoreboard and entering messages or menu navigation).
On the subject of Mute, if I use my media keys on my keyboard to change system volume or mute, it causes a little display window to pop up on screen notifying me of whatever I changed, and that causes Quake to minimize. I wonder if there's a way for Quake to ... not be forced to minimize in this situation....
#2452 posted by Gunter on 2018/08/31 19:46:25
Huh, well, I'm testing it again today and my media keys aren't forcing Quake to minimize.... Well, not consistently. The first time I tried it, Quake minimized but then it restored itself. After that (even after closing and restarting Quake) it doesn't minimize at all, and the overlay flickers in front or Quake for a moment.
So I don't know. It's inconsistent. Probably a Windows thing.
#2453 posted by Gunter on 2018/08/31 19:56:14
On the subject of Copy/Paste, I guess even if the console isn't down, you'd want CTRL+V to function if someone was entering a chat message too.
I have often wanted to Copy test from the console, but you can only select text from the line you are currently typing on (by using shift + left/right), but that's never what I want to do. There should be some way to select text that has already been printed in the console, either with mouse select or by pressing shift+up to select previous console lines.
I end up having to use the "copy" command, which copies the entire console contents.
How To Build On Linux Myself?
#2455 posted by anonymous user on 2018/09/10 12:09:39
Source code only contains project files for building on Windows. No makefile, cmake, etc.
|