|
Posted by Baker on 2016/11/19 04:53:11 |
http://quakeone.com/markv/
* Nehahra support -- better and deeper link
* Mirror support, "mirror_" textures. video
* Quaddicted install via console (i.e. "install travail")
* Full external texture support DP naming convention
* Enhanced dev tools texturepointer video inspector video
* IPv6 support, enhanced server capabilities
* Enhance co-operative play (excels at this!)
* Software renderer version (WinQuake)
* "Find" information command (ex. type "find sky")
Thanks to the beta testers! NightFright, fifth, spy, gunter, pulsar, johnny law, dwere, qmaster, mfx, icaro, kinn, adib, onetruepurple, railmccoy
And thanks to the other developers who actively provided advice or assistance: Spike (!), mh, ericw, metlslime and the sw guys: mankrip and qbism.
/Mac version is not current yet ...; Linux will happen sometime in 2017 |
|
 |
#901 posted by Gunter on 2017/01/12 02:57:20
Ok, actually there is more happening than just window position. It seems that after changing the resolution to 800x600 windowed via the menu, not only does the window get sent to limbo offscreen, but it looks like this (top image):
http://imgur.com/a/3NLCg
And it THINKS it's at 800x600, even though it's not.... The screenshot comes out at 800x600 resolution, even though the game window size is exactly the same as the earlier desktop screenshot (Oh... that must be why the menu text looks wrong in the former case, though I didn't capture that text, but it's definitely missing some rows of pixels). And I bet the added black bar at the top makes up the extra pixels from 578 to 600.
The lower image is how it looks after restarting Quake. No weird black bar at the top, and the image resolution is 800x578.
So it seems to me that upon startup, DX9 Mark V checks the resolution stuff and sets everything correctly (even when clamping the window size is needed), but when changing it via the Options menu, it does not perform the same checks or something, and stuff gets messed up. And the window position gets sent to limbo.
I believe Spike mentioned something possibly related:
"side note: with d3d, make sure that your d3d backbuffer actually matches the size of your client area. if it doesn't then d3d will be a little more expensive whereas opengl will just resize the backbuffer for you.
this also makes handling WM_SIZE much more annoying in d3d. "
So it seems things are correctly set at startup (even if I set -height 600 on the command line and clamping is needed), but not when changing the resolution in the menu if window size clamping occurs and you get a window smaller than expected.
#902 posted by Gunter on 2017/01/12 03:09:31
EDIT: Added a 3rd screenshot (desktop rather than in-game) that better shows how Quake thinks it's in 800x600 when it's really in 800x578, as described above. You can see it's chopping off rows of pixels in the menu text.
http://imgur.com/a/3NLCg
Ok, now I'll shut up until a new version comes out. ;)
 @JimBob
#903 posted by Baker on 2017/01/12 03:36:51
Source code posted in post #900 is working for me using the KDE desktop environment.
 @Baker (and @ericw)
#904 posted by JimBob on 2017/01/12 03:54:03
That works for me, too. Thank you for taking the extra time to sort that out!
Quake feels new again with a new engine to play with ^_^
 @jimbob
#905 posted by Baker on 2017/01/12 04:18:32
Thanks for your help and feedback.
I tried it on Unity, Gnome and KDE Plasma just now.
Unity was an A+++, Gnome was a A-, KDE Plasma was mixed for me --- but my KDE Plasma may not be update to date plus I rarely use it so I have no idea on how to tune KDE Plasma settings -- so hopefully is just me.
 @jimbob
