mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-18 22:41:46 +00:00
Fixed a bug in Line2D.GetIntersection(), introduced in r1854 (SHOULD... OPTIMIZE... MORE... CAREFULLY!!!11).
A couple of minor optimizations in Renderer3D.
This commit is contained in:
parent
4e93bc71d3
commit
940a5f6183
4 changed files with 33 additions and 27 deletions
|
@ -125,16 +125,14 @@ namespace CodeImp.DoomBuilder.Geometry
|
|||
u_ray = ((v2.x - v1.x) * (v1.y - y3) - (v2.y - v1.y) * (v1.x - x3)) / div;
|
||||
|
||||
// Return if intersecting
|
||||
if (u_ray <= 0.0f || u_ray >= 1.0f || u_line <= 0.0f || u_line >= 1.0f) return false; //mxd
|
||||
if (u_ray < 0.0f || u_ray > 1.0f || u_line < 0.0f || u_line > 1.0f) return false; //mxd
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Unable to detect intersection
|
||||
u_line = float.NaN;
|
||||
u_ray = float.NaN;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Unable to detect intersection
|
||||
u_line = float.NaN;
|
||||
u_ray = float.NaN;
|
||||
return false;
|
||||
}
|
||||
|
||||
// This tests on which side of the line the given coordinates are
|
||||
|
@ -209,7 +207,7 @@ namespace CodeImp.DoomBuilder.Geometry
|
|||
{
|
||||
// Calculate and return the angle
|
||||
Vector2D d = GetDelta();
|
||||
return -(float)Math.Atan2(-d.y, d.x) + Angle2D.PIHALF;//mxd // (float)Math.PI * 0.5f;
|
||||
return -(float)Math.Atan2(-d.y, d.x) + Angle2D.PIHALF;
|
||||
}
|
||||
|
||||
public Vector2D GetDelta() { return v2 - v1; }
|
||||
|
|
|
@ -130,8 +130,8 @@ namespace CodeImp.DoomBuilder.Geometry
|
|||
FindInnerLines(p, alllines);
|
||||
return alllines;
|
||||
}
|
||||
else
|
||||
return null;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// This finds the inner lines of the sector and adds them to the sector polygon
|
||||
|
|
|
@ -123,7 +123,7 @@ namespace CodeImp.DoomBuilder.IO
|
|||
|
||||
// This draws the picture to the given pixel color data
|
||||
// Throws exception on failure
|
||||
public unsafe void DrawToPixelData(Stream stream, PixelColor* target, int targetwidth, int targetheight, int x, int y)
|
||||
public void DrawToPixelData(Stream stream, PixelColor* target, int targetwidth, int targetheight, int x, int y)
|
||||
{
|
||||
Bitmap bmp;
|
||||
BitmapData bmpdata;
|
||||
|
|
|
@ -484,7 +484,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
//mxd. LINKS
|
||||
if (General.Settings.GZShowEventLines) {
|
||||
//mxd. gather links
|
||||
List<Line3D> lines = GZBuilder.Data.LinksCollector.GetThingLinks(thingsbydistance);
|
||||
List<Line3D> lines = LinksCollector.GetThingLinks(thingsbydistance);
|
||||
if(lines.Count > 0) {
|
||||
List<Line3D> normalLines = new List<Line3D>();
|
||||
List<Line3D> activatorLines = new List<Line3D>();
|
||||
|
@ -510,7 +510,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
RenderSinglePass((int)RenderPass.Additive);
|
||||
|
||||
//mxd. LIGHT PASS
|
||||
if (General.Settings.GZDrawLights && !fullbrightness && thingsWithLight.Count > 0 && litGeometry.Count > 0) {
|
||||
if( !(!General.Settings.GZDrawLights || fullbrightness || thingsWithLight.Count == 0 || litGeometry.Count == 0) ) {
|
||||
RenderLights(litGeometry, thingsWithLight);
|
||||
}
|
||||
|
||||
|
@ -537,12 +537,20 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
lightOffsets = new int[3];
|
||||
foreach (VisualThing t in thingsWithLight) {
|
||||
//add light to apropriate array.
|
||||
if (t.LightRenderStyle == DynamicLightRenderStyle.NORMAL || t.LightRenderStyle == DynamicLightRenderStyle.VAVOOM)
|
||||
lightOffsets[0]++;
|
||||
else if (t.LightRenderStyle == DynamicLightRenderStyle.ADDITIVE)
|
||||
lightOffsets[1]++;
|
||||
else
|
||||
lightOffsets[2]++;
|
||||
switch(t.LightRenderStyle) {
|
||||
case DynamicLightRenderStyle.NORMAL:
|
||||
case DynamicLightRenderStyle.VAVOOM:
|
||||
lightOffsets[0]++;
|
||||
break;
|
||||
|
||||
case DynamicLightRenderStyle.ADDITIVE:
|
||||
lightOffsets[1]++;
|
||||
break;
|
||||
|
||||
default:
|
||||
lightOffsets[2]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -777,11 +785,11 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
int wantedshaderpass = (((g == highlighted) && showhighlight) || (g.Selected && showselection)) ? highshaderpass : shaderpass;
|
||||
|
||||
//mxd
|
||||
if (General.Settings.GZDrawFog && !fullbrightness && sector.Sector.Brightness < 248)
|
||||
if( !(!General.Settings.GZDrawFog || fullbrightness || sector.Sector.Brightness > 247) )
|
||||
wantedshaderpass += 8;
|
||||
|
||||
//mxd. Seems that lines rendered with RenderPass.Alpha or RenderPass.Additive aren't affected by dynamic lights in GZDoom
|
||||
if (g.RenderPass != RenderPass.Alpha && g.RenderPass != RenderPass.Additive && General.Settings.GZDrawLights && !fullbrightness && thingsWithLight.Count > 0) {
|
||||
if ( !(g.RenderPass == RenderPass.Alpha || g.RenderPass == RenderPass.Additive || !General.Settings.GZDrawLights || fullbrightness || thingsWithLight.Count == 0) ) {
|
||||
if (curtexture.Texture != null) {
|
||||
if (!litGeometry.ContainsKey(curtexture.Texture))
|
||||
litGeometry[curtexture.Texture] = new List<VisualGeometry>();
|
||||
|
@ -834,15 +842,15 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// Render things collected
|
||||
foreach(KeyValuePair<ImageData, List<VisualThing>> group in thingspass)
|
||||
{
|
||||
ImageData curtexture;
|
||||
|
||||
if(!(group.Key is UnknownImage))
|
||||
{
|
||||
ImageData curtexture;
|
||||
|
||||
// What texture to use?
|
||||
if((group.Key != null) && group.Key.IsImageLoaded && !group.Key.IsDisposed)
|
||||
curtexture = group.Key;
|
||||
else
|
||||
if((group.Key == null) || !group.Key.IsImageLoaded || group.Key.IsDisposed)
|
||||
curtexture = General.Map.Data.Hourglass3D;
|
||||
else
|
||||
curtexture = group.Key;
|
||||
|
||||
// Create Direct3D texture if still needed
|
||||
if((curtexture.Texture == null) || curtexture.Texture.Disposed)
|
||||
|
|
Loading…
Reference in a new issue