|
Posted by Baker on 2012/06/29 11:38:17 |
I wasn't planning on doing this mini-project, it started as an effort to address some Fitzquake issues, fix them the right way up to Fitzquake standards (i.e. do it right, once and properly versus continual releases) and donate it back.
FitzQuake Mark V Download:
http://quake-1.com/docs/utils/fitzquake_mark_v.zip
Short version: Eliminated most issues in FitzQuake thread, most issues I can even remember hearing of ever and marked every single one clearly with a very minimal implementation.
It may be the case that only metlslime and Quakespasm and engine coders may find this engine upgrade of interest.
Features: 5 button mouse support, single pass video mode, external mdl textures, alpha textures (like RMQ), record demo at any time, rotation support, video capture (bind "capturevideo toggle"), console to clipboard, screenshot to clipboard, entities to clipboard, tool_texturepointer, tool_inspector (change weapons to see different info), clock fix, contrast support, fov does not affect gun, gun displays onscreen, Quakespasm wrong content protection, external ent support, session-to-session history and .. (see readme). |
|
|
#518 posted by Baker on 2014/12/13 20:37:00
@mh/metslime --- start.bsp --> *start*.bsp <gamedir>.bsp which catch the overwhelming majority of single player releases to the point that I can't name a release this doesn't work for offhand.
@negke "highlight (in a subtle way) all maps (files) exclusive to the specified mod directory" The maps menu in this Mark V does exactly that.
@mh - if the start map isn't called "start", then assume that it has no skill selection halls and pop up a skill menu before loading it. Although not in this build, I rolled the bsp compiler into the engine and was going to have to do things like that, including constructing an "Undergate" like map in real time and devised a mechanism to take screenshots using intermission camera spots that could occur in the background.
I never finished it, though.
The bsp sources were kept in a separate folder to ensure proper separation, but rolled into the engine to ensure availability.
@NightFright
#519 posted by Baker on 2014/12/13 20:47:35
The DX8 build seems fine, but when using gl_texturemode "gl_nearest_mipmap_linear", it seems that floor/wall/ceiling and some model textures (e.g. health packs) keep bilinear/trilinear filtering
Not sure, I remember testing mostly only for the default settings and having to rewrite a few chunks of the MH Direct3D wrapper. It has a few (very few) weaknesses that the OpenGL version doesn't, apparently. I didn't notice that one it seems.
The DX8 version is runs on almost anything including really old Windows PCs with no Open GL drivers or a current one with bad Open GL drivers.
The Winquake version doesn't run for some reason for me at all, crashes during startup That is strange, I will attempt to see why that would be the case.
MP3 Remap (id1/music/setmusic.cfg)
#520 posted by Baker on 2014/12/13 21:52:43
Note: This is pretty much a literal implementation of what metslime's suggested back several months ago.
Mark V will run music/setmusic.cfg on startup. If Quake wants to play track 04, the remap will instead play sometrack.mp3 as indicated below.
This allows a single player release to have packaged mp3 music remapped and should be robust and flexible enough to be a standard.
Just include a setmusic.cfg in the music folder of the release.
Example contents:
setmusic 00 track1.mp3
setmusic 01 mytrack2.mp3
setmusic 02 somethingelse.mp3
setmusic 03 anothertrack.mp3
setmusic 04 sometrack.mp3
Docs: Server Protocol 15 Compat, Intermission Fix
#521 posted by Baker on 2014/12/13 21:59:40
1) Intermission Fix. Like ericw, I don't know exactly how or why the intermission fix works. Ben Jardrup's Enhanced GLQuake uses it. It works perfectly.
Mark V uses it.
http://forums.inside3d.com/viewtopic.php?f=3&t=5492
2) I documented the protocol 15 server compatibility. Coincidentally, this happened to be modelled after Enhanced GLQuake. The solution is essentially simple, but unfortunately requires numerous changes to the source code.
http://forums.inside3d.com/viewtopic.php?f=3&t=5593
In some ways, this fix doesn't matter as few people use a standard Quake engine. But for full backwards compatibility it is nice to have.
#522 posted by Spike on 2014/12/13 22:04:53
@Baker, you should consider just using 'cd remap' instead of your 'setmusic' command, that is if you want consistancy with DP+FTE too.
@spike
#523 posted by Baker on 2014/12/13 22:19:09
In FTE/DP would "cd remap 04 sometrack.mp3" be the equivalent of what I posted above?
About Texture Filtering In DX8 Build
#524 posted by NightFright on 2014/12/14 02:41:42
Apparently a similar issue as the one described above (#519) happened during development of Quakespasm 0.90. According to bogworth, it was related to anisotropic filtering.
Quote bogworth:
"The combination of GL_TEXTURE_MAX_ANISOTROPY_EXT with values greater than 1 and GL_NEAREST appears to have vendor-specific behaviour - in my case, GL_NEAREST is ignored." and
"The problem appears for textures that are mipmapped (eg, not models), when gl_texture_anisotropy is greater than 1 and gl_texturemode is 1, 2 or 3."
I dunno if all of this applies (probably not, as I also had models with filtering changes being ignored), but maybe it helps with detecting and eliminating the problem.
Would be great if this got fixed since the DX build seems to be the only one properly working on my system right now (Winquake crashes and the vs2008 build shows weird texture issues).
#525 posted by Spike on 2014/12/14 02:48:43
aye, in FTE, if its numeric then it goes and plays track%03i.mp3, otherwise it goes and plays the named path (with the same optional prefixes as other fake-tracks).
the same as 'cd play' and 'cd loop' commands.
the only catch is that you can only remap numbered tracks, not named ones.
I'm not entirely sure on which paths that DP assumes it might be in (if any), but the rest is the same as far as I am aware (for supported file formats).
what annoys me, is that world.sounds is a float. I'm tempted to add a hack and specially parse the entity lump to read it as a string, and update the server's svc_cdtrack generation to just play that string instead somehow. numbered tracks are so old fashioned!
plus, they get in the way of map compilations.
of course, this assumes mappers would use it.
@spike
#526 posted by Baker on 2014/12/14 03:59:41
Ok, the text vs. numeric. I was thinking that would be required and you validated that. Well, the better compatibility with existing engines ...
Numbered tracks are what Quake expects and built into the pipeline. I think working with them sucks. I'd almost suggest a wordspawn key, but I fear a drastic proliferation of them.
@FrightNight
#527 posted by Baker on 2014/12/14 04:21:20
Well, I am glad the Direct X version is working for you.
Does current Quakespasm work properly for you?
What about a previous Mark V or Fitz 0.85? I'm trying to determine issue.
The current Open GL Mark V uses non-power of 2 (July 2014), uses stencil operations more (this one), varies from Fitz 0.85 by using the texture matrix instead of the mesh alterations (been that way since 2013).
The Direct X version of Mark V uses neither the texture matrix nor the Fitz 0.85 meshing alterations so the model textures will look like --- well --- JoeQuake/GLQuake/Requiem --- which are stretched and not crisp like FitzQuake.
It is done like that to support external textures for models in a straightforward way.
I had intended to revisit it in the Direct X version, but that time won't be coming soon. I don't think, at least.
I'm trying to mentally picture whether or not non-power of 2 would solve that and if the Direct3D 8 wrapper supports that.
@NightFright, @Baker
#528 posted by mh on 2014/12/14 05:40:33
Would be great if this got fixed
It can't be fixed because D3D doersn't support it.
What D3D offers for filter modes is one of three options (for each of min/mip/mag):
- Point
- Linear
- Anisotropic
Various combinations of Point and Linear then correspond to the GL filter mode names, but the important thing here is that Anisotropic is also it's own filter mode, and anisotropic filtering is only enabled if you select that filter mode.
So in other words you can't combine point filtering (what GL calls nearest) with any form of anisotropic filtering.
This restriction still exists in D3D11 where the options (excluding shadow map comparison states) are:
D3D11_FILTER_MIN_MAG_MIP_POINT
D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR
D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT
D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR
D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT
D3D11_FILTER_MIN_MAG_MIP_LINEAR
D3D11_FILTER_ANISOTROPIC
Again you'll see that most of these modes correspond to the GL modes (D3D11 has a few extra ones) but that D3D11_FILTER_ANISOTROPIC is it's own mode and can't be combined with point/nearest filtering.
This isn't the kind of engine bug that you can fix in code, it's a limitation of the D3D specification. That's a difference between GL and D3D - GL keeps things loose and floppy and allows implementation-specific wriggle-room, D3D doesn't.
I'm trying to mentally picture whether or not non-power of 2 would solve that and if the Direct3D 8 wrapper supports that.
Non-power-of-two is the ideal solution but I don't remember if the wrapper supports it. D3D8 does support non-power-of-two textures so it would be easy enough to add a pseudo-extension check and code up the loader (be careful when reducing miplevels for non-power-of-two textures though).
#529 posted by Baker on 2014/12/14 06:01:36
Thanks MH. I think npot solves the problem in a way that won't interfere with external textures, when I rebuild I'll tell the wrapper to say it has npot texture support.
#530 posted by Baker on 2014/12/14 06:03:57
(be careful when reducing miplevels for non-power-of-two textures though).
Whoa ... what's this? Is there a size limitation of the mip textures of some sort?
What Works (for Me)
#531 posted by NightFright on 2014/12/14 10:31:51
I had been using Mk V r15 before on the same machine without problems. Quakespasm 0.90 also works.
Strangely enough, the WinQuake build works on my Samsung NP-NC10 netbook (Intel Atom N270, 1.6 GHz, 2GB RAM).
The sad thing is that right now, I am stuck with DX8 since the OpenGL build (vs2008, I assume) doesn't work, either. When I load the start map for example, huge chunks of textures are missing. In the "Welcome to Quake" hall with the three skill selection gateways, it cuts away pretty much half of the screen. Never had any problem like this.
@Baker
#532 posted by mh on 2014/12/14 13:40:16
Whoa ... what's this? Is there a size limitation of the mip textures of some sort?
No, no limit. You just need to be aware that the standard for both GL and D3D specifies round-down (so for a dimension of, say, 63, the next miplevel would become 31, not 32).
A simple way is to check "if ((width & 1) || (height & 1))" for a miplevel, then send it through GL_ResampleTexture instead of GL_MipMap. IIRC the stock Fitz code does some funky stuff with miplevel reduction (reducing each dimension separately) so you'll have some fun there.
I believe that the latest Quakespasm has non-power-of-two support so it'll probably be useful to cross-check with that.
For D3D9 the check is "if (!(d3d_DeviceCaps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) && !(d3d_DeviceCaps.TextureCaps & D3DPTEXTURECAPS_POW2))" for full non-conditional support, and if memory serves it's the same in 8, so you can report that GL_ARB_texture_non_power_of_two is supported if they're met (everything else is done outside of the wrapper).
Conditional support means that the address mode must be clamp and you can't use mipmaps which is broadly equivalent to GL_ARB_texture_rectangle (although the GL extension is weird in that it uses integer texcoords). You'll want full non-conditional support in the general case, although conditional might be OK for MDLs (provided you're still doing the Fitz thing of not mipmapping them).
D3D should also not suffer from crap like "we'll say we support non-power-of-two textures but will emulate everything in software if you try to actually use them".
OpenGL Issue
#533 posted by NightFright on 2014/12/14 20:36:51
Here is a screenshot of what the game looks like for me with the vs2008 build. Skyboxes, liquids and teleport surfaces are totally screwed.
http://i.imgur.com/Q3KPRbA.jpg
#534 posted by Baker on 2014/12/14 21:21:29
That gives me something useful to work with.
I use a stencil operation to draw the sky. All my computers even my Mac are ATI/Intel, apparently Nvidia does not like.
#535 posted by JneeraZ on 2014/12/14 21:46:45
Why not just draw the sky, clear the depth buffer, and move on? I understand it's probably an optimization thing, but ...
#536 posted by Baker on 2014/12/14 21:50:20
r_mirroralpha support. Has to draw the sky twice.
#537 posted by metlslime on 2014/12/14 21:57:06
Also sky needs to draw on top of other things depending on the map
Like Jam2_mfx..
#538 posted by mfx on 2014/12/14 22:19:51
@NightFright
#539 posted by Baker on 2014/12/14 22:24:20
In Mark V r15, what happens if you do r_shadows 1 (do the shadows look right?)? Mark V uses the stencil for shadows and has since 2013.
Although stencil operations seem the prime suspect to the Open GL compatibility, it might not be the case.
R_shadows 1 In Mk V R15
#540 posted by NightFright on 2014/12/14 22:49:47
I was using r15 just before I switched to the new builds of yours. No problems there at all.
Proof (screen taken with r15):
http://i.imgur.com/LiAxUXb.jpg
#541 posted by Baker on 2014/12/15 00:44:18
That's helpful. I'm sure I'll figure it out, I see from my sky drawing function I had some varying opinions about the drawing, which since it worked fine on my graphics card I have since forgotten ...
Maybe if I reflect on this a bit, I can come up with a resolution.
void Sky_Stencil_Draw (void)
{
int i;
msurface_t *s;
texture_t *t;
// Baker: Direct3D doesn't have stencil at this time
if (!renderer.gl_stencilbits || vid.direct3d)
return;
// Baker: No sky to draw
if (!level.sky /*|| !frame.has_sky*/)
return;
// Baker: Where drawn (doesn't z-fail), replace with 1
// in the stencil buffer.
eglStencilFunc (GL_ALWAYS, 1, ~0 );
eglStencilOp (GL_KEEP, GL_KEEP, GL_REPLACE);
eglEnable (GL_STENCIL_TEST);
// Baker: A no draw pass of the sky brushes, does not even
// write to depth buffer (maybe it should?) that writes
// our stencil overlay.
eglColorMask (0,0,0,0);
// eglDepthMask (0); // Don't write depth to buffer
eglDisable (GL_TEXTURE_2D);
for (i=0 ; i<cl.worldmodel->numtextures ; i++)
{
t = cl.worldmodel->textures[i];
if (!t || !t->texturechain || !(t->texturechain->flags & SURF_DRAWSKY))
continue;
for (s = t->texturechain; s; s = s->texturechain)
// if (!s->culled)
{
DrawGLPoly (s->polys, 0); // Not here.
rs_brushpasses++;
}
}
eglEnable (GL_TEXTURE_2D);
eglColorMask (1,1,1,1);
// eglDepthMask (1);
// Baker: Keep any pixels where stencil wasn't drawn
// for this drawing pass.
eglStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );
eglStencilFunc( GL_EQUAL, 1, ~0 );
// Baker: Now draw the stencil
Sky_DrawSky ();
// Turn it off
eglDisable (GL_STENCIL_TEST);
eglClear (GL_STENCIL_BUFFER_BIT);
}
#542 posted by mfx on 2014/12/15 21:11:39
Transparent textures on worldbrushes arent handled correct. This screenshot is not what it looks like ingame, there you actually see the pink color.
When doing this with func_illu/wall whatever, all is good.
|
|
This thread has been closed by a moderator.
|
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.
|
|