Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
W
wolf3d
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PocketInsanity
wolf3d
Commits
3a4d1f62
Commit
3a4d1f62
authored
Jun 15, 2000
by
Steven Fuller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* DisplayScreen in GL (uses DrawPixels)
* If LastTexture is same, don't do a new glBegin (for Walls)
parent
f4482f23
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
200 additions
and
112 deletions
+200
-112
Burger.c
macsrc/Burger.c
+0
-17
GLDraw.c
macsrc/GLDraw.c
+114
-54
InterMis.c
macsrc/InterMis.c
+3
-2
Intro.c
macsrc/Intro.c
+6
-2
Main.c
macsrc/Main.c
+1
-1
SoftDraw.c
macsrc/SoftDraw.c
+30
-2
TODO
macsrc/TODO
+5
-5
stub.c
macsrc/stub.c
+0
-5
vi_glx.c
macsrc/vi_glx.c
+39
-23
wolfdef.h
macsrc/wolfdef.h
+2
-1
No files found.
macsrc/Burger.c
View file @
3a4d1f62
...
...
@@ -22,25 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <stdlib.h>
#include <string.h>
unsigned
char
*
VideoPointer
;
Word
VideoWidth
;
LongWord
YTable
[
480
];
#define BRGR 0x42524752
void
InitYTable
(
void
)
{
Word
i
;
LongWord
Offset
;
i
=
0
;
Offset
=
0
;
do
{
YTable
[
i
]
=
Offset
;
Offset
+=
VideoWidth
;
}
while
(
++
i
<
480
);
}
/**********************************
Load and set a palette resource
...
...
macsrc/GLDraw.c
View file @
3a4d1f62
...
...
@@ -45,6 +45,47 @@ Byte Pal[768];
Utility Functions
*/
GLuint
LastTexture
;
static
void
StartTexture
()
{
LastTexture
=
-
1
;
}
static
void
ChangeTexture
(
GLuint
x
)
{
if
(
x
==
0
)
fprintf
(
stderr
,
"%s/%d: Binding zero texture!
\n
"
,
__FILE__
,
__LINE__
);
if
(
LastTexture
!=
x
)
{
if
(
LastTexture
!=
-
1
)
glEnd
();
glBindTexture
(
GL_TEXTURE_2D
,
x
);
glBegin
(
GL_QUADS
);
LastTexture
=
x
;
return
;
}
}
static
void
StopTexture
()
{
if
(
LastTexture
!=
-
1
)
glEnd
();
LastTexture
=
-
1
;
}
static
void
ChangeTextureSimple
(
GLuint
x
)
{
if
(
x
==
0
)
fprintf
(
stderr
,
"%s/%d: Binding zero texture!
\n
"
,
__FILE__
,
__LINE__
);
if
(
LastTexture
!=
x
)
{
glBindTexture
(
GL_TEXTURE_2D
,
x
);
LastTexture
=
x
;
return
;
}
}
void
xgluPerspective
(
GLdouble
fovx
,
GLdouble
aspect
,
GLdouble
zNear
,
GLdouble
zFar
)
{
GLdouble
xmin
,
xmax
,
ymin
,
ymax
;
...
...
@@ -79,10 +120,6 @@ int CheckToken(const char *str, const char *item)
Temp Stuff
*/
void
DisplayScreen
(
Word
res
)
{
}
void
FadeToPtr
(
unsigned
char
*
PalPtr
)
{
SetPalette
(
PalPtr
);
...
...
@@ -136,10 +173,64 @@ Byte *Pal256toRGB(Byte *dat, int len, Byte *pal)
return
buf
;
}
typedef
struct
{
GLuint
t
;
GLfloat
w
;
GLfloat
h
;
}
Texture
;
void
RedrawScreen
()
{
BlastScreen
();
}
void
DrawShape
(
Word
x
,
Word
y
,
void
*
ShapePtr
)
{
}
void
DrawPsyched
(
Word
Index
)
{
}
void
DisplayScreen
(
Word
res
,
Word
pres
)
{
LongWord
*
PackPtr
;
LongWord
PackLength
;
unsigned
short
*
ShapePtr
;
int
width
,
height
;
Byte
*
buf
,
*
pal
;
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
glMatrixMode
(
GL_MODELVIEW
);
glLoadIdentity
();
PackPtr
=
LoadAResource
(
res
);
PackLength
=
lMSB
(
PackPtr
[
0
]);
ShapePtr
=
(
unsigned
short
*
)
AllocSomeMem
(
PackLength
);
DLZSS
((
Byte
*
)
ShapePtr
,
(
Byte
*
)
&
PackPtr
[
1
],
PackLength
);
pal
=
LoadAResource
(
pres
);
glPixelZoom
(
1
.
0
f
,
-
1
.
0
f
);
glRasterPos2f
(
-
1
.
0
f
,
1
.
0
f
);
width
=
sMSB
(
ShapePtr
[
0
]);
height
=
sMSB
(
ShapePtr
[
1
]);
buf
=
Pal256toRGB
((
Byte
*
)
&
ShapePtr
[
2
],
width
*
height
,
pal
);
glDrawPixels
(
width
,
height
,
GL_RGB
,
GL_UNSIGNED_BYTE
,
buf
);
free
(
buf
);
FreeSomeMem
(
ShapePtr
);
ReleaseAResource
(
pres
);
ReleaseAResource
(
res
);
glFinish
();
}
void
SetNumber
(
LongWord
number
,
Word
x
,
Word
y
,
Word
digits
)
{
}
...
...
@@ -205,7 +296,6 @@ void IO_DisplayViewBuffer(void)
}
}
GLuint
LastTexture
;
/*
Automap Drawing
...
...
@@ -223,8 +313,6 @@ void MakeSmallFont()
pal
=
LoadAResource
(
rGamePal
);
LastTexture
=
0
;
for
(
i
=
0
;
i
<
64
;
i
++
)
{
ArtStart
=
ArtData
[
i
];
...
...
@@ -325,7 +413,6 @@ void DrawSmall(Word x, Word y, Word tile)
glPushMatrix
();
glLoadIdentity
();
LastTexture
=
smltex
[
tile
];
glBindTexture
(
GL_TEXTURE_2D
,
smltex
[
tile
]);
glBegin
(
GL_QUADS
);
...
...
@@ -484,8 +571,11 @@ Byte *DeXMShape256(Byte *data)
void
IO_ClearViewBuffer
()
{
LastTexture
=
0
;
StartTexture
();
glBindTexture
(
GL_TEXTURE_2D
,
0
);
/* **MESA BUG** */
glTexEnvf
(
GL_TEXTURE_ENV
,
GL_TEXTURE_ENV_MODE
,
GL_MODULATE
);
glViewport
(
0
,
VidHeight
-
ViewHeight
,
VidWidth
,
ViewHeight
);
...
...
@@ -496,40 +586,27 @@ void IO_ClearViewBuffer()
glPushMatrix
();
glLoadIdentity
();
#if 0
/* glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); */
glClear(GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glColor3ub(Pal[0x2F*3+0], Pal[0x2F*3+1], Pal[0x2F*3+2]);
glRectf(-1, 0, 1, 1);
glColor3ub(Pal[0x2A*3+0], Pal[0x2A*3+1], Pal[0x2A*3+2]);
glRectf(1, -1, -1, 0);
glEnable(GL_DEPTH_TEST);
#else
glEnable
(
GL_DEPTH_TEST
);
glDepthRange
(
1
.
0
,
1
.
0
);
glDepthFunc
(
GL_ALWAYS
);
glColor3ub
(
Pal
[
0x2F
*
3
+
0
],
Pal
[
0x2F
*
3
+
1
],
Pal
[
0x2F
*
3
+
2
]);
glRectf
(
-
1
,
0
,
1
,
1
);
glRectf
(
-
1
.
0
,
0
.
0
,
1
.
0
,
1
.
0
);
glColor3ub
(
Pal
[
0x2A
*
3
+
0
],
Pal
[
0x2A
*
3
+
1
],
Pal
[
0x2A
*
3
+
2
]);
glRectf
(
1
,
-
1
,
-
1
,
0
);
glRectf
(
1
.
0
,
-
1
.
0
,
-
1
.
0
,
0
.
0
);
glDepthRange
(
0
.
0
,
1
.
0
);
glDepthFunc
(
GL_LESS
);
#endif
glPopMatrix
();
glMatrixMode
(
GL_MODELVIEW
);
/* Not needed when using GL_REPLACE */
/* glColor3f(1.0, 1.0, 1.0); */
glTexEnvf
(
GL_TEXTURE_ENV
,
GL_TEXTURE_ENV_MODE
,
GL_REPLACE
);
glRotatef
(
270
.
0
-
((
GLfloat
)
gamestate
.
viewangle
/
(
GLfloat
)
ANGLES
*
360
.
0
),
0
.
0
,
1
.
0
,
0
.
0
);
glTranslatef
((
GLfloat
)
actors
[
0
].
x
/
256
.
0
,
0
,
(
GLfloat
)
actors
[
0
].
y
/
256
.
0
);
...
...
@@ -544,9 +621,9 @@ void InitRenderView()
Byte
*
buf
,
*
pal
;
int
i
;
glClearColor
(
0
.
0
,
0
.
0
,
0
.
0
,
0
.
0
);
glClear
(
GL_COLOR_BUFFER_BIT
|
GL_DEPTH_BUFFER_BIT
);
LastTexture
=
0
;
glEnable
(
GL_TEXTURE_2D
);
#ifdef GL_EXT_shared_texture_palette
...
...
@@ -695,8 +772,6 @@ void InitRenderView()
glEnable
(
GL_ALPHA_TEST
);
glAlphaFunc
(
GL_GREATER
,
0
.
5
);
glClearColor
(
0
.
0
,
0
.
0
,
0
.
0
,
0
.
0
);
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
...
...
@@ -711,7 +786,6 @@ void InitRenderView()
void
IO_AttackShape
(
Word
shape
)
{
LastTexture
=
weptex
[
shape
];
if
(
weptex
[
shape
]
==
0
)
{
fprintf
(
stderr
,
"Weapon shape %d is zero texture!
\n
"
,
shape
);
}
...
...
@@ -748,14 +822,7 @@ void DrawSprite(thing_t *t)
glTranslatef
(
-
(
GLfloat
)
t
->
x
/
256
.
0
,
0
,
-
(
GLfloat
)
t
->
y
/
256
.
0
);
glRotatef
(
90
.
0
+
((
GLfloat
)
gamestate
.
viewangle
/
(
GLfloat
)
ANGLES
*
360
.
0
),
0
.
0
,
1
.
0
,
0
.
0
);
if
(
sprtex
[
t
->
sprite
]
==
0
)
{
fprintf
(
stderr
,
"ERROR: 0 texture in DrawSprite (%d)
\n
"
,
t
->
sprite
);
}
if
(
LastTexture
!=
sprtex
[
t
->
sprite
])
{
LastTexture
=
sprtex
[
t
->
sprite
];
glBindTexture
(
GL_TEXTURE_2D
,
sprtex
[
t
->
sprite
]);
}
ChangeTextureSimple
(
sprtex
[
t
->
sprite
]);
glBegin
(
GL_QUADS
);
glTexCoord2f
(
1
.
0
,
0
.
0
);
glVertex2f
(
0
.
5
,
1
);
...
...
@@ -994,6 +1061,8 @@ void DrawSprites(void)
missile_t
*
MissilePtr
;
/* Pointer to active missile record */
Word
*
xe
;
/* Pointer to sort value */
StopTexture
();
/* Draw Walls */
numvisspr
=
0
;
/* Init the sprite count */
/* add all sprites in visareas*/
...
...
@@ -1039,7 +1108,6 @@ void DrawSprites(void)
SortEvents
();
/* draw from smallest scale to largest */
xe
=
&
firstevent
[
i
-
1
];
do
{
dseg
=
&
vissprites
[
xe
[
0
]
&
(
MAXVISSPRITES
-
1
)];
...
...
@@ -1300,15 +1368,8 @@ void P_DrawSegx(saveseg_t *seg)
smin
=
-
(
pos
+
texslide
);
smax
=
-
(
pos
+
(
max
-
min
));
if
(
waltex
[
t
]
==
0
)
fprintf
(
stderr
,
"ERROR: 0 texture in P_DrawSegx!
\n
"
);
ChangeTexture
(
waltex
[
t
]);
if
(
LastTexture
!=
waltex
[
t
])
{
LastTexture
=
waltex
[
t
];
glBindTexture
(
GL_TEXTURE_2D
,
waltex
[
t
]);
}
glBegin
(
GL_QUADS
);
switch
(
seg
->
dir
&
3
)
{
case
di_north
:
if
(
door
!=
-
1
)
{
...
...
@@ -1359,6 +1420,5 @@ void P_DrawSegx(saveseg_t *seg)
}
break
;
}
glEnd
();
}
}
macsrc/InterMis.c
View file @
3a4d1f62
...
...
@@ -243,7 +243,8 @@ void LevelCompleted(void)
NumberIndex
=
47
;
/* Hack to draw score using an alternate number set */
NewGameWindow
(
1
);
/* Force 512 mode screen */
DisplayScreen
(
rIntermission
);
DisplayScreen
(
rIntermission
,
rInterPal
);
BlastScreen
();
PackPtr
=
LoadAResource
(
rInterPics
);
PackLength
=
lMSB
(
PackPtr
[
0
]);
...
...
macsrc/Intro.c
View file @
3a4d1f62
...
...
@@ -32,19 +32,23 @@ void Intro(void)
FadeToBlack
();
/* Fade out the video */
DisplayScreen
(
rMacPlayPic
);
DisplayScreen
(
rMacPlayPic
,
rMacPlayPal
);
BlastScreen
();
StartSong
(
SongListPtr
[
0
]);
/* Play the song */
FadeTo
(
rMacPlayPal
);
/* Fade in the picture */
WaitTicksEvent
(
240
);
/* Wait for event */
DisplayScreen
(
rMacPlayPic
,
rIdLogoPal
);
/* higher bpp hack */
BlastScreen
();
FadeTo
(
rIdLogoPal
);
if
(
toupper
(
WaitTicksEvent
(
240
))
==
'B'
)
{
/* Wait for event */
FadeToBlack
();
ClearTheScreen
(
BLACK
);
DisplayScreen
(
rYummyPic
);
DisplayScreen
(
rYummyPic
,
rYummyPal
);
BlastScreen
();
FadeTo
(
rYummyPal
);
...
...
macsrc/Main.c
View file @
3a4d1f62
...
...
@@ -137,7 +137,7 @@ Boolean TitleScreen()
NewGameWindow
(
1
);
/* Set to 512 mode */
FadeToBlack
();
/* Fade out the video */
DisplayScreen
(
rTitlePic
);
DisplayScreen
(
rTitlePic
,
rTitlePal
);
BlastScreen
();
StartSong
(
SongListPtr
[
0
]);
...
...
macsrc/SoftDraw.c
View file @
3a4d1f62
...
...
@@ -10,7 +10,7 @@ This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
...
...
@@ -19,12 +19,31 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "wolfdef.h"
void
DisplayScreen
(
Word
res
)
unsigned
char
*
VideoPointer
;
Word
VideoWidth
;
LongWord
YTable
[
480
];
void
InitYTable
(
void
)
{
Word
i
;
LongWord
Offset
;
i
=
0
;
Offset
=
0
;
do
{
YTable
[
i
]
=
Offset
;
Offset
+=
VideoWidth
;
}
while
(
++
i
<
480
);
}
void
DisplayScreen
(
Word
res
,
Word
pal
)
{
LongWord
*
PackPtr
;
LongWord
PackLength
;
unsigned
short
*
ShapePtr
;
/* pal is ignored in 8bit */
PackPtr
=
LoadAResource
(
res
);
PackLength
=
lMSB
(
PackPtr
[
0
]);
ShapePtr
=
(
unsigned
short
*
)
AllocSomeMem
(
PackLength
);
...
...
@@ -35,6 +54,15 @@ void DisplayScreen(Word res)
ReleaseAResource
(
res
);
}
void
RedrawScreen
()
{
BlastScreen
();
}
void
DrawPsyched
(
Word
Index
)
{
}
/**********************************
Load and set a palette from a pointer
...
...
macsrc/TODO
View file @
3a4d1f62
...
...
@@ -13,16 +13,16 @@ TODO:
* Finish moving all 2D code to SoftDraw.c
- Should move some code so it is not such a large file (SoftDraw2.c)
* Finish OpenGL
+ Status bars, Introscreens, Psyched [DrawShape]
+ Not exactly sure how I will implement this yet.
+ Status bars, Level completed screen, Psyched [DrawShape]
- IO_Draw* (status bar versions) are stubbed, update statusbar when
doing screen update
- Finish window resizing
- Could use the LastTexture to have less glBegin/Ends.
- When all drawing is implemented, remove any unnecessary state/matrix
changes.
- Split up GLDraw.c
- Is GL_REPLACE faster than GL_MODULATE for textures?
- Save "draw state" so redrawing works right when screen is
resized/exposed
* Save/Load Games
- Menu code does not exist yet -- so just have a compiled in default save
and load files
...
...
macsrc/stub.c
View file @
3a4d1f62
...
...
@@ -107,11 +107,6 @@ void ShowGetPsyched(void)
SetAPalette
(
rGamePal
);
}
void
DrawPsyched
(
Word
Index
)
{
/* TODO: blah */
}
void
EndGetPsyched
(
void
)
{
while
(
PsyTime
>
ReadTick
())
;
...
...
macsrc/vi_glx.c
View file @
3a4d1f62
...
...
@@ -40,6 +40,8 @@ XVisualInfo *vi;
GLXContext
ctx
;
Atom
wmDeleteWindow
;
int
VidWidth
,
VidHeight
,
ViewHeight
;
#ifdef GL_EXT_shared_texture_palette
extern
int
UseSharedTexturePalette
;
extern
PFNGLCOLORTABLEEXTPROC
pglColorTableEXT
;
...
...
@@ -47,6 +49,8 @@ extern PFNGLCOLORTABLEEXTPROC pglColorTableEXT;
extern
int
CheckToken
(
const
char
*
str
,
const
char
*
item
);
int
HandleEvents
();
int
attrib
[]
=
{
GLX_RGBA
,
GLX_RED_SIZE
,
5
,
...
...
@@ -189,6 +193,8 @@ int main(int argc, char *argv[])
}
#endif
glShadeModel
(
GL_FLAT
);
InitData
();
SlowDown
=
1
;
...
...
@@ -222,7 +228,6 @@ void BlastScreen2(Rect *BlastRect)
BlastScreen
();
}
int
VidWidth
,
VidHeight
,
ViewHeight
;
#define w VidWidth
#define h VidHeight
#define v ViewHeight
...
...
@@ -243,7 +248,7 @@ void BlastScreen()
}
}
Word
VidXs
[]
=
{
320
,
512
,
640
,
640
};
/* Screen sizes to play with */
Word
VidXs
[]
=
{
320
,
512
,
640
,
640
};
Word
VidYs
[]
=
{
200
,
384
,
400
,
480
};
Word
VidVs
[]
=
{
160
,
320
,
320
,
400
};
Word
VidPics
[]
=
{
rFaceShapes
,
rFace512
,
rFace640
,
rFace640
};
...
...
@@ -270,15 +275,18 @@ Word NewGameWindow(Word NewVidSize)
sizehints
.
flags
=
PMinSize
;
XSetWMNormalHints
(
dpy
,
win
,
&
sizehints
);
XResizeWindow
(
dpy
,
win
,
w
,
h
);
XSync
(
dpy
,
False
);
InitYTable
();
SetAPalette
(
rBlackPal
);
ClearTheScreen
(
BLACK
);
BlastScreen
();
VidSize
=
NewVidSize
;
XSync
(
dpy
,
False
);
glXWaitGL
();
glXWaitX
();
HandleEvents
();
return
VidSize
;
}
...
...
@@ -412,6 +420,15 @@ void keyboard_handler(KeySym keycode, int press)
UpdateKeys
(
keycode
,
press
);
if
(
press
==
0
)
{
switch
(
keycode
)
{
case
XK_Escape
:
Quit
(
NULL
);
/* fast way out */
default:
break
;
}
}
if
(
RSJ
)
{
if
(
press
==
0
)
{
for
(
i
=
0
;
i
<
CheatCount
;
i
++
)
{
...
...
@@ -506,8 +523,6 @@ void keyboard_handler(KeySym keycode, int press)
case
XK_slash
:
joystick1
=
JOYPAD_START
;
break
;
case
XK_Escape
:
Quit
(
NULL
);
/* fast way out */
}
}
...
...
@@ -558,7 +573,6 @@ void keyboard_handler(KeySym keycode, int press)
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
if
(
keys
[
SC_RIGHTSHIFT
])
joystick1
|=
(
JOYPAD_X
|
JOYPAD_Y
);
}
if
((
joystick1
&
(
JOYPAD_LFT
|
JOYPAD_RGT
))
==
(
JOYPAD_LFT
|
JOYPAD_RGT
))
joystick1
&=
~
(
JOYPAD_LFT
|
JOYPAD_RGT
);
...
...
@@ -574,7 +588,7 @@ void keyboard_handler(KeySym keycode, int press)
joystick1
&=
~
JOYPAD_TR
;
}
}
}
}
int
HandleEvents
()
...
...
@@ -595,10 +609,12 @@ int HandleEvents()
ret
=
0
;
break
;
case
Expose
:
Blast
Screen
();
Redraw
Screen
();
break
;
case
ConfigureNotify
:
glViewport
(
0
,
0
,
event
.
xconfigure
.
width
,
event
.
xconfigure
.
height
);
glPixelZoom
(
1
.
0
f
,
-
1
.
0
f
);
glRasterPos2f
(
-
1
.
0
f
,
1
.
0
f
);
break
;
case
ClientMessage
:
if
(
event
.
xclient
.
data
.
l
[
0
]
==
wmDeleteWindow
)
...
...
macsrc/wolfdef.h
View file @
3a4d1f62
...
...
@@ -585,7 +585,7 @@ extern Byte *ArtData[64];
extern
Byte
textures
[
MAPSIZE
*
2
+
5
][
MAPSIZE
];
/* 0-63 is horizontal, 64-127 is vertical*/
extern
void
SetPalette
(
Byte
*
pal
);
extern
void
DisplayScreen
(
Word
res
);
extern
void
DisplayScreen
(
Word
res
,
Word
pal
);
extern
void
InitRenderView
();
extern
void
StartRenderView
();
extern
void
Quit
(
char
*
str
);
...
...
@@ -594,6 +594,7 @@ extern int InitResources(char *name);
extern
void
InitData
();
extern
int
WolfMain
(
int
argc
,
char
*
argv
[]);
extern
void
FreeResources
();
extern
void
RedrawScreen
();
extern
void
BlastScreen
(
void
);
extern
void
BlastScreen2
(
Rect
*
BlastRect
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment