Skip to content

Commit

Permalink
Completely revised the implementation of fakeradio shadow edges. The …
Browse files Browse the repository at this point in the history
…old scheme did not take advantage of the spacial information provided by the vertex lineowner rings particularly well.

Todo: No method for resolving overlaps has been implemented as yet. Only the vertex inner offset is actually used. Needs a new scheme to replace the old back-extended offsets.
  • Loading branch information
danij committed Mar 10, 2008
1 parent 4825c4f commit 3940854
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 666 deletions.
16 changes: 4 additions & 12 deletions doomsday/engine/portable/include/mapdata.hs
Expand Up @@ -9,16 +9,9 @@ internal
#define LO_prev link[0]
#define LO_next link[1]

typedef struct shadowpolyoffset_s {
float offset[2];
} shadowpolyoffset_t;

#define MAX_BEXOFFSETS 8

typedef struct shadowvert_s {
float inner[2];
float extended[2];
shadowpolyoffset_t backExtended[MAX_BEXOFFSETS];
typedef struct shadowvert_s {
float inner[2];
float extended[2];
} shadowvert_t;

typedef struct lineowner_s {
Expand Down Expand Up @@ -80,7 +73,6 @@ internal

// Seg flags
#define SEGF_POLYOBJ 0x1 // Seg is part of a poly object.
#define SEGF_SHADOW 0x2 // Seg casts edge shadows.

// Seg frame flags
#define SEGINF_FACINGFRONT 0x0001
Expand All @@ -107,7 +99,6 @@ struct seg
- biastracker_s[3] tracker // 0=middle, 1=top, 2=bottom
- vertexillum_s[3][4] illum
- short frameFlags
- ushort shadowVisFrame
end

internal
Expand Down Expand Up @@ -458,6 +449,7 @@ struct linedef
FLOAT float[4] bBox
- boolean[DDMAXPLAYERS] mapped // Whether the line has been mapped by each player yet.
- mlinedef_t buildData
- ushort[2] shadowVisFrame // Framecount of last time shadows were drawn for this line, for each side [right, left].
end

internal
Expand Down
10 changes: 1 addition & 9 deletions doomsday/engine/portable/include/p_maptypes.h
Expand Up @@ -8,16 +8,9 @@
#define LO_prev link[0]
#define LO_next link[1]

typedef struct shadowpolyoffset_s {
float offset[2];
} shadowpolyoffset_t;

#define MAX_BEXOFFSETS 8

typedef struct shadowvert_s {
float inner[2];
float extended[2];
shadowpolyoffset_t backExtended[MAX_BEXOFFSETS];
} shadowvert_t;

typedef struct lineowner_s {
Expand Down Expand Up @@ -78,7 +71,6 @@ typedef struct vertex_s {

// Seg flags
#define SEGF_POLYOBJ 0x1 // Seg is part of a poly object.
#define SEGF_SHADOW 0x2 // Seg casts edge shadows.

// Seg frame flags
#define SEGINF_FACINGFRONT 0x0001
Expand All @@ -101,7 +93,6 @@ typedef struct seg_s {
struct biastracker_s tracker[3]; // 0=middle, 1=top, 2=bottom
struct vertexillum_s illum[3][4];
short frameFlags;
unsigned short shadowVisFrame;
} seg_t;

#define SUBF_MIDPOINT 0x80 // Midpoint is tri-fan centre.
Expand Down Expand Up @@ -428,6 +419,7 @@ typedef struct linedef_s {
float bBox[4];
boolean mapped[DDMAXPLAYERS]; // Whether the line has been mapped by each player yet.
mlinedef_t buildData;
unsigned short shadowVisFrame[2]; // Framecount of last time shadows were drawn for this line, for each side [right, left].
} linedef_t;

typedef struct mpolyobj_s {
Expand Down
3 changes: 2 additions & 1 deletion doomsday/engine/portable/include/r_data.h
Expand Up @@ -175,7 +175,8 @@ typedef struct linkmobj_s {

typedef struct shadowlink_s {
struct shadowlink_s *next;
seg_t *seg;
linedef_t *lineDef;
byte side;
} shadowlink_t;

typedef struct subplaneinfo_s {
Expand Down
6 changes: 3 additions & 3 deletions doomsday/engine/portable/include/r_shadow.h
Expand Up @@ -22,15 +22,15 @@
* Boston, MA 02110-1301 USA
*/

/*
/**
* r_shadow.h: Runtime Map Shadowing (FakeRadio)
*/

#ifndef __DOOMSDAY_REFRESH_SHADOW_H__
#define __DOOMSDAY_REFRESH_SHADOW_H__

void R_InitSectorShadows(void);
sector_t *R_GetShadowSector(seg_t *seg, uint plane,
boolean getLinked);

boolean R_IsShadowingLinedef(linedef_t *line);

#endif

0 comments on commit 3940854

Please sign in to comment.