#906 posted by Baker on 2017/01/12 04:29:25
If you don't mind, could you tell me if these binaries happen to run on your machine ...
http://quakeone.com/markv/older/1025_linux_binaries.zip
May need to chmod them first, obviously.
#907 posted by Gunter on 2017/01/12 04:43:14
Ok, I was wrong. I have more things to report.
Ehhh... but I am having trouble doing testing now. Mark V won't let me delete my config.cfg file in the FvF folder to blank out my settings. It keeps re-loading the cfg from some backup place. I dislike the loss of control over my cfgs! heh Something like that necessitates a prompt for user control, "do you want to load cfg from backup?"
It seems I can delete the config.cfg file in id1 just fine though, without the settings persisting.
Mirrors do not get along well with skyboxes in DX9. Just activate a skybox and go peek in the Start map window mirror from various angles and you'll see....
Hm, and mirrors don't work at all if you use a different game dir....
For example, make an empty directory called "none"
Run DX9MV and start a new game. Go look in Start map mirror. Then change "game none" and start a new game and repeat. No more mirror. Change back to "game id1" and the mirror works again.... Results are the same when starting with "-game none" (or any other game dir -- I noticed the mirrors weren't working when I was running FvF).
 @Baker
#908 posted by JimBob on 2017/01/12 04:51:26
Those 2 binaries appear to run just fine (with my 5 minutes of testing for each heh).
The only *potential* issue I notice in those (as well as the ones I compiled) is minor, being the apparent lack of mp3 music audio. But that's not a game-breaker.
#909 posted by Baker on 2017/01/12 05:03:57
@jimbob - There are few things I have to do research into for the Linux build.
It's not too bad for a build that is not quite 2 days old yet, haha.
Make it run first, make it great later. It's how coding is done.
@gunter - I have various homeworks to with some of the things you've pointed out.
With some luck, I'll have DX9 current and test things and see where everything stands with up-to-date code.
 @Baker
#910 posted by JimBob on 2017/01/12 05:28:29
True! It's not bad at all. And I'm happy to have something that's playable.
"mirrors don't work at all if you use a different game dir" - Gunter
Just want to confirm that this quirk also occurs in mark_v_sdl_gl_gcc .
 The Id1 Mirror Texture Only Works With Id1 -- It's Intended Behavior
#911 posted by Baker on 2017/01/12 05:44:41
If someone makes a map pack and they want mirrors ... you call the texture "mirror_whatever".
One of the Arcane Dimensions maps by pulsar has a mirror in it, for example.
The window02_1 in the start map and E1M5 in standard Quake is an homage to the original GLQuake with the feature.
But if someone is playing Soul of Evil or Travail or something and some random texture is pointlessly a mirror because it is window02_1, that would be annoying as hell ...
 Whoops
#912 posted by JimBob on 2017/01/12 06:24:30
That makes sense.
Guess I got confused by the r_texprefix_mirror cvar.
Also I blame Gunter ;P
 @Gunter
#913 posted by mh on 2017/01/12 06:47:00
Config.cfg
This is the same as the problem I reported.
If you do:
* Start
* Run
* %appdata%
You'll find a "Mark V" folder which also contains a config.cfg; delete that too.
Display modes/etc
I'll need to take time to reread your posts more carefully. It seems to me that the most probable cause is that when changing modes, alt-tabbing, etc, GL requires you to write your own code for some things that D3D doesn't, and D3D requires you to write your own code for other things that GL doesn't. What that means is that there is going to be something where either (1) in-engine code is fighting against an automatic behaviour, or (2) in-engine code is missing for something.
I'm inclined to suspect (1) from experience. For example, in GL the AppActivate function vontains code to explicitly restore display modes and minimize the window on Alt-Tab events. D3D requires none of that, and in fact changing the display mode this way will cause trouble for D3D.
In the most recent code I gave Baker I rewrote AppActivate, and provided new wrappers for ChangeDisplaySettings and EnumDisplaySettings, designed to avoid all of this. I'm not sure how completely he's integrated these yet, but if he still has work to do with them it would be consistent with your experience.
#914 posted by Spike on 2017/01/12 11:06:44
the alternative is to support EGL+GLES2 on windows and grab the dlls from ANGLE(or chrome/firefox), and get it running in either d3d9 or d3d11.
how angle works around d3d9/dxgi quirks I've no idea - maybe it just creates a nested/child window and does all its rendering to that...
 @gunter - We've Got Work To Do ...
#915 posted by Baker on 2017/01/12 13:45:17
I've got MH's latest DX9 integrated.
Annoyingly the shader gamma off by 1 pixel has returned -- but instead it stretches, hard to notice except when in options. At first I was thinking it might be a matrix calculation issue in the menu canvas somehow, sometimes the 2D matrix needs a 0.5 kick to get the rounding right -- if I recall. Perhaps something in that ballpark is happening here?
Had to address ...
1) A border painting issue.
2) Made the window centered on ALT-ENTER and video mode switch.
3) The windowed mode window was staying topmost after a fullscreen. Baker addressed.
4) Made resized window stay in the same place during resize.
Need to double-check the ALT-TAB modifications MH made and ensure I did them right in the engine code.
Everything else looks great except if stencil was anticipated to work -- I don't know either way -- does not seem to work for me (doesn't in DirectFitz either) ....
So I made a single #ifdef in the code near the top of quakedef.h to toggle compile with DX9 stencil on or off.
I need to double check some things before I do a DX9 version update, but it very close.
 Mark V - DX9 - Beta Build 1026
#916 posted by Baker on 2017/01/12 16:33:42
Mark V Build 1026 - Direct X 9 | Source
A screenshot of a few things combined together as a test ...
Screenshot
Mirrors, non-power of 2, external textures, particle effects, alternate HUD, lightning gun sparks, QMB flames, DX9 depth test level, gamma shader, vid_vsync, resizable window, combine, alpha, texture matrix. The .png screenshot was written via the DX9 accelerated screenshot API.
(* about 9 things the DX9 wrapper does that DX8 didn't)
@gunter - the sky will not show up in mirrors in DX9 in this build, stencil isn't seeming fully operational. I did a trick or 2 to obtain most of the effect ;-)
 Nice!
#917 posted by Mugwump on 2017/01/12 16:59:01
This is becoming an engine to my liking. I'm already using it for the inspector tools (the texture inspector is more handy than DP's in that it highlights the faces instead of just displaying the texture names) and that awesome ffwd/rewind feature in demo playback, but if you keep on "spiking" Mark V like that, I might actually start using it to play, at least for the maps that DP doesn't handle well.
What's the name of that QMB lightning texture? When I try to activate this option in DP, it reverts back to the original polygon lightning, so I guess it's because it lacks the texture and I need to copy/paste it into DP.
 Lightning Texture
#918 posted by Baker on 2017/01/12 17:02:40
In JoeQuake or Qrack, the name is zing1.tga living inside a pak0.pak somewhere if you wanted to obtain that file.
Mark V has it built-in, the same way Mark V doesn't need any .dlls.
 Thanks
#919 posted by Mugwump on 2017/01/12 17:11:55
 Stencil Schmencil
#920 posted by mh on 2017/01/12 17:27:42
Just done some stepping through a debug build of the latest Mark V and I think I know what's wrong with stencil.
In OpenGL glClear is affected by the various write masks (glColorMask, glDepthMask, glStencilMask).
In Direct3D the equivalent is not.
However, in Direct3D clears are clipped to the viewport rectangle, whereas in OpenGL they are not.
Therefore, if you make a glClear call through the wrapper, and if the previous glViewport was to create a partial viewport, the full window won't be cleared.
This was a very real problem caused by FitzQuake's render-to-framebuffer water where it updates the warp images before calling glClear. The GL_SetCanvas stuff (which IMO needlessly complicates the 2D renderer) sets a partial viewport, then we come along and call glClear and only that partial viewport is cleared.
Result is that only a small square in bottom-left (or top-left, can't remember) of the window gets anything drawn in it during the main 3D render.
To work around this I added code to my implementation of glClear which reset the viewport to the full window before clearing. This was done in the expectation that there would only be one glClear call per frame which would clear all required buffers.
That's obviously not the case in Mark V which clears the stencil buffer before drawing it's mirror sky stuff.
Added complication: in D3D viewport rectangle and depth range are combined in a single state. In GL they're separate states. So resetting the viewport also messes with the depth range.
End result is that both the viewport rect and the depth range are messed-up as soon as you make that glClear (GL_STENCIL_BUFFER_BIT) call.
I'm going to fix this by putting the viewport back to the way it was after making the clear call. With hindsight I should have done this from the outset, but you know what they say about hindsight.
 @mh
#921 posted by Baker on 2017/01/12 17:29:22
I haven't had time to load up Windows 8 or Windows 10, but I did testing on Win 7 with and without Aero and so far everything looks ok --- at least in Windows 7 with whatever Direct X drivers came with Win 7 -- I know they aren't the same as, say, XP which may behave radically different.
You may have noticed I added on-the-fly resizable window to WinQuake to make the "let engine decide window borders" into irrelevant issue. The DX9 build was my main reason for wiring up WinQuake to resize-on-the-fly.
 @mh - 2D Canvas
#922 posted by Baker on 2017/01/12 17:39:26
The GL_SetCanvas stuff (which IMO needlessly complicates the 2D renderer)
Don't have much of an opinion on that ...
But I can say it was hard as hell to make WinQuake 2D render identical to FitzQuake.
So when Gunter was saying "original Quake centerprint" it somewhat follows I wasn't that big on the idea initially.
@Stencil clear -- Open GL should have done it that way, which is the better behavior ... and they would have in hindsight ;-)
 Stencil Clear
#923 posted by mh on 2017/01/12 18:00:03
This is a case where I think no API gets it right.
Clears being affected by the write masks and the viewport rect are both IMO undesirable behaviours. GL adds the scissor rect to bound the clear, D3D9 lets you specify an array of RECTs but they're clipped to the viewport too, D3D11 has none of this crap so it gets partially there but in the end it fails because it doesn't let you specify a subrect to clear at all.
The ideal API would look something like:
Buffer->Clear (RECT clearRect, int clearMask, int ClearValue);
In other words, you explicitly specify what you want cleared, how much of it you want cleared, and what you want it cleared to. No side-effects from previous state.
I'm dubious about having a clearMask but one feature it does give you is the ability to clear RGB without clearing A (or vice-versa) in the color buffer. I don't personally have a use case for that but others might.
#924 posted by damage_inc on 2017/01/12 18:07:22
Man, that %appdata config saving shiz is annoying.
I was trying out the new DX9 build but still had the skybox error as with previous version... took some time to find that and delete it so I could get a fresh start. Which solved it.
Is this by design, cause it takes such a simple concept and fucks it up, imo.
I mean, I just want a config file, saved in my id1/mod directory.
I know other games/apps do this but I don't try out 35 different flavors of those games/apps like we do with Quake ;)
#925 posted by Baker on 2017/01/12 18:30:40
Damage, this is beta at the moment.
When it works properly, you wouldn't even know it was there because it was meticulously planned.
It was there for 2+ years, not even super-picky Gunter noticed.
Until I slightly broke it recently.
I'm very against advanced-enginitis disease.
/Keep in mind that only in this last week was anyone even aware of convenience that made life easy street for 2+ years in Mark V. ;-)
|
 |
You must be logged in to post in this thread.
|
Website copyright © 2002-2025 John Fitzgibbons. All posts are copyright their respective authors.
|
|