|
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). |
|
|
@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.
#543 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 Screenshot
#544 posted by mfx on 2014/12/15 21:12:11
I�m So Stupid
#545 posted by mfx on 2014/12/15 21:16:49
ignore me as usual..
FYI
#546 posted by mfx on 2014/12/15 21:25:22
QS 0.90 draws this "correct"
http://imgur.com/JYx8dDG
#547 posted by Baker on 2014/12/15 21:39:01
Will fix.
I was going to remove alpha masked (fence) texture support on world brushes because it is technically wrong and leads to mapper newbie pain (a mapping newbie guy always says "I see void").
Then you guys made a map using it and then Quakespasm copied the Mark V implementation.
So now my "correction" becomes "bug".
Anyway, when I revisit I will "re-add" that back in.
#548 posted by mfx on 2014/12/15 21:52:37
Its all cool Baker, i was trying to not overuse func_illusionaries for performance reasons, but yeah, its wrong to do it like this i know..
Thanks for your precious work anyway, it is very appreciated!
Imo
#549 posted by ericw on 2014/12/15 21:55:06
I would just make them func_wall/func_illusionary on new maps, and consider the fences-as-world-geometry support in qs deprecated / not recommended for future use.
arguably I shouldn't have added that to qs 0.90, because you'll get HOMs/a view in to the void if the brush touches the rest of the world, plus vis might cull stuff behind the fence texture because it thinks they are opaque.
Oops, Redundant Post
#550 posted by ericw on 2014/12/15 22:11:17
Anyways, sorry for this Baker, I take responsibility for spreading the mis-feature :P
mfx, it should be safe to go crazy with a lot of func_illusionary, unless you're measuring a performance hit.
In glquake/fitzquake the brushmodel drawing does a bunch of setup per-poly of the model, so you want to avoid a single very complex func_wall (this is fixed in qs 0.90 though, and probably engines with more advanced renderers). But on the other hand, I'd expect drawing a lot of simple func_walls/illusionaries should be fairly fast on all engines. They're vis-culled too, so even having several hundred spread around the map should be fine. (famous last words.. )
|
|
This thread has been closed by a moderator.
|
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.
|
|