1
00:00:02,000 --> 00:00:04,309

hello everyone and welcome back to the

2
00:00:04,309 --> 00:00:04,319
hello everyone and welcome back to the
 

3
00:00:04,319 --> 00:00:05,910
hello everyone and welcome back to the
kohi game engine series

4
00:00:05,910 --> 00:00:05,920
kohi game engine series
 

5
00:00:05,920 --> 00:00:07,269
kohi game engine series
today we're going to talk about the

6
00:00:07,269 --> 00:00:07,279
today we're going to talk about the
 

7
00:00:07,279 --> 00:00:16,070
today we're going to talk about the
vulcan graphics pipeline

8
00:00:16,070 --> 00:00:16,080
vulcan graphics pipeline
 

9
00:00:16,080 --> 00:00:17,830
vulcan graphics pipeline
before we jump in i'd like to take a

10
00:00:17,830 --> 00:00:17,840
before we jump in i'd like to take a
 

11
00:00:17,840 --> 00:00:19,349
before we jump in i'd like to take a
minute and

12
00:00:19,349 --> 00:00:19,359
minute and
 

13
00:00:19,359 --> 00:00:21,910
minute and
thank the supporters of the channel

14
00:00:21,910 --> 00:00:21,920
thank the supporters of the channel
 

15
00:00:21,920 --> 00:00:23,910
thank the supporters of the channel
starting with the partners who are a

16
00:00:23,910 --> 00:00:23,920
starting with the partners who are a
 

17
00:00:23,920 --> 00:00:24,550
starting with the partners who are a
arcelia

18
00:00:24,550 --> 00:00:24,560
arcelia
 

19
00:00:24,560 --> 00:00:27,830
arcelia
wen shang and kaden the partner is the

20
00:00:27,830 --> 00:00:27,840
wen shang and kaden the partner is the
 

21
00:00:27,840 --> 00:00:30,390
wen shang and kaden the partner is the
highest tier of membership either via

22
00:00:30,390 --> 00:00:30,400
highest tier of membership either via
 

23
00:00:30,400 --> 00:00:32,870
highest tier of membership either via
youtube or the patreon page so thank you

24
00:00:32,870 --> 00:00:32,880
youtube or the patreon page so thank you
 

25
00:00:32,880 --> 00:00:33,670
youtube or the patreon page so thank you
very much

26
00:00:33,670 --> 00:00:33,680
very much
 

27
00:00:33,680 --> 00:00:36,310
very much
for your support i would also like to

28
00:00:36,310 --> 00:00:36,320
for your support i would also like to
 

29
00:00:36,320 --> 00:00:37,190
for your support i would also like to
thank everybody

30
00:00:37,190 --> 00:00:37,200
thank everybody
 

31
00:00:37,200 --> 00:00:39,670
thank everybody
else that is listed here on this screen

32
00:00:39,670 --> 00:00:39,680
else that is listed here on this screen
 

33
00:00:39,680 --> 00:00:40,950
else that is listed here on this screen
for your support it is

34
00:00:40,950 --> 00:00:40,960
for your support it is
 

35
00:00:40,960 --> 00:00:43,990
for your support it is
greatly appreciated if you wish to

36
00:00:43,990 --> 00:00:44,000
greatly appreciated if you wish to
 

37
00:00:44,000 --> 00:00:46,069
greatly appreciated if you wish to
support my work you can either join

38
00:00:46,069 --> 00:00:46,079
support my work you can either join
 

39
00:00:46,079 --> 00:00:48,709
support my work you can either join
via youtube memberships there is a link

40
00:00:48,709 --> 00:00:48,719
via youtube memberships there is a link
 

41
00:00:48,719 --> 00:00:50,069
via youtube memberships there is a link
in the description below

42
00:00:50,069 --> 00:00:50,079
in the description below
 

43
00:00:50,079 --> 00:00:53,189
in the description below
to that or you can take a look at my

44
00:00:53,189 --> 00:00:53,199
to that or you can take a look at my
 

45
00:00:53,199 --> 00:00:55,910
to that or you can take a look at my
patreon page which is at patreon.com

46
00:00:55,910 --> 00:00:55,920
patreon page which is at patreon.com
 

47
00:00:55,920 --> 00:00:59,029
patreon page which is at patreon.com
forward slash travis roman all right

48
00:00:59,029 --> 00:00:59,039
forward slash travis roman all right
 

49
00:00:59,039 --> 00:01:03,349
forward slash travis roman all right
so the vulcan graphics pipeline

50
00:01:03,349 --> 00:01:03,359
so the vulcan graphics pipeline
 

51
00:01:03,359 --> 00:01:05,350
so the vulcan graphics pipeline
basically uh in this video we are going

52
00:01:05,350 --> 00:01:05,360
basically uh in this video we are going
 

53
00:01:05,360 --> 00:01:06,469
basically uh in this video we are going
to talk about

54
00:01:06,469 --> 00:01:06,479
to talk about
 

55
00:01:06,479 --> 00:01:09,030
to talk about
what the vulcan graphics pipeline is and

56
00:01:09,030 --> 00:01:09,040
what the vulcan graphics pipeline is and
 

57
00:01:09,040 --> 00:01:10,149
what the vulcan graphics pipeline is and
what shaders are

58
00:01:10,149 --> 00:01:10,159
what shaders are
 

59
00:01:10,159 --> 00:01:12,789
what shaders are
and how they work from a high level and

60
00:01:12,789 --> 00:01:12,799
and how they work from a high level and
 

61
00:01:12,799 --> 00:01:13,830
and how they work from a high level and
then we will go ahead

62
00:01:13,830 --> 00:01:13,840
then we will go ahead
 

63
00:01:13,840 --> 00:01:16,950
then we will go ahead
and look at what we need to do to get

64
00:01:16,950 --> 00:01:16,960
and look at what we need to do to get
 

65
00:01:16,960 --> 00:01:20,149
and look at what we need to do to get
set up to actually compile shaders

66
00:01:20,149 --> 00:01:20,159
set up to actually compile shaders
 

67
00:01:20,159 --> 00:01:22,390
set up to actually compile shaders
the vulcan graphics pipeline is a

68
00:01:22,390 --> 00:01:22,400
the vulcan graphics pipeline is a
 

69
00:01:22,400 --> 00:01:23,749
the vulcan graphics pipeline is a
sequence of operations

70
00:01:23,749 --> 00:01:23,759
sequence of operations
 

71
00:01:23,759 --> 00:01:26,310
sequence of operations
that take vertex data such as positions

72
00:01:26,310 --> 00:01:26,320
that take vertex data such as positions
 

73
00:01:26,320 --> 00:01:27,510
that take vertex data such as positions
or textures

74
00:01:27,510 --> 00:01:27,520
or textures
 

75
00:01:27,520 --> 00:01:29,990
or textures
and eventually output them as pixels on

76
00:01:29,990 --> 00:01:30,000
and eventually output them as pixels on
 

77
00:01:30,000 --> 00:01:30,710
and eventually output them as pixels on
the screen

78
00:01:30,710 --> 00:01:30,720
the screen
 

79
00:01:30,720 --> 00:01:34,390
the screen
now i have a sample here on the screen

80
00:01:34,390 --> 00:01:34,400
now i have a sample here on the screen
 

81
00:01:34,400 --> 00:01:36,469
now i have a sample here on the screen
of what some of that vertex data may

82
00:01:36,469 --> 00:01:36,479
of what some of that vertex data may
 

83
00:01:36,479 --> 00:01:37,429
of what some of that vertex data may
look like

84
00:01:37,429 --> 00:01:37,439
look like
 

85
00:01:37,439 --> 00:01:41,270
look like
so we have things like the xyz position

86
00:01:41,270 --> 00:01:41,280
so we have things like the xyz position
 

87
00:01:41,280 --> 00:01:42,950
so we have things like the xyz position
we have texture coordinates we have

88
00:01:42,950 --> 00:01:42,960
we have texture coordinates we have
 

89
00:01:42,960 --> 00:01:44,469
we have texture coordinates we have
normals we have

90
00:01:44,469 --> 00:01:44,479
normals we have
 

91
00:01:44,479 --> 00:01:46,230
normals we have
colors and all these things i'll get

92
00:01:46,230 --> 00:01:46,240
colors and all these things i'll get
 

93
00:01:46,240 --> 00:01:47,830
colors and all these things i'll get
into as we actually implement them but i

94
00:01:47,830 --> 00:01:47,840
into as we actually implement them but i
 

95
00:01:47,840 --> 00:01:49,350
into as we actually implement them but i
wanted to give you guys

96
00:01:49,350 --> 00:01:49,360
wanted to give you guys
 

97
00:01:49,360 --> 00:01:52,069
wanted to give you guys
some sort of an idea of what vertex data

98
00:01:52,069 --> 00:01:52,079
some sort of an idea of what vertex data
 

99
00:01:52,079 --> 00:01:53,350
some sort of an idea of what vertex data
might actually contain right so it can

100
00:01:53,350 --> 00:01:53,360
might actually contain right so it can
 

101
00:01:53,360 --> 00:01:54,069
might actually contain right so it can
contain

102
00:01:54,069 --> 00:01:54,079
contain
 

103
00:01:54,079 --> 00:01:56,950
contain
any number of things and each individual

104
00:01:56,950 --> 00:01:56,960
any number of things and each individual
 

105
00:01:56,960 --> 00:01:58,230
any number of things and each individual
vertex

106
00:01:58,230 --> 00:01:58,240
vertex
 

107
00:01:58,240 --> 00:02:00,469
vertex
ultimately represents at least a point

108
00:02:00,469 --> 00:02:00,479
ultimately represents at least a point
 

109
00:02:00,479 --> 00:02:01,990
ultimately represents at least a point
in space a three-dimensional point in

110
00:02:01,990 --> 00:02:02,000
in space a three-dimensional point in
 

111
00:02:02,000 --> 00:02:03,590
in space a three-dimensional point in
space but it can represent other things

112
00:02:03,590 --> 00:02:03,600
space but it can represent other things
 

113
00:02:03,600 --> 00:02:04,630
space but it can represent other things
as well and these are some of those

114
00:02:04,630 --> 00:02:04,640
as well and these are some of those
 

115
00:02:04,640 --> 00:02:06,069
as well and these are some of those
things that i can represent

116
00:02:06,069 --> 00:02:06,079
things that i can represent
 

117
00:02:06,079 --> 00:02:08,070
things that i can represent
the vulcan graphics pipeline has

118
00:02:08,070 --> 00:02:08,080
the vulcan graphics pipeline has
 

119
00:02:08,080 --> 00:02:09,830
the vulcan graphics pipeline has
multiple stages

120
00:02:09,830 --> 00:02:09,840
multiple stages
 

121
00:02:09,840 --> 00:02:13,110
multiple stages
and this is what that pipeline looks

122
00:02:13,110 --> 00:02:13,120
and this is what that pipeline looks
 

123
00:02:13,120 --> 00:02:14,710
and this is what that pipeline looks
like from a very high level

124
00:02:14,710 --> 00:02:14,720
like from a very high level
 

125
00:02:14,720 --> 00:02:17,190
like from a very high level
this is a simplified view of course but

126
00:02:17,190 --> 00:02:17,200
this is a simplified view of course but
 

127
00:02:17,200 --> 00:02:18,790
this is a simplified view of course but
this is a good place to start in my

128
00:02:18,790 --> 00:02:18,800
this is a good place to start in my
 

129
00:02:18,800 --> 00:02:19,510
this is a good place to start in my
opinion

130
00:02:19,510 --> 00:02:19,520
opinion
 

131
00:02:19,520 --> 00:02:22,630
opinion
what we have here is our flow from left

132
00:02:22,630 --> 00:02:22,640
what we have here is our flow from left
 

133
00:02:22,640 --> 00:02:23,910
what we have here is our flow from left
to right

134
00:02:23,910 --> 00:02:23,920
to right
 

135
00:02:23,920 --> 00:02:26,550
to right
and our vertex index buffers that's

136
00:02:26,550 --> 00:02:26,560
and our vertex index buffers that's
 

137
00:02:26,560 --> 00:02:28,150
and our vertex index buffers that's
basically the data that's going to come

138
00:02:28,150 --> 00:02:28,160
basically the data that's going to come
 

139
00:02:28,160 --> 00:02:28,470
basically the data that's going to come
in

140
00:02:28,470 --> 00:02:28,480
in
 

141
00:02:28,480 --> 00:02:30,710
in
obviously we'll get more into detail in

142
00:02:30,710 --> 00:02:30,720
obviously we'll get more into detail in
 

143
00:02:30,720 --> 00:02:31,990
obviously we'll get more into detail in
that as we start to

144
00:02:31,990 --> 00:02:32,000
that as we start to
 

145
00:02:32,000 --> 00:02:34,790
that as we start to
implement those things and after that we

146
00:02:34,790 --> 00:02:34,800
implement those things and after that we
 

147
00:02:34,800 --> 00:02:36,229
implement those things and after that we
have something called the input

148
00:02:36,229 --> 00:02:36,239
have something called the input
 

149
00:02:36,239 --> 00:02:38,470
have something called the input
assembler now the input assembler

150
00:02:38,470 --> 00:02:38,480
assembler now the input assembler
 

151
00:02:38,480 --> 00:02:41,910
assembler now the input assembler
is basically a process that collects the

152
00:02:41,910 --> 00:02:41,920
is basically a process that collects the
 

153
00:02:41,920 --> 00:02:43,670
is basically a process that collects the
raw vertex data from the buffers that

154
00:02:43,670 --> 00:02:43,680
raw vertex data from the buffers that
 

155
00:02:43,680 --> 00:02:45,030
raw vertex data from the buffers that
you specify

156
00:02:45,030 --> 00:02:45,040
you specify
 

157
00:02:45,040 --> 00:02:48,070
you specify
uh so the index and vertex buffers

158
00:02:48,070 --> 00:02:48,080
uh so the index and vertex buffers
 

159
00:02:48,080 --> 00:02:51,190
uh so the index and vertex buffers
and sometimes the index buffer

160
00:02:51,190 --> 00:02:51,200
and sometimes the index buffer
 

161
00:02:51,200 --> 00:02:53,430
and sometimes the index buffer
um is used sometimes an index buffer is

162
00:02:53,430 --> 00:02:53,440
um is used sometimes an index buffer is
 

163
00:02:53,440 --> 00:02:55,030
um is used sometimes an index buffer is
not used and that's basically

164
00:02:55,030 --> 00:02:55,040
not used and that's basically
 

165
00:02:55,040 --> 00:02:57,750
not used and that's basically
uh to allow us to reuse the same vertex

166
00:02:57,750 --> 00:02:57,760
uh to allow us to reuse the same vertex
 

167
00:02:57,760 --> 00:02:59,670
uh to allow us to reuse the same vertex
data over and over again

168
00:02:59,670 --> 00:02:59,680
data over and over again
 

169
00:02:59,680 --> 00:03:01,030
data over and over again
and again that is something i'll get

170
00:03:01,030 --> 00:03:01,040
and again that is something i'll get
 

171
00:03:01,040 --> 00:03:03,190
and again that is something i'll get
into in a bit but basically

172
00:03:03,190 --> 00:03:03,200
into in a bit but basically
 

173
00:03:03,200 --> 00:03:05,270
into in a bit but basically
what this does is it takes all that data

174
00:03:05,270 --> 00:03:05,280
what this does is it takes all that data
 

175
00:03:05,280 --> 00:03:06,470
what this does is it takes all that data
that is passed in

176
00:03:06,470 --> 00:03:06,480
that is passed in
 

177
00:03:06,480 --> 00:03:09,110
that is passed in
to the shader and sort of splits it up

178
00:03:09,110 --> 00:03:09,120
to the shader and sort of splits it up
 

179
00:03:09,120 --> 00:03:09,830
to the shader and sort of splits it up
and and

180
00:03:09,830 --> 00:03:09,840
and and
 

181
00:03:09,840 --> 00:03:11,110
and and
sets it up in a way where we can

182
00:03:11,110 --> 00:03:11,120
sets it up in a way where we can
 

183
00:03:11,120 --> 00:03:13,030
sets it up in a way where we can
actually use it in

184
00:03:13,030 --> 00:03:13,040
actually use it in
 

185
00:03:13,040 --> 00:03:16,630
actually use it in
the shader program and i'll get more in

186
00:03:16,630 --> 00:03:16,640
the shader program and i'll get more in
 

187
00:03:16,640 --> 00:03:18,470
the shader program and i'll get more in
to that in just a second as to what that

188
00:03:18,470 --> 00:03:18,480
to that in just a second as to what that
 

189
00:03:18,480 --> 00:03:21,030
to that in just a second as to what that
is so the vertex index buffers

190
00:03:21,030 --> 00:03:21,040
is so the vertex index buffers
 

191
00:03:21,040 --> 00:03:23,670
is so the vertex index buffers
are our raw data coming in and the input

192
00:03:23,670 --> 00:03:23,680
are our raw data coming in and the input
 

193
00:03:23,680 --> 00:03:24,789
are our raw data coming in and the input
assembler

194
00:03:24,789 --> 00:03:24,799
assembler
 

195
00:03:24,799 --> 00:03:28,309
assembler
takes that raw data and basically

196
00:03:28,309 --> 00:03:28,319
takes that raw data and basically
 

197
00:03:28,319 --> 00:03:30,550
takes that raw data and basically
sets it up in a format that is usable

198
00:03:30,550 --> 00:03:30,560
sets it up in a format that is usable
 

199
00:03:30,560 --> 00:03:33,190
sets it up in a format that is usable
for us in the next stages

200
00:03:33,190 --> 00:03:33,200
for us in the next stages
 

201
00:03:33,200 --> 00:03:35,830
for us in the next stages
so the next stage would be the vertex

202
00:03:35,830 --> 00:03:35,840
so the next stage would be the vertex
 

203
00:03:35,840 --> 00:03:37,030
so the next stage would be the vertex
shader

204
00:03:37,030 --> 00:03:37,040
shader
 

205
00:03:37,040 --> 00:03:39,190
shader
and that is basically run for every

206
00:03:39,190 --> 00:03:39,200
and that is basically run for every
 

207
00:03:39,200 --> 00:03:40,309
and that is basically run for every
vertex

208
00:03:40,309 --> 00:03:40,319
vertex
 

209
00:03:40,319 --> 00:03:42,070
vertex
and generally apply some sort of

210
00:03:42,070 --> 00:03:42,080
and generally apply some sort of
 

211
00:03:42,080 --> 00:03:44,390
and generally apply some sort of
transformation to turn vertex positions

212
00:03:44,390 --> 00:03:44,400
transformation to turn vertex positions
 

213
00:03:44,400 --> 00:03:45,670
transformation to turn vertex positions
from your model

214
00:03:45,670 --> 00:03:45,680
from your model
 

215
00:03:45,680 --> 00:03:49,030
from your model
space to screen space and it also

216
00:03:49,030 --> 00:03:49,040
space to screen space and it also
 

217
00:03:49,040 --> 00:03:51,270
space to screen space and it also
passes like per vertex data down the

218
00:03:51,270 --> 00:03:51,280
passes like per vertex data down the
 

219
00:03:51,280 --> 00:03:52,630
passes like per vertex data down the
pipeline so

220
00:03:52,630 --> 00:03:52,640
pipeline so
 

221
00:03:52,640 --> 00:03:54,149
pipeline so
that positional data and some of the

222
00:03:54,149 --> 00:03:54,159
that positional data and some of the
 

223
00:03:54,159 --> 00:03:56,390
that positional data and some of the
other items that i had shown you on the

224
00:03:56,390 --> 00:03:56,400
other items that i had shown you on the
 

225
00:03:56,400 --> 00:03:57,270
other items that i had shown you on the
previous

226
00:03:57,270 --> 00:03:57,280
previous
 

227
00:03:57,280 --> 00:03:59,350
previous
screen are some of the things that get

228
00:03:59,350 --> 00:03:59,360
screen are some of the things that get
 

229
00:03:59,360 --> 00:04:01,830
screen are some of the things that get
passed in this stage

230
00:04:01,830 --> 00:04:01,840
passed in this stage
 

231
00:04:01,840 --> 00:04:03,429
passed in this stage
there's then something called the

232
00:04:03,429 --> 00:04:03,439
there's then something called the
 

233
00:04:03,439 --> 00:04:05,030
there's then something called the
tessellation shader

234
00:04:05,030 --> 00:04:05,040
tessellation shader
 

235
00:04:05,040 --> 00:04:07,509
tessellation shader
which allows you to subdivide geometry

236
00:04:07,509 --> 00:04:07,519
which allows you to subdivide geometry
 

237
00:04:07,519 --> 00:04:08,949
which allows you to subdivide geometry
based on certain rules

238
00:04:08,949 --> 00:04:08,959
based on certain rules
 

239
00:04:08,959 --> 00:04:11,750
based on certain rules
to increase the mesh quality so a couple

240
00:04:11,750 --> 00:04:11,760
to increase the mesh quality so a couple
 

241
00:04:11,760 --> 00:04:14,789
to increase the mesh quality so a couple
of examples of this might be

242
00:04:14,789 --> 00:04:14,799
of examples of this might be
 

243
00:04:14,799 --> 00:04:18,229
of examples of this might be
in a terrain engine as you get closer to

244
00:04:18,229 --> 00:04:18,239
in a terrain engine as you get closer to
 

245
00:04:18,239 --> 00:04:19,830
in a terrain engine as you get closer to
various bits of the terrain you might

246
00:04:19,830 --> 00:04:19,840
various bits of the terrain you might
 

247
00:04:19,840 --> 00:04:21,670
various bits of the terrain you might
want to add more geometry

248
00:04:21,670 --> 00:04:21,680
want to add more geometry
 

249
00:04:21,680 --> 00:04:23,430
want to add more geometry
to smooth out curves and things of that

250
00:04:23,430 --> 00:04:23,440
to smooth out curves and things of that
 

251
00:04:23,440 --> 00:04:25,430
to smooth out curves and things of that
nature so that it doesn't look as

252
00:04:25,430 --> 00:04:25,440
nature so that it doesn't look as
 

253
00:04:25,440 --> 00:04:28,790
nature so that it doesn't look as
blocky or as you know you don't have

254
00:04:28,790 --> 00:04:28,800
blocky or as you know you don't have
 

255
00:04:28,800 --> 00:04:30,150
blocky or as you know you don't have
huge planes

256
00:04:30,150 --> 00:04:30,160
huge planes
 

257
00:04:30,160 --> 00:04:31,990
huge planes
showing up right it's not as obvious as

258
00:04:31,990 --> 00:04:32,000
showing up right it's not as obvious as
 

259
00:04:32,000 --> 00:04:33,430
showing up right it's not as obvious as
to what it's made out of

260
00:04:33,430 --> 00:04:33,440
to what it's made out of
 

261
00:04:33,440 --> 00:04:36,790
to what it's made out of
another example of this might be

262
00:04:36,790 --> 00:04:36,800
another example of this might be
 

263
00:04:36,800 --> 00:04:39,909
another example of this might be
some sort of rounded surface where as

264
00:04:39,909 --> 00:04:39,919
some sort of rounded surface where as
 

265
00:04:39,919 --> 00:04:41,590
some sort of rounded surface where as
you get closer to it you might

266
00:04:41,590 --> 00:04:41,600
you get closer to it you might
 

267
00:04:41,600 --> 00:04:44,790
you get closer to it you might
see the faces of that surface

268
00:04:44,790 --> 00:04:44,800
see the faces of that surface
 

269
00:04:44,800 --> 00:04:46,070
see the faces of that surface
unless you actually have some

270
00:04:46,070 --> 00:04:46,080
unless you actually have some
 

271
00:04:46,080 --> 00:04:47,830
unless you actually have some
tessellation happening

272
00:04:47,830 --> 00:04:47,840
tessellation happening
 

273
00:04:47,840 --> 00:04:50,629
tessellation happening
where there are more faces added to

274
00:04:50,629 --> 00:04:50,639
where there are more faces added to
 

275
00:04:50,639 --> 00:04:51,270
where there are more faces added to
those

276
00:04:51,270 --> 00:04:51,280
those
 

277
00:04:51,280 --> 00:04:53,270
those
rounded areas thus making them look more

278
00:04:53,270 --> 00:04:53,280
rounded areas thus making them look more
 

279
00:04:53,280 --> 00:04:54,310
rounded areas thus making them look more
round versus

280
00:04:54,310 --> 00:04:54,320
round versus
 

281
00:04:54,320 --> 00:04:57,670
round versus
octagonal for example so after that

282
00:04:57,670 --> 00:04:57,680
octagonal for example so after that
 

283
00:04:57,680 --> 00:05:00,469
octagonal for example so after that
there is a geometry shader which is run

284
00:05:00,469 --> 00:05:00,479
there is a geometry shader which is run
 

285
00:05:00,479 --> 00:05:03,270
there is a geometry shader which is run
on every primitive and a primitive is

286
00:05:03,270 --> 00:05:03,280
on every primitive and a primitive is
 

287
00:05:03,280 --> 00:05:06,150
on every primitive and a primitive is
anything from a triangle to a line to a

288
00:05:06,150 --> 00:05:06,160
anything from a triangle to a line to a
 

289
00:05:06,160 --> 00:05:07,590
anything from a triangle to a line to a
point

290
00:05:07,590 --> 00:05:07,600
point
 

291
00:05:07,600 --> 00:05:09,350
point
and we will cover primitives once we

292
00:05:09,350 --> 00:05:09,360
and we will cover primitives once we
 

293
00:05:09,360 --> 00:05:11,189
and we will cover primitives once we
actually get implementing those things

294
00:05:11,189 --> 00:05:11,199
actually get implementing those things
 

295
00:05:11,199 --> 00:05:11,909
actually get implementing those things
but

296
00:05:11,909 --> 00:05:11,919
but
 

297
00:05:11,919 --> 00:05:14,870
but
basically it can either discard or

298
00:05:14,870 --> 00:05:14,880
basically it can either discard or
 

299
00:05:14,880 --> 00:05:16,550
basically it can either discard or
output more primitives than actually

300
00:05:16,550 --> 00:05:16,560
output more primitives than actually
 

301
00:05:16,560 --> 00:05:17,430
output more primitives than actually
came in so

302
00:05:17,430 --> 00:05:17,440
came in so
 

303
00:05:17,440 --> 00:05:19,909
came in so
we can actually use this to generate

304
00:05:19,909 --> 00:05:19,919
we can actually use this to generate
 

305
00:05:19,919 --> 00:05:22,230
we can actually use this to generate
geometry on the fly so

306
00:05:22,230 --> 00:05:22,240
geometry on the fly so
 

307
00:05:22,240 --> 00:05:24,310
geometry on the fly so
the probably the widest use case for

308
00:05:24,310 --> 00:05:24,320
the probably the widest use case for
 

309
00:05:24,320 --> 00:05:26,390
the probably the widest use case for
this will be some of our debugging

310
00:05:26,390 --> 00:05:26,400
this will be some of our debugging
 

311
00:05:26,400 --> 00:05:27,590
this will be some of our debugging
utilities that we're going to be

312
00:05:27,590 --> 00:05:27,600
utilities that we're going to be
 

313
00:05:27,600 --> 00:05:28,230
utilities that we're going to be
building

314
00:05:28,230 --> 00:05:28,240
building
 

315
00:05:28,240 --> 00:05:30,150
building
we'll use the geometry shader to

316
00:05:30,150 --> 00:05:30,160
we'll use the geometry shader to
 

317
00:05:30,160 --> 00:05:32,070
we'll use the geometry shader to
generate some geometry for us so that we

318
00:05:32,070 --> 00:05:32,080
generate some geometry for us so that we
 

319
00:05:32,080 --> 00:05:33,749
generate some geometry for us so that we
don't actually have to pass in vertex

320
00:05:33,749 --> 00:05:33,759
don't actually have to pass in vertex
 

321
00:05:33,759 --> 00:05:35,590
don't actually have to pass in vertex
data in some scenarios

322
00:05:35,590 --> 00:05:35,600
data in some scenarios
 

323
00:05:35,600 --> 00:05:37,670
data in some scenarios
so after that comes the rasterization

324
00:05:37,670 --> 00:05:37,680
so after that comes the rasterization
 

325
00:05:37,680 --> 00:05:40,710
so after that comes the rasterization
stage and this basically approximates

326
00:05:40,710 --> 00:05:40,720
stage and this basically approximates
 

327
00:05:40,720 --> 00:05:42,310
stage and this basically approximates
the primitives that are

328
00:05:42,310 --> 00:05:42,320
the primitives that are
 

329
00:05:42,320 --> 00:05:44,790
the primitives that are
handed to it into fragments and these

330
00:05:44,790 --> 00:05:44,800
handed to it into fragments and these
 

331
00:05:44,800 --> 00:05:46,710
handed to it into fragments and these
fragments ultimately become

332
00:05:46,710 --> 00:05:46,720
fragments ultimately become
 

333
00:05:46,720 --> 00:05:49,590
fragments ultimately become
the pixel elements that fill the frame

334
00:05:49,590 --> 00:05:49,600
the pixel elements that fill the frame
 

335
00:05:49,600 --> 00:05:51,590
the pixel elements that fill the frame
buffer so the frame buffer if you recall

336
00:05:51,590 --> 00:05:51,600
buffer so the frame buffer if you recall
 

337
00:05:51,600 --> 00:05:53,510
buffer so the frame buffer if you recall
is the render target

338
00:05:53,510 --> 00:05:53,520
is the render target
 

339
00:05:53,520 --> 00:05:56,150
is the render target
and ultimately in most cases that

340
00:05:56,150 --> 00:05:56,160
and ultimately in most cases that
 

341
00:05:56,160 --> 00:05:58,150
and ultimately in most cases that
becomes pixels on the screen

342
00:05:58,150 --> 00:05:58,160
becomes pixels on the screen
 

343
00:05:58,160 --> 00:05:59,830
becomes pixels on the screen
and i say most cases because sometimes

344
00:05:59,830 --> 00:05:59,840
and i say most cases because sometimes
 

345
00:05:59,840 --> 00:06:01,189
and i say most cases because sometimes
we might render to a texture or

346
00:06:01,189 --> 00:06:01,199
we might render to a texture or
 

347
00:06:01,199 --> 00:06:02,950
we might render to a texture or
something along those lines and

348
00:06:02,950 --> 00:06:02,960
something along those lines and
 

349
00:06:02,960 --> 00:06:04,550
something along those lines and
in that case maybe that's not rendered

350
00:06:04,550 --> 00:06:04,560
in that case maybe that's not rendered
 

351
00:06:04,560 --> 00:06:05,990
in that case maybe that's not rendered
directly to the screen

352
00:06:05,990 --> 00:06:06,000
directly to the screen
 

353
00:06:06,000 --> 00:06:07,990
directly to the screen
so another important bit about the

354
00:06:07,990 --> 00:06:08,000
so another important bit about the
 

355
00:06:08,000 --> 00:06:09,350
so another important bit about the
rasterization stage

356
00:06:09,350 --> 00:06:09,360
rasterization stage
 

357
00:06:09,360 --> 00:06:11,830
rasterization stage
is any fragments that fall outside of

358
00:06:11,830 --> 00:06:11,840
is any fragments that fall outside of
 

359
00:06:11,840 --> 00:06:13,350
is any fragments that fall outside of
the screen space or the

360
00:06:13,350 --> 00:06:13,360
the screen space or the
 

361
00:06:13,360 --> 00:06:16,550
the screen space or the
the frame buffer space are discarded

362
00:06:16,550 --> 00:06:16,560
the frame buffer space are discarded
 

363
00:06:16,560 --> 00:06:19,110
the frame buffer space are discarded
and the attributes outputted by the

364
00:06:19,110 --> 00:06:19,120
and the attributes outputted by the
 

365
00:06:19,120 --> 00:06:20,150
and the attributes outputted by the
vertex shader

366
00:06:20,150 --> 00:06:20,160
vertex shader
 

367
00:06:20,160 --> 00:06:23,189
vertex shader
are interpolated across fragments so

368
00:06:23,189 --> 00:06:23,199
are interpolated across fragments so
 

369
00:06:23,199 --> 00:06:26,070
are interpolated across fragments so
what that basically means is let's say

370
00:06:26,070 --> 00:06:26,080
what that basically means is let's say
 

371
00:06:26,080 --> 00:06:27,909
what that basically means is let's say
for example that you have one vertex

372
00:06:27,909 --> 00:06:27,919
for example that you have one vertex
 

373
00:06:27,919 --> 00:06:28,629
for example that you have one vertex
that's red

374
00:06:28,629 --> 00:06:28,639
that's red
 

375
00:06:28,639 --> 00:06:30,230
that's red
and then you have one vertex that's

376
00:06:30,230 --> 00:06:30,240
and then you have one vertex that's
 

377
00:06:30,240 --> 00:06:32,629
and then you have one vertex that's
maybe a full unit away that's green

378
00:06:32,629 --> 00:06:32,639
maybe a full unit away that's green
 

379
00:06:32,639 --> 00:06:34,469
maybe a full unit away that's green
what's going to happen is as it fills in

380
00:06:34,469 --> 00:06:34,479
what's going to happen is as it fills in
 

381
00:06:34,479 --> 00:06:36,629
what's going to happen is as it fills in
the geometry from one vertex to the next

382
00:06:36,629 --> 00:06:36,639
the geometry from one vertex to the next
 

383
00:06:36,639 --> 00:06:38,309
the geometry from one vertex to the next
it's actually going to interpolate from

384
00:06:38,309 --> 00:06:38,319
it's actually going to interpolate from
 

385
00:06:38,319 --> 00:06:39,909
it's actually going to interpolate from
red to green

386
00:06:39,909 --> 00:06:39,919
red to green
 

387
00:06:39,919 --> 00:06:41,270
red to green
and you guys will actually see some

388
00:06:41,270 --> 00:06:41,280
and you guys will actually see some
 

389
00:06:41,280 --> 00:06:42,710
and you guys will actually see some
examples of that once we actually have

390
00:06:42,710 --> 00:06:42,720
examples of that once we actually have
 

391
00:06:42,720 --> 00:06:43,830
examples of that once we actually have
something up and run

392
00:06:43,830 --> 00:06:43,840
something up and run
 

393
00:06:43,840 --> 00:06:45,830
something up and run
one other item that's important to point

394
00:06:45,830 --> 00:06:45,840
one other item that's important to point
 

395
00:06:45,840 --> 00:06:47,830
one other item that's important to point
out about the rasterization stage

396
00:06:47,830 --> 00:06:47,840
out about the rasterization stage
 

397
00:06:47,840 --> 00:06:50,150
out about the rasterization stage
is typically fragments that are behind

398
00:06:50,150 --> 00:06:50,160
is typically fragments that are behind
 

399
00:06:50,160 --> 00:06:51,589
is typically fragments that are behind
other primitive fragments

400
00:06:51,589 --> 00:06:51,599
other primitive fragments
 

401
00:06:51,599 --> 00:06:53,670
other primitive fragments
are discarded because of depth testing

402
00:06:53,670 --> 00:06:53,680
are discarded because of depth testing
 

403
00:06:53,680 --> 00:06:55,749
are discarded because of depth testing
so what that basically means

404
00:06:55,749 --> 00:06:55,759
so what that basically means
 

405
00:06:55,759 --> 00:06:58,710
so what that basically means
is if you have an object that is in

406
00:06:58,710 --> 00:06:58,720
is if you have an object that is in
 

407
00:06:58,720 --> 00:07:01,350
is if you have an object that is in
front of another object in 3d space

408
00:07:01,350 --> 00:07:01,360
front of another object in 3d space
 

409
00:07:01,360 --> 00:07:03,510
front of another object in 3d space
and that object is not transparent in

410
00:07:03,510 --> 00:07:03,520
and that object is not transparent in
 

411
00:07:03,520 --> 00:07:04,629
and that object is not transparent in
any way

412
00:07:04,629 --> 00:07:04,639
any way
 

413
00:07:04,639 --> 00:07:07,589
any way
then any object behind it is not then

414
00:07:07,589 --> 00:07:07,599
then any object behind it is not then
 

415
00:07:07,599 --> 00:07:08,950
then any object behind it is not then
rendered

416
00:07:08,950 --> 00:07:08,960
rendered
 

417
00:07:08,960 --> 00:07:12,469
rendered
those pixels or fragments would then be

418
00:07:12,469 --> 00:07:12,479
those pixels or fragments would then be
 

419
00:07:12,479 --> 00:07:14,870
those pixels or fragments would then be
discarded and not actually used at that

420
00:07:14,870 --> 00:07:14,880
discarded and not actually used at that
 

421
00:07:14,880 --> 00:07:15,670
discarded and not actually used at that
point

422
00:07:15,670 --> 00:07:15,680
point
 

423
00:07:15,680 --> 00:07:17,990
point
and there are some exceptions to this

424
00:07:17,990 --> 00:07:18,000
and there are some exceptions to this
 

425
00:07:18,000 --> 00:07:19,670
and there are some exceptions to this
that we'll have to get into

426
00:07:19,670 --> 00:07:19,680
that we'll have to get into
 

427
00:07:19,680 --> 00:07:21,670
that we'll have to get into
but for now just take that at face value

428
00:07:21,670 --> 00:07:21,680
but for now just take that at face value
 

429
00:07:21,680 --> 00:07:24,070
but for now just take that at face value
and we will discuss those when we get to

430
00:07:24,070 --> 00:07:24,080
and we will discuss those when we get to
 

431
00:07:24,080 --> 00:07:24,950
and we will discuss those when we get to
that point

432
00:07:24,950 --> 00:07:24,960
that point
 

433
00:07:24,960 --> 00:07:27,510
that point
so the next stage here is the fragment

434
00:07:27,510 --> 00:07:27,520
so the next stage here is the fragment
 

435
00:07:27,520 --> 00:07:28,710
so the next stage here is the fragment
shader

436
00:07:28,710 --> 00:07:28,720
shader
 

437
00:07:28,720 --> 00:07:30,230
shader
and this is called for every fragment

438
00:07:30,230 --> 00:07:30,240
and this is called for every fragment
 

439
00:07:30,240 --> 00:07:32,629
and this is called for every fragment
that survives along the process that

440
00:07:32,629 --> 00:07:32,639
that survives along the process that
 

441
00:07:32,639 --> 00:07:34,230
that survives along the process that
isn't discarded

442
00:07:34,230 --> 00:07:34,240
isn't discarded
 

443
00:07:34,240 --> 00:07:36,469
isn't discarded
and determines which frame buffer or

444
00:07:36,469 --> 00:07:36,479
and determines which frame buffer or
 

445
00:07:36,479 --> 00:07:37,270
and determines which frame buffer or
frame buffers

446
00:07:37,270 --> 00:07:37,280
frame buffers
 

447
00:07:37,280 --> 00:07:40,710
frame buffers
the fragments are written to and it also

448
00:07:40,710 --> 00:07:40,720
the fragments are written to and it also
 

449
00:07:40,720 --> 00:07:42,790
the fragments are written to and it also
at this point determines what the color

450
00:07:42,790 --> 00:07:42,800
at this point determines what the color
 

451
00:07:42,800 --> 00:07:43,990
at this point determines what the color
of those fragments are

452
00:07:43,990 --> 00:07:44,000
of those fragments are
 

453
00:07:44,000 --> 00:07:46,230
of those fragments are
and what the depth values are this can

454
00:07:46,230 --> 00:07:46,240
and what the depth values are this can
 

455
00:07:46,240 --> 00:07:47,589
and what the depth values are this can
be used later on

456
00:07:47,589 --> 00:07:47,599
be used later on
 

457
00:07:47,599 --> 00:07:51,189
be used later on
when doing post-processing type effects

458
00:07:51,189 --> 00:07:51,199
when doing post-processing type effects
 

459
00:07:51,199 --> 00:07:51,670
when doing post-processing type effects
or

460
00:07:51,670 --> 00:07:51,680
or
 

461
00:07:51,680 --> 00:07:53,830
or
things of that nature we can use all of

462
00:07:53,830 --> 00:07:53,840
things of that nature we can use all of
 

463
00:07:53,840 --> 00:07:55,589
things of that nature we can use all of
this data for things like that

464
00:07:55,589 --> 00:07:55,599
this data for things like that
 

465
00:07:55,599 --> 00:07:57,830
this data for things like that
and again we'll touch on that when we

466
00:07:57,830 --> 00:07:57,840
and again we'll touch on that when we
 

467
00:07:57,840 --> 00:07:59,749
and again we'll touch on that when we
actually get to that part but just

468
00:07:59,749 --> 00:07:59,759
actually get to that part but just
 

469
00:07:59,759 --> 00:08:01,510
actually get to that part but just
understand at face value for now that's

470
00:08:01,510 --> 00:08:01,520
understand at face value for now that's
 

471
00:08:01,520 --> 00:08:02,950
understand at face value for now that's
basically what it does

472
00:08:02,950 --> 00:08:02,960
basically what it does
 

473
00:08:02,960 --> 00:08:04,629
basically what it does
so basically the way that it determines

474
00:08:04,629 --> 00:08:04,639
so basically the way that it determines
 

475
00:08:04,639 --> 00:08:07,270
so basically the way that it determines
color information is as i said before

476
00:08:07,270 --> 00:08:07,280
color information is as i said before
 

477
00:08:07,280 --> 00:08:10,629
color information is as i said before
where we have that vertex data it

478
00:08:10,629 --> 00:08:10,639
where we have that vertex data it
 

479
00:08:10,639 --> 00:08:13,749
where we have that vertex data it
interpolates from one vertex to the next

480
00:08:13,749 --> 00:08:13,759
interpolates from one vertex to the next
 

481
00:08:13,759 --> 00:08:16,070
interpolates from one vertex to the next
and in the color example it will

482
00:08:16,070 --> 00:08:16,080
and in the color example it will
 

483
00:08:16,080 --> 00:08:17,189
and in the color example it will
interpolate between

484
00:08:17,189 --> 00:08:17,199
interpolate between
 

485
00:08:17,199 --> 00:08:20,070
interpolate between
red and green finally we have the color

486
00:08:20,070 --> 00:08:20,080
red and green finally we have the color
 

487
00:08:20,080 --> 00:08:21,110
red and green finally we have the color
blending stage

488
00:08:21,110 --> 00:08:21,120
blending stage
 

489
00:08:21,120 --> 00:08:23,350
blending stage
and this applies various operations to

490
00:08:23,350 --> 00:08:23,360
and this applies various operations to
 

491
00:08:23,360 --> 00:08:24,950
and this applies various operations to
mix different fragments

492
00:08:24,950 --> 00:08:24,960
mix different fragments
 

493
00:08:24,960 --> 00:08:26,869
mix different fragments
that map to the same pixel in the frame

494
00:08:26,869 --> 00:08:26,879
that map to the same pixel in the frame
 

495
00:08:26,879 --> 00:08:28,390
that map to the same pixel in the frame
buffer

496
00:08:28,390 --> 00:08:28,400
buffer
 

497
00:08:28,400 --> 00:08:31,589
buffer
and what this basically means is we can

498
00:08:31,589 --> 00:08:31,599
and what this basically means is we can
 

499
00:08:31,599 --> 00:08:32,310
and what this basically means is we can
have

500
00:08:32,310 --> 00:08:32,320
have
 

501
00:08:32,320 --> 00:08:34,790
have
more than one frame buffer that gets

502
00:08:34,790 --> 00:08:34,800
more than one frame buffer that gets
 

503
00:08:34,800 --> 00:08:35,990
more than one frame buffer that gets
basically blended

504
00:08:35,990 --> 00:08:36,000
basically blended
 

505
00:08:36,000 --> 00:08:38,469
basically blended
together and this is essentially how

506
00:08:38,469 --> 00:08:38,479
together and this is essentially how
 

507
00:08:38,479 --> 00:08:40,949
together and this is essentially how
transparency for example is handled

508
00:08:40,949 --> 00:08:40,959
transparency for example is handled
 

509
00:08:40,959 --> 00:08:44,070
transparency for example is handled
where we would draw a transparent object

510
00:08:44,070 --> 00:08:44,080
where we would draw a transparent object
 

511
00:08:44,080 --> 00:08:46,790
where we would draw a transparent object
and then we would draw a non-transparent

512
00:08:46,790 --> 00:08:46,800
and then we would draw a non-transparent
 

513
00:08:46,800 --> 00:08:47,269
and then we would draw a non-transparent
object

514
00:08:47,269 --> 00:08:47,279
object
 

515
00:08:47,279 --> 00:08:49,110
object
behind that object and then blend the

516
00:08:49,110 --> 00:08:49,120
behind that object and then blend the
 

517
00:08:49,120 --> 00:08:50,389
behind that object and then blend the
two together

518
00:08:50,389 --> 00:08:50,399
two together
 

519
00:08:50,399 --> 00:08:52,389
two together
to actually get that final what the

520
00:08:52,389 --> 00:08:52,399
to actually get that final what the
 

521
00:08:52,399 --> 00:08:54,150
to actually get that final what the
final color of that particular

522
00:08:54,150 --> 00:08:54,160
final color of that particular
 

523
00:08:54,160 --> 00:08:57,110
final color of that particular
fragment or pixel should be and so this

524
00:08:57,110 --> 00:08:57,120
fragment or pixel should be and so this
 

525
00:08:57,120 --> 00:08:59,350
fragment or pixel should be and so this
color blending stage is the stage that

526
00:08:59,350 --> 00:08:59,360
color blending stage is the stage that
 

527
00:08:59,360 --> 00:08:59,910
color blending stage is the stage that
handles

528
00:08:59,910 --> 00:08:59,920
handles
 

529
00:08:59,920 --> 00:09:02,550
handles
that so if we don't have any

530
00:09:02,550 --> 00:09:02,560
that so if we don't have any
 

531
00:09:02,560 --> 00:09:04,310
that so if we don't have any
transparency obviously this is a pretty

532
00:09:04,310 --> 00:09:04,320
transparency obviously this is a pretty
 

533
00:09:04,320 --> 00:09:05,829
transparency obviously this is a pretty
straightforward step it just basically

534
00:09:05,829 --> 00:09:05,839
straightforward step it just basically
 

535
00:09:05,839 --> 00:09:07,590
straightforward step it just basically
outputs the same data

536
00:09:07,590 --> 00:09:07,600
outputs the same data
 

537
00:09:07,600 --> 00:09:10,070
outputs the same data
but i don't know of any game engine out

538
00:09:10,070 --> 00:09:10,080
but i don't know of any game engine out
 

539
00:09:10,080 --> 00:09:11,030
but i don't know of any game engine out
there that doesn't

540
00:09:11,030 --> 00:09:11,040
there that doesn't
 

541
00:09:11,040 --> 00:09:12,870
there that doesn't
have some sort of transparency so this

542
00:09:12,870 --> 00:09:12,880
have some sort of transparency so this
 

543
00:09:12,880 --> 00:09:14,550
have some sort of transparency so this
will definitely be something that

544
00:09:14,550 --> 00:09:14,560
will definitely be something that
 

545
00:09:14,560 --> 00:09:17,590
will definitely be something that
we will need to look into now you may be

546
00:09:17,590 --> 00:09:17,600
we will need to look into now you may be
 

547
00:09:17,600 --> 00:09:18,310
we will need to look into now you may be
asking

548
00:09:18,310 --> 00:09:18,320
asking
 

549
00:09:18,320 --> 00:09:20,550
asking
what the difference is between these

550
00:09:20,550 --> 00:09:20,560
what the difference is between these
 

551
00:09:20,560 --> 00:09:21,670
what the difference is between these
green colored

552
00:09:21,670 --> 00:09:21,680
green colored
 

553
00:09:21,680 --> 00:09:24,790
green colored
stages and the yellow colored stages

554
00:09:24,790 --> 00:09:24,800
stages and the yellow colored stages
 

555
00:09:24,800 --> 00:09:26,870
stages and the yellow colored stages
and that difference is simple the green

556
00:09:26,870 --> 00:09:26,880
and that difference is simple the green
 

557
00:09:26,880 --> 00:09:28,230
and that difference is simple the green
stages are basically

558
00:09:28,230 --> 00:09:28,240
stages are basically
 

559
00:09:28,240 --> 00:09:30,710
stages are basically
what is known as fixed function stages

560
00:09:30,710 --> 00:09:30,720
what is known as fixed function stages
 

561
00:09:30,720 --> 00:09:31,269
what is known as fixed function stages
they have

562
00:09:31,269 --> 00:09:31,279
they have
 

563
00:09:31,279 --> 00:09:33,430
they have
predetermined functionality the only

564
00:09:33,430 --> 00:09:33,440
predetermined functionality the only
 

565
00:09:33,440 --> 00:09:34,310
predetermined functionality the only
thing that we can do

566
00:09:34,310 --> 00:09:34,320
thing that we can do
 

567
00:09:34,320 --> 00:09:37,350
thing that we can do
is we can feed them some parameters but

568
00:09:37,350 --> 00:09:37,360
is we can feed them some parameters but
 

569
00:09:37,360 --> 00:09:39,829
is we can feed them some parameters but
otherwise how they work is predetermined

570
00:09:39,829 --> 00:09:39,839
otherwise how they work is predetermined
 

571
00:09:39,839 --> 00:09:41,590
otherwise how they work is predetermined
and not adjustable

572
00:09:41,590 --> 00:09:41,600
and not adjustable
 

573
00:09:41,600 --> 00:09:45,990
and not adjustable
the yellow stages are stages that

574
00:09:45,990 --> 00:09:46,000
the yellow stages are stages that
 

575
00:09:46,000 --> 00:09:48,310
the yellow stages are stages that
are programmable and what i mean by

576
00:09:48,310 --> 00:09:48,320
are programmable and what i mean by
 

577
00:09:48,320 --> 00:09:49,269
are programmable and what i mean by
programmable

578
00:09:49,269 --> 00:09:49,279
programmable
 

579
00:09:49,279 --> 00:09:51,509
programmable
is we pass little programs to the

580
00:09:51,509 --> 00:09:51,519
is we pass little programs to the
 

581
00:09:51,519 --> 00:09:53,350
is we pass little programs to the
graphics card for each one of these

582
00:09:53,350 --> 00:09:53,360
graphics card for each one of these
 

583
00:09:53,360 --> 00:09:56,150
graphics card for each one of these
stages here and those programs take an

584
00:09:56,150 --> 00:09:56,160
stages here and those programs take an
 

585
00:09:56,160 --> 00:09:56,870
stages here and those programs take an
input

586
00:09:56,870 --> 00:09:56,880
input
 

587
00:09:56,880 --> 00:10:00,389
input
and provide an output so for example

588
00:10:00,389 --> 00:10:00,399
and provide an output so for example
 

589
00:10:00,399 --> 00:10:02,790
and provide an output so for example
the fragment shader takes in data from

590
00:10:02,790 --> 00:10:02,800
the fragment shader takes in data from
 

591
00:10:02,800 --> 00:10:04,069
the fragment shader takes in data from
the rasterization stage

592
00:10:04,069 --> 00:10:04,079
the rasterization stage
 

593
00:10:04,079 --> 00:10:06,710
the rasterization stage
and outputs color information and the

594
00:10:06,710 --> 00:10:06,720
and outputs color information and the
 

595
00:10:06,720 --> 00:10:08,069
and outputs color information and the
way that this is done

596
00:10:08,069 --> 00:10:08,079
way that this is done
 

597
00:10:08,079 --> 00:10:11,269
way that this is done
is programmatic so we literally

598
00:10:11,269 --> 00:10:11,279
is programmatic so we literally
 

599
00:10:11,279 --> 00:10:14,550
is programmatic so we literally
write a program that gets handed to

600
00:10:14,550 --> 00:10:14,560
write a program that gets handed to
 

601
00:10:14,560 --> 00:10:18,150
write a program that gets handed to
this particular stage to execute and

602
00:10:18,150 --> 00:10:18,160
this particular stage to execute and
 

603
00:10:18,160 --> 00:10:20,870
this particular stage to execute and
these programs are called shaders now

604
00:10:20,870 --> 00:10:20,880
these programs are called shaders now
 

605
00:10:20,880 --> 00:10:21,509
these programs are called shaders now
you'll notice

606
00:10:21,509 --> 00:10:21,519
you'll notice
 

607
00:10:21,519 --> 00:10:24,710
you'll notice
on all of these yellow ones we have

608
00:10:24,710 --> 00:10:24,720
on all of these yellow ones we have
 

609
00:10:24,720 --> 00:10:26,150
on all of these yellow ones we have
actually called all of these shaders

610
00:10:26,150 --> 00:10:26,160
actually called all of these shaders
 

611
00:10:26,160 --> 00:10:27,590
actually called all of these shaders
except tessellation because

612
00:10:27,590 --> 00:10:27,600
except tessellation because
 

613
00:10:27,600 --> 00:10:29,829
except tessellation because
it was too big to fit here but this is

614
00:10:29,829 --> 00:10:29,839
it was too big to fit here but this is
 

615
00:10:29,839 --> 00:10:30,710
it was too big to fit here but this is
also a

616
00:10:30,710 --> 00:10:30,720
also a
 

617
00:10:30,720 --> 00:10:32,310
also a
shader that's available right so all of

618
00:10:32,310 --> 00:10:32,320
shader that's available right so all of
 

619
00:10:32,320 --> 00:10:33,750
shader that's available right so all of
these are programmable

620
00:10:33,750 --> 00:10:33,760
these are programmable
 

621
00:10:33,760 --> 00:10:37,509
these are programmable
via programs that are called shaders

622
00:10:37,509 --> 00:10:37,519
via programs that are called shaders
 

623
00:10:37,519 --> 00:10:40,230
via programs that are called shaders
okay and ultimately this gets output to

624
00:10:40,230 --> 00:10:40,240
okay and ultimately this gets output to
 

625
00:10:40,240 --> 00:10:41,190
okay and ultimately this gets output to
a frame buffer

626
00:10:41,190 --> 00:10:41,200
a frame buffer
 

627
00:10:41,200 --> 00:10:44,150
a frame buffer
which then at some point will get output

628
00:10:44,150 --> 00:10:44,160
which then at some point will get output
 

629
00:10:44,160 --> 00:10:44,949
which then at some point will get output
either to

630
00:10:44,949 --> 00:10:44,959
either to
 

631
00:10:44,959 --> 00:10:47,269
either to
the screen or be used somewhere else in

632
00:10:47,269 --> 00:10:47,279
the screen or be used somewhere else in
 

633
00:10:47,279 --> 00:10:48,069
the screen or be used somewhere else in
the scene

634
00:10:48,069 --> 00:10:48,079
the scene
 

635
00:10:48,079 --> 00:10:50,069
the scene
as a rendered texture like for a camera

636
00:10:50,069 --> 00:10:50,079
as a rendered texture like for a camera
 

637
00:10:50,079 --> 00:10:51,590
as a rendered texture like for a camera
something like that

638
00:10:51,590 --> 00:10:51,600
something like that
 

639
00:10:51,600 --> 00:10:54,550
something like that
and that is basically the overall

640
00:10:54,550 --> 00:10:54,560
and that is basically the overall
 

641
00:10:54,560 --> 00:10:56,230
and that is basically the overall
graphics pipeline

642
00:10:56,230 --> 00:10:56,240
graphics pipeline
 

643
00:10:56,240 --> 00:10:59,350
graphics pipeline
stage from beginning to end

644
00:10:59,350 --> 00:10:59,360
stage from beginning to end
 

645
00:10:59,360 --> 00:11:01,509
stage from beginning to end
there are other pipeline stages

646
00:11:01,509 --> 00:11:01,519
there are other pipeline stages
 

647
00:11:01,519 --> 00:11:04,069
there are other pipeline stages
available that i haven't covered yet

648
00:11:04,069 --> 00:11:04,079
available that i haven't covered yet
 

649
00:11:04,079 --> 00:11:07,509
available that i haven't covered yet
there is a a compute pipeline but that's

650
00:11:07,509 --> 00:11:07,519
there is a a compute pipeline but that's
 

651
00:11:07,519 --> 00:11:09,269
there is a a compute pipeline but that's
not something i'm going to cover here

652
00:11:09,269 --> 00:11:09,279
not something i'm going to cover here
 

653
00:11:09,279 --> 00:11:11,509
not something i'm going to cover here
we'll cover that later in the series if

654
00:11:11,509 --> 00:11:11,519
we'll cover that later in the series if
 

655
00:11:11,519 --> 00:11:12,829
we'll cover that later in the series if
and when we need it

656
00:11:12,829 --> 00:11:12,839
and when we need it
 

657
00:11:12,839 --> 00:11:16,150
and when we need it
okay so i mentioned shaders

658
00:11:16,150 --> 00:11:16,160
okay so i mentioned shaders
 

659
00:11:16,160 --> 00:11:19,030
okay so i mentioned shaders
but vulcan actually doesn't use shaders

660
00:11:19,030 --> 00:11:19,040
but vulcan actually doesn't use shaders
 

661
00:11:19,040 --> 00:11:19,750
but vulcan actually doesn't use shaders
per se

662
00:11:19,750 --> 00:11:19,760
per se
 

663
00:11:19,760 --> 00:11:22,389
per se
it uses something called shader modules

664
00:11:22,389 --> 00:11:22,399
it uses something called shader modules
 

665
00:11:22,399 --> 00:11:24,389
it uses something called shader modules
so there is a shader module for each

666
00:11:24,389 --> 00:11:24,399
so there is a shader module for each
 

667
00:11:24,399 --> 00:11:25,509
so there is a shader module for each
individual

668
00:11:25,509 --> 00:11:25,519
individual
 

669
00:11:25,519 --> 00:11:27,430
individual
stage as i mentioned before so there's

670
00:11:27,430 --> 00:11:27,440
stage as i mentioned before so there's
 

671
00:11:27,440 --> 00:11:28,870
stage as i mentioned before so there's
fragment

672
00:11:28,870 --> 00:11:28,880
fragment
 

673
00:11:28,880 --> 00:11:31,910
fragment
there is vertex tessellation geometry

674
00:11:31,910 --> 00:11:31,920
there is vertex tessellation geometry
 

675
00:11:31,920 --> 00:11:33,750
there is vertex tessellation geometry
etc

676
00:11:33,750 --> 00:11:33,760
etc
 

677
00:11:33,760 --> 00:11:36,470
etc
and the shader module is actually the

678
00:11:36,470 --> 00:11:36,480
and the shader module is actually the
 

679
00:11:36,480 --> 00:11:37,350
and the shader module is actually the
compiled

680
00:11:37,350 --> 00:11:37,360
compiled
 

681
00:11:37,360 --> 00:11:40,790
compiled
program that is fed to the graphics card

682
00:11:40,790 --> 00:11:40,800
program that is fed to the graphics card
 

683
00:11:40,800 --> 00:11:43,829
program that is fed to the graphics card
now i said compiled program what exactly

684
00:11:43,829 --> 00:11:43,839
now i said compiled program what exactly
 

685
00:11:43,839 --> 00:11:45,190
now i said compiled program what exactly
does this mean

686
00:11:45,190 --> 00:11:45,200
does this mean
 

687
00:11:45,200 --> 00:11:47,190
does this mean
so basically the inde there are two

688
00:11:47,190 --> 00:11:47,200
so basically the inde there are two
 

689
00:11:47,200 --> 00:11:48,790
so basically the inde there are two
industry standard

690
00:11:48,790 --> 00:11:48,800
industry standard
 

691
00:11:48,800 --> 00:11:50,470
industry standard
shading languages and and there are

692
00:11:50,470 --> 00:11:50,480
shading languages and and there are
 

693
00:11:50,480 --> 00:11:51,910
shading languages and and there are
technically more than this but these are

694
00:11:51,910 --> 00:11:51,920
technically more than this but these are
 

695
00:11:51,920 --> 00:11:53,590
technically more than this but these are
the two major ones

696
00:11:53,590 --> 00:11:53,600
the two major ones
 

697
00:11:53,600 --> 00:11:55,910
the two major ones
there are two languages known as glsl

698
00:11:55,910 --> 00:11:55,920
there are two languages known as glsl
 

699
00:11:55,920 --> 00:11:57,110
there are two languages known as glsl
which is gl

700
00:11:57,110 --> 00:11:57,120
which is gl
 

701
00:11:57,120 --> 00:12:00,470
which is gl
shading language and hlsl which is

702
00:12:00,470 --> 00:12:00,480
shading language and hlsl which is
 

703
00:12:00,480 --> 00:12:03,350
shading language and hlsl which is
high level shading language glsl as you

704
00:12:03,350 --> 00:12:03,360
high level shading language glsl as you
 

705
00:12:03,360 --> 00:12:05,269
high level shading language glsl as you
might have guessed is used with opengl

706
00:12:05,269 --> 00:12:05,279
might have guessed is used with opengl
 

707
00:12:05,279 --> 00:12:08,790
might have guessed is used with opengl
and hlsl is used with directx

708
00:12:08,790 --> 00:12:08,800
and hlsl is used with directx
 

709
00:12:08,800 --> 00:12:12,150
and hlsl is used with directx
so ultimately they are two very similar

710
00:12:12,150 --> 00:12:12,160
so ultimately they are two very similar
 

711
00:12:12,160 --> 00:12:14,069
so ultimately they are two very similar
languages but different

712
00:12:14,069 --> 00:12:14,079
languages but different
 

713
00:12:14,079 --> 00:12:17,750
languages but different
and they perform very similar tasks

714
00:12:17,750 --> 00:12:17,760
and they perform very similar tasks
 

715
00:12:17,760 --> 00:12:20,949
and they perform very similar tasks
and ultimately get fed in through the

716
00:12:20,949 --> 00:12:20,959
and ultimately get fed in through the
 

717
00:12:20,959 --> 00:12:23,670
and ultimately get fed in through the
appropriate graphics api to the graphics

718
00:12:23,670 --> 00:12:23,680
appropriate graphics api to the graphics
 

719
00:12:23,680 --> 00:12:25,509
appropriate graphics api to the graphics
card driver which then hands them off

720
00:12:25,509 --> 00:12:25,519
card driver which then hands them off
 

721
00:12:25,519 --> 00:12:28,150
card driver which then hands them off
to be processed by the actual gpu i'm

722
00:12:28,150 --> 00:12:28,160
to be processed by the actual gpu i'm
 

723
00:12:28,160 --> 00:12:29,430
to be processed by the actual gpu i'm
not going to go into the differences

724
00:12:29,430 --> 00:12:29,440
not going to go into the differences
 

725
00:12:29,440 --> 00:12:30,389
not going to go into the differences
between these two

726
00:12:30,389 --> 00:12:30,399
between these two
 

727
00:12:30,399 --> 00:12:32,230
between these two
just know that we can technically use

728
00:12:32,230 --> 00:12:32,240
just know that we can technically use
 

729
00:12:32,240 --> 00:12:33,430
just know that we can technically use
either one

730
00:12:33,430 --> 00:12:33,440
either one
 

731
00:12:33,440 --> 00:12:35,509
either one
for any of you that have used opengl

732
00:12:35,509 --> 00:12:35,519
for any of you that have used opengl
 

733
00:12:35,519 --> 00:12:36,949
for any of you that have used opengl
typically the way that this works

734
00:12:36,949 --> 00:12:36,959
typically the way that this works
 

735
00:12:36,959 --> 00:12:40,310
typically the way that this works
is you have a file that you read in

736
00:12:40,310 --> 00:12:40,320
is you have a file that you read in
 

737
00:12:40,320 --> 00:12:43,509
is you have a file that you read in
that contains your glsl code

738
00:12:43,509 --> 00:12:43,519
that contains your glsl code
 

739
00:12:43,519 --> 00:12:46,710
that contains your glsl code
and then you just compile that during

740
00:12:46,710 --> 00:12:46,720
and then you just compile that during
 

741
00:12:46,720 --> 00:12:47,910
and then you just compile that during
runtime and

742
00:12:47,910 --> 00:12:47,920
runtime and
 

743
00:12:47,920 --> 00:12:51,269
runtime and
feed it to the opengl api

744
00:12:51,269 --> 00:12:51,279
feed it to the opengl api
 

745
00:12:51,279 --> 00:12:53,750
feed it to the opengl api
during runtime vulkan does not work this

746
00:12:53,750 --> 00:12:53,760
during runtime vulkan does not work this
 

747
00:12:53,760 --> 00:12:55,350
during runtime vulkan does not work this
way vulcan handles this a little bit

748
00:12:55,350 --> 00:12:55,360
way vulcan handles this a little bit
 

749
00:12:55,360 --> 00:12:56,710
way vulcan handles this a little bit
differently

750
00:12:56,710 --> 00:12:56,720
differently
 

751
00:12:56,720 --> 00:12:58,550
differently
so as you can see here i've got this

752
00:12:58,550 --> 00:12:58,560
so as you can see here i've got this
 

753
00:12:58,560 --> 00:13:00,150
so as you can see here i've got this
third thing at the bottom called

754
00:13:00,150 --> 00:13:00,160
third thing at the bottom called
 

755
00:13:00,160 --> 00:13:03,670
third thing at the bottom called
spur v so basically spur is an industry

756
00:13:03,670 --> 00:13:03,680
spur v so basically spur is an industry
 

757
00:13:03,680 --> 00:13:05,590
spur v so basically spur is an industry
open standard intermediate language

758
00:13:05,590 --> 00:13:05,600
open standard intermediate language
 

759
00:13:05,600 --> 00:13:08,069
open standard intermediate language
right it actually stands for standard

760
00:13:08,069 --> 00:13:08,079
right it actually stands for standard
 

761
00:13:08,079 --> 00:13:08,710
right it actually stands for standard
portable

762
00:13:08,710 --> 00:13:08,720
portable
 

763
00:13:08,720 --> 00:13:11,509
portable
intermediate representation and what

764
00:13:11,509 --> 00:13:11,519
intermediate representation and what
 

765
00:13:11,519 --> 00:13:12,629
intermediate representation and what
this basically is

766
00:13:12,629 --> 00:13:12,639
this basically is
 

767
00:13:12,639 --> 00:13:14,389
this basically is
is it's byte code similar to what you

768
00:13:14,389 --> 00:13:14,399
is it's byte code similar to what you
 

769
00:13:14,399 --> 00:13:15,750
is it's byte code similar to what you
might get from

770
00:13:15,750 --> 00:13:15,760
might get from
 

771
00:13:15,760 --> 00:13:17,750
might get from
java or c sharp or one of those types of

772
00:13:17,750 --> 00:13:17,760
java or c sharp or one of those types of
 

773
00:13:17,760 --> 00:13:19,110
java or c sharp or one of those types of
languages

774
00:13:19,110 --> 00:13:19,120
languages
 

775
00:13:19,120 --> 00:13:21,509
languages
where you compile it ahead of time and

776
00:13:21,509 --> 00:13:21,519
where you compile it ahead of time and
 

777
00:13:21,519 --> 00:13:23,269
where you compile it ahead of time and
then that same byte code

778
00:13:23,269 --> 00:13:23,279
then that same byte code
 

779
00:13:23,279 --> 00:13:26,310
then that same byte code
is fed into the driver no matter what

780
00:13:26,310 --> 00:13:26,320
is fed into the driver no matter what
 

781
00:13:26,320 --> 00:13:27,750
is fed into the driver no matter what
platform you're on so you don't have to

782
00:13:27,750 --> 00:13:27,760
platform you're on so you don't have to
 

783
00:13:27,760 --> 00:13:29,030
platform you're on so you don't have to
worry about

784
00:13:29,030 --> 00:13:29,040
worry about
 

785
00:13:29,040 --> 00:13:31,990
worry about
platform specific things in terms of how

786
00:13:31,990 --> 00:13:32,000
platform specific things in terms of how
 

787
00:13:32,000 --> 00:13:33,509
platform specific things in terms of how
that data gets read in you don't have to

788
00:13:33,509 --> 00:13:33,519
that data gets read in you don't have to
 

789
00:13:33,519 --> 00:13:33,990
that data gets read in you don't have to
worry about

790
00:13:33,990 --> 00:13:34,000
worry about
 

791
00:13:34,000 --> 00:13:36,870
worry about
bigger little endian any of that stuff

792
00:13:36,870 --> 00:13:36,880
bigger little endian any of that stuff
 

793
00:13:36,880 --> 00:13:37,910
bigger little endian any of that stuff
you

794
00:13:37,910 --> 00:13:37,920
you
 

795
00:13:37,920 --> 00:13:42,069
you
basically compile either glsl or hlsl

796
00:13:42,069 --> 00:13:42,079
basically compile either glsl or hlsl
 

797
00:13:42,079 --> 00:13:44,550
basically compile either glsl or hlsl
through a program that outputs spur v

798
00:13:44,550 --> 00:13:44,560
through a program that outputs spur v
 

799
00:13:44,560 --> 00:13:46,069
through a program that outputs spur v
and we are actually going to

800
00:13:46,069 --> 00:13:46,079
and we are actually going to
 

801
00:13:46,079 --> 00:13:49,110
and we are actually going to
get into what that program is and how to

802
00:13:49,110 --> 00:13:49,120
get into what that program is and how to
 

803
00:13:49,120 --> 00:13:51,829
get into what that program is and how to
set that up in a moment but it doesn't

804
00:13:51,829 --> 00:13:51,839
set that up in a moment but it doesn't
 

805
00:13:51,839 --> 00:13:52,230
set that up in a moment but it doesn't
matter

806
00:13:52,230 --> 00:13:52,240
matter
 

807
00:13:52,240 --> 00:13:56,629
matter
whether you use glsl or hlsl ultimately

808
00:13:56,629 --> 00:13:56,639
whether you use glsl or hlsl ultimately
 

809
00:13:56,639 --> 00:13:58,310
whether you use glsl or hlsl ultimately
either one of those will get compiled

810
00:13:58,310 --> 00:13:58,320
either one of those will get compiled
 

811
00:13:58,320 --> 00:13:59,990
either one of those will get compiled
into spurvi which

812
00:13:59,990 --> 00:14:00,000
into spurvi which
 

813
00:14:00,000 --> 00:14:02,629
into spurvi which
is what we are actually going to read in

814
00:14:02,629 --> 00:14:02,639
is what we are actually going to read in
 

815
00:14:02,639 --> 00:14:03,430
is what we are actually going to read in
our engine

816
00:14:03,430 --> 00:14:03,440
our engine
 

817
00:14:03,440 --> 00:14:05,350
our engine
with all of that said we are actually

818
00:14:05,350 --> 00:14:05,360
with all of that said we are actually
 

819
00:14:05,360 --> 00:14:07,269
with all of that said we are actually
going to be utilizing glsl

820
00:14:07,269 --> 00:14:07,279
going to be utilizing glsl
 

821
00:14:07,279 --> 00:14:08,790
going to be utilizing glsl
in this series because it's most what

822
00:14:08,790 --> 00:14:08,800
in this series because it's most what
 

823
00:14:08,800 --> 00:14:10,790
in this series because it's most what
i'm it's what i'm most familiar with but

824
00:14:10,790 --> 00:14:10,800
i'm it's what i'm most familiar with but
 

825
00:14:10,800 --> 00:14:12,710
i'm it's what i'm most familiar with but
if you guys are more familiar with hlsl

826
00:14:12,710 --> 00:14:12,720
if you guys are more familiar with hlsl
 

827
00:14:12,720 --> 00:14:15,030
if you guys are more familiar with hlsl
you can certainly do that as well

828
00:14:15,030 --> 00:14:15,040
you can certainly do that as well
 

829
00:14:15,040 --> 00:14:18,069
you can certainly do that as well
okay so now for a little bit more

830
00:14:18,069 --> 00:14:18,079
okay so now for a little bit more
 

831
00:14:18,079 --> 00:14:21,350
okay so now for a little bit more
detail so the vertex shader converts

832
00:14:21,350 --> 00:14:21,360
detail so the vertex shader converts
 

833
00:14:21,360 --> 00:14:23,910
detail so the vertex shader converts
each incoming vertex to clip or frame

834
00:14:23,910 --> 00:14:23,920
each incoming vertex to clip or frame
 

835
00:14:23,920 --> 00:14:25,350
each incoming vertex to clip or frame
buffer coordinates

836
00:14:25,350 --> 00:14:25,360
buffer coordinates
 

837
00:14:25,360 --> 00:14:26,710
buffer coordinates
and you can see that i've got that down

838
00:14:26,710 --> 00:14:26,720
and you can see that i've got that down
 

839
00:14:26,720 --> 00:14:28,710
and you can see that i've got that down
here so what this might look like in a

840
00:14:28,710 --> 00:14:28,720
here so what this might look like in a
 

841
00:14:28,720 --> 00:14:30,470
here so what this might look like in a
typical scenario if we're not rendering

842
00:14:30,470 --> 00:14:30,480
typical scenario if we're not rendering
 

843
00:14:30,480 --> 00:14:31,750
typical scenario if we're not rendering
to a texture or something like that

844
00:14:31,750 --> 00:14:31,760
to a texture or something like that
 

845
00:14:31,760 --> 00:14:32,949
to a texture or something like that
let's say we're just

846
00:14:32,949 --> 00:14:32,959
let's say we're just
 

847
00:14:32,959 --> 00:14:34,470
let's say we're just
we're rendering essentially to the

848
00:14:34,470 --> 00:14:34,480
we're rendering essentially to the
 

849
00:14:34,480 --> 00:14:36,550
we're rendering essentially to the
screen quote unquote

850
00:14:36,550 --> 00:14:36,560
screen quote unquote
 

851
00:14:36,560 --> 00:14:38,389
screen quote unquote
we will have a frame buffer that is the

852
00:14:38,389 --> 00:14:38,399
we will have a frame buffer that is the
 

853
00:14:38,399 --> 00:14:40,470
we will have a frame buffer that is the
resolution of the screen in this case

854
00:14:40,470 --> 00:14:40,480
resolution of the screen in this case
 

855
00:14:40,480 --> 00:14:43,189
resolution of the screen in this case
it's 1080p right

856
00:14:43,189 --> 00:14:43,199
it's 1080p right
 

857
00:14:43,199 --> 00:14:46,310
it's 1080p right
by 1080 and so our frame buffer

858
00:14:46,310 --> 00:14:46,320
by 1080 and so our frame buffer
 

859
00:14:46,320 --> 00:14:48,389
by 1080 and so our frame buffer
coordinates is

860
00:14:48,389 --> 00:14:48,399
coordinates is
 

861
00:14:48,399 --> 00:14:50,150
coordinates is
essentially the size of what that

862
00:14:50,150 --> 00:14:50,160
essentially the size of what that
 

863
00:14:50,160 --> 00:14:51,430
essentially the size of what that
texture is that we're going to write out

864
00:14:51,430 --> 00:14:51,440
texture is that we're going to write out
 

865
00:14:51,440 --> 00:14:51,750
texture is that we're going to write out
to

866
00:14:51,750 --> 00:14:51,760
to
 

867
00:14:51,760 --> 00:14:54,949
to
right and so the vertex shader takes

868
00:14:54,949 --> 00:14:54,959
right and so the vertex shader takes
 

869
00:14:54,959 --> 00:14:57,110
right and so the vertex shader takes
those three-dimensional or

870
00:14:57,110 --> 00:14:57,120
those three-dimensional or
 

871
00:14:57,120 --> 00:14:58,389
those three-dimensional or
two-dimensional

872
00:14:58,389 --> 00:14:58,399
two-dimensional
 

873
00:14:58,399 --> 00:15:02,230
two-dimensional
vertex pieces and

874
00:15:02,230 --> 00:15:02,240
vertex pieces and
 

875
00:15:02,240 --> 00:15:04,470
vertex pieces and
converts them into frame buffer

876
00:15:04,470 --> 00:15:04,480
converts them into frame buffer
 

877
00:15:04,480 --> 00:15:05,829
converts them into frame buffer
coordinates so basically

878
00:15:05,829 --> 00:15:05,839
coordinates so basically
 

879
00:15:05,839 --> 00:15:08,310
coordinates so basically
essentially flattens them via our

880
00:15:08,310 --> 00:15:08,320
essentially flattens them via our
 

881
00:15:08,320 --> 00:15:10,310
essentially flattens them via our
transformations that we provide

882
00:15:10,310 --> 00:15:10,320
transformations that we provide
 

883
00:15:10,320 --> 00:15:12,710
transformations that we provide
in our matrices and we're going to see

884
00:15:12,710 --> 00:15:12,720
in our matrices and we're going to see
 

885
00:15:12,720 --> 00:15:13,990
in our matrices and we're going to see
all these things come together

886
00:15:13,990 --> 00:15:14,000
all these things come together
 

887
00:15:14,000 --> 00:15:15,670
all these things come together
eventually but i just i'm sort of

888
00:15:15,670 --> 00:15:15,680
eventually but i just i'm sort of
 

889
00:15:15,680 --> 00:15:17,189
eventually but i just i'm sort of
wanting to give the high level

890
00:15:17,189 --> 00:15:17,199
wanting to give the high level
 

891
00:15:17,199 --> 00:15:20,069
wanting to give the high level
of this now by the time this is all

892
00:15:20,069 --> 00:15:20,079
of this now by the time this is all
 

893
00:15:20,079 --> 00:15:20,710
of this now by the time this is all
output

894
00:15:20,710 --> 00:15:20,720
output
 

895
00:15:20,720 --> 00:15:22,150
output
it is output to something called

896
00:15:22,150 --> 00:15:22,160
it is output to something called
 

897
00:15:22,160 --> 00:15:23,750
it is output to something called
normalized device coordinates which is

898
00:15:23,750 --> 00:15:23,760
normalized device coordinates which is
 

899
00:15:23,760 --> 00:15:25,750
normalized device coordinates which is
what the actual graphics card driver

900
00:15:25,750 --> 00:15:25,760
what the actual graphics card driver
 

901
00:15:25,760 --> 00:15:27,670
what the actual graphics card driver
and graphics card itself knows how to

902
00:15:27,670 --> 00:15:27,680
and graphics card itself knows how to
 

903
00:15:27,680 --> 00:15:29,829
and graphics card itself knows how to
deal with and that is typically a

904
00:15:29,829 --> 00:15:29,839
deal with and that is typically a
 

905
00:15:29,839 --> 00:15:30,710
deal with and that is typically a
negative one

906
00:15:30,710 --> 00:15:30,720
negative one
 

907
00:15:30,720 --> 00:15:33,509
negative one
to one range where zero zero is in the

908
00:15:33,509 --> 00:15:33,519
to one range where zero zero is in the
 

909
00:15:33,519 --> 00:15:34,790
to one range where zero zero is in the
center of the screen

910
00:15:34,790 --> 00:15:34,800
center of the screen
 

911
00:15:34,800 --> 00:15:36,629
center of the screen
so just understand that there are

912
00:15:36,629 --> 00:15:36,639
so just understand that there are
 

913
00:15:36,639 --> 00:15:37,910
so just understand that there are
certain cases where we

914
00:15:37,910 --> 00:15:37,920
certain cases where we
 

915
00:15:37,920 --> 00:15:39,749
certain cases where we
we will be working in frame buffer

916
00:15:39,749 --> 00:15:39,759
we will be working in frame buffer
 

917
00:15:39,759 --> 00:15:40,949
we will be working in frame buffer
coordinates and there will be certain

918
00:15:40,949 --> 00:15:40,959
coordinates and there will be certain
 

919
00:15:40,959 --> 00:15:42,629
coordinates and there will be certain
cases where we're working in

920
00:15:42,629 --> 00:15:42,639
cases where we're working in
 

921
00:15:42,639 --> 00:15:44,150
cases where we're working in
normalized device coordinates so

922
00:15:44,150 --> 00:15:44,160
normalized device coordinates so
 

923
00:15:44,160 --> 00:15:45,509
normalized device coordinates so
remember that there is a difference

924
00:15:45,509 --> 00:15:45,519
remember that there is a difference
 

925
00:15:45,519 --> 00:15:46,710
remember that there is a difference
between those two

926
00:15:46,710 --> 00:15:46,720
between those two
 

927
00:15:46,720 --> 00:15:48,230
between those two
i will cover that difference again when

928
00:15:48,230 --> 00:15:48,240
i will cover that difference again when
 

929
00:15:48,240 --> 00:15:50,069
i will cover that difference again when
we get there just wanted to point that

930
00:15:50,069 --> 00:15:50,079
we get there just wanted to point that
 

931
00:15:50,079 --> 00:15:51,110
we get there just wanted to point that
out for now

932
00:15:51,110 --> 00:15:51,120
out for now
 

933
00:15:51,120 --> 00:15:52,790
out for now
so as i mentioned before the fragment

934
00:15:52,790 --> 00:15:52,800
so as i mentioned before the fragment
 

935
00:15:52,800 --> 00:15:54,550
so as i mentioned before the fragment
shader interpolates between

936
00:15:54,550 --> 00:15:54,560
shader interpolates between
 

937
00:15:54,560 --> 00:15:56,790
shader interpolates between
vertices using past data so that could

938
00:15:56,790 --> 00:15:56,800
vertices using past data so that could
 

939
00:15:56,800 --> 00:15:59,990
vertices using past data so that could
be things like color or texture

940
00:15:59,990 --> 00:16:00,000
be things like color or texture
 

941
00:16:00,000 --> 00:16:02,310
be things like color or texture
and then outputs color and depth data to

942
00:16:02,310 --> 00:16:02,320
and then outputs color and depth data to
 

943
00:16:02,320 --> 00:16:04,069
and then outputs color and depth data to
one or more frame buffers

944
00:16:04,069 --> 00:16:04,079
one or more frame buffers
 

945
00:16:04,079 --> 00:16:07,110
one or more frame buffers
okay so with all that explanation in

946
00:16:07,110 --> 00:16:07,120
okay so with all that explanation in
 

947
00:16:07,120 --> 00:16:08,230
okay so with all that explanation in
mind

948
00:16:08,230 --> 00:16:08,240
mind
 

949
00:16:08,240 --> 00:16:09,910
mind
there are a couple of things that i want

950
00:16:09,910 --> 00:16:09,920
there are a couple of things that i want
 

951
00:16:09,920 --> 00:16:11,590
there are a couple of things that i want
to do in this video before we actually

952
00:16:11,590 --> 00:16:11,600
to do in this video before we actually
 

953
00:16:11,600 --> 00:16:12,150
to do in this video before we actually
kick off

954
00:16:12,150 --> 00:16:12,160
kick off
 

955
00:16:12,160 --> 00:16:15,670
kick off
the development of our pipeline and

956
00:16:15,670 --> 00:16:15,680
the development of our pipeline and
 

957
00:16:15,680 --> 00:16:18,550
the development of our pipeline and
these are just a couple of small things

958
00:16:18,550 --> 00:16:18,560
these are just a couple of small things
 

959
00:16:18,560 --> 00:16:19,829
these are just a couple of small things
in terms of tooling

960
00:16:19,829 --> 00:16:19,839
in terms of tooling
 

961
00:16:19,839 --> 00:16:21,350
in terms of tooling
that i want to set up now so that we

962
00:16:21,350 --> 00:16:21,360
that i want to set up now so that we
 

963
00:16:21,360 --> 00:16:23,189
that i want to set up now so that we
don't have to worry about this in the

964
00:16:23,189 --> 00:16:23,199
don't have to worry about this in the
 

965
00:16:23,199 --> 00:16:24,470
don't have to worry about this in the
future

966
00:16:24,470 --> 00:16:24,480
future
 

967
00:16:24,480 --> 00:16:27,430
future
so when i mentioned spur v there is

968
00:16:27,430 --> 00:16:27,440
so when i mentioned spur v there is
 

969
00:16:27,440 --> 00:16:28,470
so when i mentioned spur v there is
actually a

970
00:16:28,470 --> 00:16:28,480
actually a
 

971
00:16:28,480 --> 00:16:32,230
actually a
program that compiles that for us that

972
00:16:32,230 --> 00:16:32,240
program that compiles that for us that
 

973
00:16:32,240 --> 00:16:33,829
program that compiles that for us that
vulcan provides with

974
00:16:33,829 --> 00:16:33,839
vulcan provides with
 

975
00:16:33,839 --> 00:16:38,790
vulcan provides with
the sdk

976
00:16:38,790 --> 00:16:38,800

 

977
00:16:38,800 --> 00:16:42,150

so if we change directory to the vulcan

978
00:16:42,150 --> 00:16:42,160
so if we change directory to the vulcan
 

979
00:16:42,160 --> 00:16:44,069
so if we change directory to the vulcan
sdk directory

980
00:16:44,069 --> 00:16:44,079
sdk directory
 

981
00:16:44,079 --> 00:16:47,030
sdk directory
right and we have a look in there there

982
00:16:47,030 --> 00:16:47,040
right and we have a look in there there
 

983
00:16:47,040 --> 00:16:47,990
right and we have a look in there there
is a bin

984
00:16:47,990 --> 00:16:48,000
is a bin
 

985
00:16:48,000 --> 00:16:49,829
is a bin
folder so if we change directory into

986
00:16:49,829 --> 00:16:49,839
folder so if we change directory into
 

987
00:16:49,839 --> 00:16:52,790
folder so if we change directory into
that bin folder

988
00:16:52,790 --> 00:16:52,800
that bin folder
 

989
00:16:52,800 --> 00:16:57,990
that bin folder
and we list that out

990
00:16:57,990 --> 00:16:58,000
and we list that out
 

991
00:16:58,000 --> 00:17:01,590
and we list that out
we have a glslc exe

992
00:17:01,590 --> 00:17:01,600
we have a glslc exe
 

993
00:17:01,600 --> 00:17:03,829
we have a glslc exe
right here and this is actually the

994
00:17:03,829 --> 00:17:03,839
right here and this is actually the
 

995
00:17:03,839 --> 00:17:05,909
right here and this is actually the
program that we want to call

996
00:17:05,909 --> 00:17:05,919
program that we want to call
 

997
00:17:05,919 --> 00:17:09,270
program that we want to call
to compile our shader code and this will

998
00:17:09,270 --> 00:17:09,280
to compile our shader code and this will
 

999
00:17:09,280 --> 00:17:10,150
to compile our shader code and this will
be used with

1000
00:17:10,150 --> 00:17:10,160
be used with
 

1001
00:17:10,160 --> 00:17:12,630
be used with
our shader modules that i talked about

1002
00:17:12,630 --> 00:17:12,640
our shader modules that i talked about
 

1003
00:17:12,640 --> 00:17:13,909
our shader modules that i talked about
earlier

1004
00:17:13,909 --> 00:17:13,919
earlier
 

1005
00:17:13,919 --> 00:17:16,789
earlier
and so i want to sort of get a pipeline

1006
00:17:16,789 --> 00:17:16,799
and so i want to sort of get a pipeline
 

1007
00:17:16,799 --> 00:17:17,990
and so i want to sort of get a pipeline
set setup

1008
00:17:17,990 --> 00:17:18,000
set setup
 

1009
00:17:18,000 --> 00:17:19,909
set setup
to call this with the necessary

1010
00:17:19,909 --> 00:17:19,919
to call this with the necessary
 

1011
00:17:19,919 --> 00:17:21,110
to call this with the necessary
parameters

1012
00:17:21,110 --> 00:17:21,120
parameters
 

1013
00:17:21,120 --> 00:17:23,029
parameters
so that we can go ahead and reference

1014
00:17:23,029 --> 00:17:23,039
so that we can go ahead and reference
 

1015
00:17:23,039 --> 00:17:24,390
so that we can go ahead and reference
this when needed and we don't have to

1016
00:17:24,390 --> 00:17:24,400
this when needed and we don't have to
 

1017
00:17:24,400 --> 00:17:26,549
this when needed and we don't have to
come back and worry about it later

1018
00:17:26,549 --> 00:17:26,559
come back and worry about it later
 

1019
00:17:26,559 --> 00:17:28,470
come back and worry about it later
so what i'm going to be setting up is

1020
00:17:28,470 --> 00:17:28,480
so what i'm going to be setting up is
 

1021
00:17:28,480 --> 00:17:29,830
so what i'm going to be setting up is
something that i'm going to call

1022
00:17:29,830 --> 00:17:29,840
something that i'm going to call
 

1023
00:17:29,840 --> 00:17:32,870
something that i'm going to call
the post build process and i'm actually

1024
00:17:32,870 --> 00:17:32,880
the post build process and i'm actually
 

1025
00:17:32,880 --> 00:17:34,789
the post build process and i'm actually
going to set this up for both windows

1026
00:17:34,789 --> 00:17:34,799
going to set this up for both windows
 

1027
00:17:34,799 --> 00:17:38,310
going to set this up for both windows
and linux at the same time so to do this

1028
00:17:38,310 --> 00:17:38,320
and linux at the same time so to do this
 

1029
00:17:38,320 --> 00:17:39,750
and linux at the same time so to do this
i'm going to go ahead and right click

1030
00:17:39,750 --> 00:17:39,760
i'm going to go ahead and right click
 

1031
00:17:39,760 --> 00:17:42,070
i'm going to go ahead and right click
here and create a new file

1032
00:17:42,070 --> 00:17:42,080
here and create a new file
 

1033
00:17:42,080 --> 00:17:44,950
here and create a new file
and i'm going to call that postbuild.bat

1034
00:17:44,950 --> 00:17:44,960
and i'm going to call that postbuild.bat
 

1035
00:17:44,960 --> 00:17:45,430
and i'm going to call that postbuild.bat
and

1036
00:17:45,430 --> 00:17:45,440
and
 

1037
00:17:45,440 --> 00:17:47,029
and
what this is basically going to do is

1038
00:17:47,029 --> 00:17:47,039
what this is basically going to do is
 

1039
00:17:47,039 --> 00:17:49,110
what this is basically going to do is
it's going to do two things for us it's

1040
00:17:49,110 --> 00:17:49,120
it's going to do two things for us it's
 

1041
00:17:49,120 --> 00:17:50,710
it's going to do two things for us it's
going to compile our shaders

1042
00:17:50,710 --> 00:17:50,720
going to compile our shaders
 

1043
00:17:50,720 --> 00:17:54,230
going to compile our shaders
and then it is going to copy

1044
00:17:54,230 --> 00:17:54,240
and then it is going to copy
 

1045
00:17:54,240 --> 00:17:56,549
and then it is going to copy
a assets folder that we're going to

1046
00:17:56,549 --> 00:17:56,559
a assets folder that we're going to
 

1047
00:17:56,559 --> 00:17:57,350
a assets folder that we're going to
create

1048
00:17:57,350 --> 00:17:57,360
create
 

1049
00:17:57,360 --> 00:17:58,870
create
and it's going to take all the content

1050
00:17:58,870 --> 00:17:58,880
and it's going to take all the content
 

1051
00:17:58,880 --> 00:18:00,549
and it's going to take all the content
from that assets folder and put it into

1052
00:18:00,549 --> 00:18:00,559
from that assets folder and put it into
 

1053
00:18:00,559 --> 00:18:02,150
from that assets folder and put it into
our bin folder so that our engine can

1054
00:18:02,150 --> 00:18:02,160
our bin folder so that our engine can
 

1055
00:18:02,160 --> 00:18:03,029
our bin folder so that our engine can
access it

1056
00:18:03,029 --> 00:18:03,039
access it
 

1057
00:18:03,039 --> 00:18:04,789
access it
we don't currently have that now so i'm

1058
00:18:04,789 --> 00:18:04,799
we don't currently have that now so i'm
 

1059
00:18:04,799 --> 00:18:06,230
we don't currently have that now so i'm
actually going to go ahead and

1060
00:18:06,230 --> 00:18:06,240
actually going to go ahead and
 

1061
00:18:06,240 --> 00:18:10,070
actually going to go ahead and
create that first so again in the

1062
00:18:10,070 --> 00:18:10,080
create that first so again in the
 

1063
00:18:10,080 --> 00:18:11,830
create that first so again in the
root we're going to create a new folder

1064
00:18:11,830 --> 00:18:11,840
root we're going to create a new folder
 

1065
00:18:11,840 --> 00:18:15,110
root we're going to create a new folder
this time and we're going to call this

1066
00:18:15,110 --> 00:18:15,120
this time and we're going to call this
 

1067
00:18:15,120 --> 00:18:18,710
this time and we're going to call this
assets and then within that

1068
00:18:18,710 --> 00:18:18,720
assets and then within that
 

1069
00:18:18,720 --> 00:18:23,110
assets and then within that
we are going to create a new file

1070
00:18:23,110 --> 00:18:23,120

 

1071
00:18:23,120 --> 00:18:24,470

and we're just going to call it dot get

1072
00:18:24,470 --> 00:18:24,480
and we're just going to call it dot get
 

1073
00:18:24,480 --> 00:18:26,710
and we're just going to call it dot get
keep and this is just so that

1074
00:18:26,710 --> 00:18:26,720
keep and this is just so that
 

1075
00:18:26,720 --> 00:18:29,830
keep and this is just so that
the assets folder makes it into the get

1076
00:18:29,830 --> 00:18:29,840
the assets folder makes it into the get
 

1077
00:18:29,840 --> 00:18:30,710
the assets folder makes it into the get
repository

1078
00:18:30,710 --> 00:18:30,720
repository
 

1079
00:18:30,720 --> 00:18:33,110
repository
okay and this is where our assets are

1080
00:18:33,110 --> 00:18:33,120
okay and this is where our assets are
 

1081
00:18:33,120 --> 00:18:34,070
okay and this is where our assets are
going to live so

1082
00:18:34,070 --> 00:18:34,080
going to live so
 

1083
00:18:34,080 --> 00:18:36,470
going to live so
whenever we have textures or models or

1084
00:18:36,470 --> 00:18:36,480
whenever we have textures or models or
 

1085
00:18:36,480 --> 00:18:38,070
whenever we have textures or models or
anything that we need to import into the

1086
00:18:38,070 --> 00:18:38,080
anything that we need to import into the
 

1087
00:18:38,080 --> 00:18:38,950
anything that we need to import into the
engine

1088
00:18:38,950 --> 00:18:38,960
engine
 

1089
00:18:38,960 --> 00:18:40,150
engine
this is where those things are going to

1090
00:18:40,150 --> 00:18:40,160
this is where those things are going to
 

1091
00:18:40,160 --> 00:18:42,150
this is where those things are going to
let live and then

1092
00:18:42,150 --> 00:18:42,160
let live and then
 

1093
00:18:42,160 --> 00:18:44,870
let live and then
our post build process is going to take

1094
00:18:44,870 --> 00:18:44,880
our post build process is going to take
 

1095
00:18:44,880 --> 00:18:45,830
our post build process is going to take
the files

1096
00:18:45,830 --> 00:18:45,840
the files
 

1097
00:18:45,840 --> 00:18:47,990
the files
that are in the assets folder and it is

1098
00:18:47,990 --> 00:18:48,000
that are in the assets folder and it is
 

1099
00:18:48,000 --> 00:18:50,870
that are in the assets folder and it is
going to copy it into the bin folder

1100
00:18:50,870 --> 00:18:50,880
going to copy it into the bin folder
 

1101
00:18:50,880 --> 00:18:54,470
going to copy it into the bin folder
as an assets subfolder in here alongside

1102
00:18:54,470 --> 00:18:54,480
as an assets subfolder in here alongside
 

1103
00:18:54,480 --> 00:18:55,990
as an assets subfolder in here alongside
our executable so that we can

1104
00:18:55,990 --> 00:18:56,000
our executable so that we can
 

1105
00:18:56,000 --> 00:18:59,110
our executable so that we can
actually work with them during runtime

1106
00:18:59,110 --> 00:18:59,120
actually work with them during runtime
 

1107
00:18:59,120 --> 00:19:01,909
actually work with them during runtime
okay so our post build process is going

1108
00:19:01,909 --> 00:19:01,919
okay so our post build process is going
 

1109
00:19:01,919 --> 00:19:03,750
okay so our post build process is going
to take care of both of those things for

1110
00:19:03,750 --> 00:19:03,760
to take care of both of those things for
 

1111
00:19:03,760 --> 00:19:05,270
to take care of both of those things for
us

1112
00:19:05,270 --> 00:19:05,280
us
 

1113
00:19:05,280 --> 00:19:07,190
us
so the very first thing that we are

1114
00:19:07,190 --> 00:19:07,200
so the very first thing that we are
 

1115
00:19:07,200 --> 00:19:08,549
so the very first thing that we are
going to do is we are going to start off

1116
00:19:08,549 --> 00:19:08,559
going to do is we are going to start off
 

1117
00:19:08,559 --> 00:19:10,070
going to do is we are going to start off
our batch file with an echo off

1118
00:19:10,070 --> 00:19:10,080
our batch file with an echo off
 

1119
00:19:10,080 --> 00:19:11,430
our batch file with an echo off
so that we don't echo all this stuff

1120
00:19:11,430 --> 00:19:11,440
so that we don't echo all this stuff
 

1121
00:19:11,440 --> 00:19:13,350
so that we don't echo all this stuff
because it's not necessary

1122
00:19:13,350 --> 00:19:13,360
because it's not necessary
 

1123
00:19:13,360 --> 00:19:15,110
because it's not necessary
and we're going to say if it does not

1124
00:19:15,110 --> 00:19:15,120
and we're going to say if it does not
 

1125
00:19:15,120 --> 00:19:16,630
and we're going to say if it does not
exist

1126
00:19:16,630 --> 00:19:16,640
exist
 

1127
00:19:16,640 --> 00:19:20,070
exist
we are going to create in the bin folder

1128
00:19:20,070 --> 00:19:20,080
we are going to create in the bin folder
 

1129
00:19:20,080 --> 00:19:23,190
we are going to create in the bin folder
an assets and shaders directory now

1130
00:19:23,190 --> 00:19:23,200
an assets and shaders directory now
 

1131
00:19:23,200 --> 00:19:24,950
an assets and shaders directory now
if this does not exist it'll create it

1132
00:19:24,950 --> 00:19:24,960
if this does not exist it'll create it
 

1133
00:19:24,960 --> 00:19:27,110
if this does not exist it'll create it
otherwise it'll just sort of move on

1134
00:19:27,110 --> 00:19:27,120
otherwise it'll just sort of move on
 

1135
00:19:27,120 --> 00:19:30,310
otherwise it'll just sort of move on
right and then the next bit as i

1136
00:19:30,310 --> 00:19:30,320
right and then the next bit as i
 

1137
00:19:30,320 --> 00:19:30,870
right and then the next bit as i
mentioned

1138
00:19:30,870 --> 00:19:30,880
mentioned
 

1139
00:19:30,880 --> 00:19:33,909
mentioned
is we are going to compile shaders

1140
00:19:33,909 --> 00:19:33,919
is we are going to compile shaders
 

1141
00:19:33,919 --> 00:19:36,310
is we are going to compile shaders
and we are going to compile our shaders

1142
00:19:36,310 --> 00:19:36,320
and we are going to compile our shaders
 

1143
00:19:36,320 --> 00:19:37,510
and we are going to compile our shaders
using

1144
00:19:37,510 --> 00:19:37,520
using
 

1145
00:19:37,520 --> 00:19:41,110
using
that glslc.exe program

1146
00:19:41,110 --> 00:19:41,120
that glslc.exe program
 

1147
00:19:41,120 --> 00:19:43,190
that glslc.exe program
so the way that we navigate to that is

1148
00:19:43,190 --> 00:19:43,200
so the way that we navigate to that is
 

1149
00:19:43,200 --> 00:19:45,110
so the way that we navigate to that is
we have our vulcan sdk

1150
00:19:45,110 --> 00:19:45,120
we have our vulcan sdk
 

1151
00:19:45,120 --> 00:19:47,590
we have our vulcan sdk
environment variable that gives us the

1152
00:19:47,590 --> 00:19:47,600
environment variable that gives us the
 

1153
00:19:47,600 --> 00:19:48,710
environment variable that gives us the
leading path

1154
00:19:48,710 --> 00:19:48,720
leading path
 

1155
00:19:48,720 --> 00:19:50,390
leading path
and then it's under the bin folder and

1156
00:19:50,390 --> 00:19:50,400
and then it's under the bin folder and
 

1157
00:19:50,400 --> 00:19:52,310
and then it's under the bin folder and
then it's called glslc

1158
00:19:52,310 --> 00:19:52,320
then it's called glslc
 

1159
00:19:52,320 --> 00:19:56,470
then it's called glslc
exe and to this we actually need to

1160
00:19:56,470 --> 00:19:56,480
exe and to this we actually need to
 

1161
00:19:56,480 --> 00:20:00,150
exe and to this we actually need to
pass some arguments however before i

1162
00:20:00,150 --> 00:20:00,160
pass some arguments however before i
 

1163
00:20:00,160 --> 00:20:02,789
pass some arguments however before i
jump into that i do want to go ahead and

1164
00:20:02,789 --> 00:20:02,799
jump into that i do want to go ahead and
 

1165
00:20:02,799 --> 00:20:03,590
jump into that i do want to go ahead and
just sort of

1166
00:20:03,590 --> 00:20:03,600
just sort of
 

1167
00:20:03,600 --> 00:20:05,750
just sort of
run this from the command line so that

1168
00:20:05,750 --> 00:20:05,760
run this from the command line so that
 

1169
00:20:05,760 --> 00:20:07,510
run this from the command line so that
you guys can

1170
00:20:07,510 --> 00:20:07,520
you guys can
 

1171
00:20:07,520 --> 00:20:10,710
you guys can
see what some of the arguments are so if

1172
00:20:10,710 --> 00:20:10,720
see what some of the arguments are so if
 

1173
00:20:10,720 --> 00:20:11,430
see what some of the arguments are so if
we do

1174
00:20:11,430 --> 00:20:11,440
we do
 

1175
00:20:11,440 --> 00:20:15,430
we do
jlslc double dash help

1176
00:20:15,430 --> 00:20:15,440
jlslc double dash help
 

1177
00:20:15,440 --> 00:20:17,669
jlslc double dash help
it'll actually give us a listing of all

1178
00:20:17,669 --> 00:20:17,679
it'll actually give us a listing of all
 

1179
00:20:17,679 --> 00:20:19,430
it'll actually give us a listing of all
the available

1180
00:20:19,430 --> 00:20:19,440
the available
 

1181
00:20:19,440 --> 00:20:22,070
the available
flags that we can pass into this there's

1182
00:20:22,070 --> 00:20:22,080
flags that we can pass into this there's
 

1183
00:20:22,080 --> 00:20:23,190
flags that we can pass into this there's
quite a lot of them

1184
00:20:23,190 --> 00:20:23,200
quite a lot of them
 

1185
00:20:23,200 --> 00:20:26,310
quite a lot of them
right so the one that we are concerned

1186
00:20:26,310 --> 00:20:26,320
right so the one that we are concerned
 

1187
00:20:26,320 --> 00:20:26,950
right so the one that we are concerned
with

1188
00:20:26,950 --> 00:20:26,960
with
 

1189
00:20:26,960 --> 00:20:32,470
with
at least for right now is let me find it

1190
00:20:32,470 --> 00:20:32,480
at least for right now is let me find it
 

1191
00:20:32,480 --> 00:20:36,149
at least for right now is let me find it
f shader stage okay and we basically say

1192
00:20:36,149 --> 00:20:36,159
f shader stage okay and we basically say
 

1193
00:20:36,159 --> 00:20:36,870
f shader stage okay and we basically say
f

1194
00:20:36,870 --> 00:20:36,880
f
 

1195
00:20:36,880 --> 00:20:40,070
f
dash f shader dash stage equals and then

1196
00:20:40,070 --> 00:20:40,080
dash f shader dash stage equals and then
 

1197
00:20:40,080 --> 00:20:41,830
dash f shader dash stage equals and then
the name of the stage

1198
00:20:41,830 --> 00:20:41,840
the name of the stage
 

1199
00:20:41,840 --> 00:20:44,230
the name of the stage
and uh this treats the subsequent input

1200
00:20:44,230 --> 00:20:44,240
and uh this treats the subsequent input
 

1201
00:20:44,240 --> 00:20:46,070
and uh this treats the subsequent input
files as having the stage

1202
00:20:46,070 --> 00:20:46,080
files as having the stage
 

1203
00:20:46,080 --> 00:20:47,909
files as having the stage
and if you recall the different stages

1204
00:20:47,909 --> 00:20:47,919
and if you recall the different stages
 

1205
00:20:47,919 --> 00:20:49,750
and if you recall the different stages
that we um have

1206
00:20:49,750 --> 00:20:49,760
that we um have
 

1207
00:20:49,760 --> 00:20:53,350
that we um have
are vertex fragment

1208
00:20:53,350 --> 00:20:53,360
are vertex fragment
 

1209
00:20:53,360 --> 00:20:57,110
are vertex fragment
tessellation um geometry

1210
00:20:57,110 --> 00:20:57,120
tessellation um geometry
 

1211
00:20:57,120 --> 00:20:59,990
tessellation um geometry
and compute okay and uh you'll notice

1212
00:20:59,990 --> 00:21:00,000
and compute okay and uh you'll notice
 

1213
00:21:00,000 --> 00:21:01,750
and compute okay and uh you'll notice
here that there are sort of these longer

1214
00:21:01,750 --> 00:21:01,760
here that there are sort of these longer
 

1215
00:21:01,760 --> 00:21:03,909
here that there are sort of these longer
versions and shorthand versions

1216
00:21:03,909 --> 00:21:03,919
versions and shorthand versions
 

1217
00:21:03,919 --> 00:21:05,110
versions and shorthand versions
we're going to be using the shorthand

1218
00:21:05,110 --> 00:21:05,120
we're going to be using the shorthand
 

1219
00:21:05,120 --> 00:21:07,430
we're going to be using the shorthand
for each one of these so vertex is say

1220
00:21:07,430 --> 00:21:07,440
for each one of these so vertex is say
 

1221
00:21:07,440 --> 00:21:08,390
for each one of these so vertex is say
the same as vert

1222
00:21:08,390 --> 00:21:08,400
the same as vert
 

1223
00:21:08,400 --> 00:21:10,630
the same as vert
fragment is the same as frag so we're

1224
00:21:10,630 --> 00:21:10,640
fragment is the same as frag so we're
 

1225
00:21:10,640 --> 00:21:12,070
fragment is the same as frag so we're
just going to use written frag for right

1226
00:21:12,070 --> 00:21:12,080
just going to use written frag for right
 

1227
00:21:12,080 --> 00:21:13,350
just going to use written frag for right
now

1228
00:21:13,350 --> 00:21:13,360
now
 

1229
00:21:13,360 --> 00:21:17,190
now
okay so uh the format that this is

1230
00:21:17,190 --> 00:21:17,200
okay so uh the format that this is
 

1231
00:21:17,200 --> 00:21:18,549
okay so uh the format that this is
actually looking for

1232
00:21:18,549 --> 00:21:18,559
actually looking for
 

1233
00:21:18,559 --> 00:21:21,190
actually looking for
is uh it basically takes in uh the

1234
00:21:21,190 --> 00:21:21,200
is uh it basically takes in uh the
 

1235
00:21:21,200 --> 00:21:22,789
is uh it basically takes in uh the
options which are here

1236
00:21:22,789 --> 00:21:22,799
options which are here
 

1237
00:21:22,799 --> 00:21:26,310
options which are here
and then uh the file right and then

1238
00:21:26,310 --> 00:21:26,320
and then uh the file right and then
 

1239
00:21:26,320 --> 00:21:28,870
and then uh the file right and then
we're also going to want to include uh

1240
00:21:28,870 --> 00:21:28,880
we're also going to want to include uh
 

1241
00:21:28,880 --> 00:21:30,230
we're also going to want to include uh
it's in here somewhere the

1242
00:21:30,230 --> 00:21:30,240
it's in here somewhere the
 

1243
00:21:30,240 --> 00:21:33,270
it's in here somewhere the
dash o which is the output file okay and

1244
00:21:33,270 --> 00:21:33,280
dash o which is the output file okay and
 

1245
00:21:33,280 --> 00:21:33,830
dash o which is the output file okay and
then

1246
00:21:33,830 --> 00:21:33,840
then
 

1247
00:21:33,840 --> 00:21:36,870
then
of course a path to that so with all

1248
00:21:36,870 --> 00:21:36,880
of course a path to that so with all
 

1249
00:21:36,880 --> 00:21:38,230
of course a path to that so with all
that in mind

1250
00:21:38,230 --> 00:21:38,240
that in mind
 

1251
00:21:38,240 --> 00:21:39,990
that in mind
what we are going to do is the first

1252
00:21:39,990 --> 00:21:40,000
what we are going to do is the first
 

1253
00:21:40,000 --> 00:21:41,029
what we are going to do is the first
thing that we are going to do is we are

1254
00:21:41,029 --> 00:21:41,039
thing that we are going to do is we are
 

1255
00:21:41,039 --> 00:21:42,630
thing that we are going to do is we are
going to build a shader

1256
00:21:42,630 --> 00:21:42,640
going to build a shader
 

1257
00:21:42,640 --> 00:21:45,909
going to build a shader
for our vertex stage right so we have f

1258
00:21:45,909 --> 00:21:45,919
for our vertex stage right so we have f
 

1259
00:21:45,919 --> 00:21:49,110
for our vertex stage right so we have f
shader stage equals vert

1260
00:21:49,110 --> 00:21:49,120
shader stage equals vert
 

1261
00:21:49,120 --> 00:21:52,710
shader stage equals vert
and then after that we need to point to

1262
00:21:52,710 --> 00:21:52,720
and then after that we need to point to
 

1263
00:21:52,720 --> 00:21:55,830
and then after that we need to point to
a glsl file so in this case

1264
00:21:55,830 --> 00:21:55,840
a glsl file so in this case
 

1265
00:21:55,840 --> 00:21:57,590
a glsl file so in this case
we are going to point to something in

1266
00:21:57,590 --> 00:21:57,600
we are going to point to something in
 

1267
00:21:57,600 --> 00:21:59,909
we are going to point to something in
assets shader's built-in dot object

1268
00:21:59,909 --> 00:21:59,919
assets shader's built-in dot object
 

1269
00:21:59,919 --> 00:22:00,710
assets shader's built-in dot object
shader

1270
00:22:00,710 --> 00:22:00,720
shader
 

1271
00:22:00,720 --> 00:22:03,750
shader
right and this is the name of the shader

1272
00:22:03,750 --> 00:22:03,760
right and this is the name of the shader
 

1273
00:22:03,760 --> 00:22:05,190
right and this is the name of the shader
this is what i'm calling it this is my

1274
00:22:05,190 --> 00:22:05,200
this is what i'm calling it this is my
 

1275
00:22:05,200 --> 00:22:05,990
this is what i'm calling it this is my
naming

1276
00:22:05,990 --> 00:22:06,000
naming
 

1277
00:22:06,000 --> 00:22:07,990
naming
scheme you guys don't have to follow

1278
00:22:07,990 --> 00:22:08,000
scheme you guys don't have to follow
 

1279
00:22:08,000 --> 00:22:09,350
scheme you guys don't have to follow
this if you don't want you can name it

1280
00:22:09,350 --> 00:22:09,360
this if you don't want you can name it
 

1281
00:22:09,360 --> 00:22:10,549
this if you don't want you can name it
anything that you want

1282
00:22:10,549 --> 00:22:10,559
anything that you want
 

1283
00:22:10,559 --> 00:22:12,149
anything that you want
but this is what i'm going to stick with

1284
00:22:12,149 --> 00:22:12,159
but this is what i'm going to stick with
 

1285
00:22:12,159 --> 00:22:13,830
but this is what i'm going to stick with
however there

1286
00:22:13,830 --> 00:22:13,840
however there
 

1287
00:22:13,840 --> 00:22:16,710
however there
is a portion of this that our pipeline

1288
00:22:16,710 --> 00:22:16,720
is a portion of this that our pipeline
 

1289
00:22:16,720 --> 00:22:18,470
is a portion of this that our pipeline
is going to rely on and that is this

1290
00:22:18,470 --> 00:22:18,480
is going to rely on and that is this
 

1291
00:22:18,480 --> 00:22:21,750
is going to rely on and that is this
dot vert dot glsl so the dot vert tells

1292
00:22:21,750 --> 00:22:21,760
dot vert dot glsl so the dot vert tells
 

1293
00:22:21,760 --> 00:22:23,510
dot vert dot glsl so the dot vert tells
us what type of shader it is and then

1294
00:22:23,510 --> 00:22:23,520
us what type of shader it is and then
 

1295
00:22:23,520 --> 00:22:27,029
us what type of shader it is and then
the glsl obviously um is the type of

1296
00:22:27,029 --> 00:22:27,039
the glsl obviously um is the type of
 

1297
00:22:27,039 --> 00:22:27,669
the glsl obviously um is the type of
file

1298
00:22:27,669 --> 00:22:27,679
file
 

1299
00:22:27,679 --> 00:22:30,549
file
and so this portion of it is somewhat

1300
00:22:30,549 --> 00:22:30,559
and so this portion of it is somewhat
 

1301
00:22:30,559 --> 00:22:31,190
and so this portion of it is somewhat
important

1302
00:22:31,190 --> 00:22:31,200
important
 

1303
00:22:31,200 --> 00:22:34,390
important
but this could be anything that you want

1304
00:22:34,390 --> 00:22:34,400
but this could be anything that you want
 

1305
00:22:34,400 --> 00:22:37,990
but this could be anything that you want
so with that that is our input file

1306
00:22:37,990 --> 00:22:38,000
so with that that is our input file
 

1307
00:22:38,000 --> 00:22:40,549
so with that that is our input file
and then obviously we need to tell it uh

1308
00:22:40,549 --> 00:22:40,559
and then obviously we need to tell it uh
 

1309
00:22:40,559 --> 00:22:42,549
and then obviously we need to tell it uh
what our output file will be

1310
00:22:42,549 --> 00:22:42,559
what our output file will be
 

1311
00:22:42,559 --> 00:22:45,510
what our output file will be
so we use dash o and then we have here

1312
00:22:45,510 --> 00:22:45,520
so we use dash o and then we have here
 

1313
00:22:45,520 --> 00:22:45,909
so we use dash o and then we have here
bin

1314
00:22:45,909 --> 00:22:45,919
bin
 

1315
00:22:45,919 --> 00:22:49,270
bin
assets shaders and then again built-in

1316
00:22:49,270 --> 00:22:49,280
assets shaders and then again built-in
 

1317
00:22:49,280 --> 00:22:53,190
assets shaders and then again built-in
dot object shader.vert.spv so this spv

1318
00:22:53,190 --> 00:22:53,200
dot object shader.vert.spv so this spv
 

1319
00:22:53,200 --> 00:22:55,270
dot object shader.vert.spv so this spv
is what contains that uh it's the file

1320
00:22:55,270 --> 00:22:55,280
is what contains that uh it's the file
 

1321
00:22:55,280 --> 00:22:57,909
is what contains that uh it's the file
that contains the compiled byte code

1322
00:22:57,909 --> 00:22:57,919
that contains the compiled byte code
 

1323
00:22:57,919 --> 00:23:01,029
that contains the compiled byte code
of the compiled shader okay and so

1324
00:23:01,029 --> 00:23:01,039
of the compiled shader okay and so
 

1325
00:23:01,039 --> 00:23:04,149
of the compiled shader okay and so
uh we are hard coding the name of the

1326
00:23:04,149 --> 00:23:04,159
uh we are hard coding the name of the
 

1327
00:23:04,159 --> 00:23:05,750
uh we are hard coding the name of the
shader here and this is because at least

1328
00:23:05,750 --> 00:23:05,760
shader here and this is because at least
 

1329
00:23:05,760 --> 00:23:08,549
shader here and this is because at least
initially we're only going to have

1330
00:23:08,549 --> 00:23:08,559
initially we're only going to have
 

1331
00:23:08,559 --> 00:23:10,950
initially we're only going to have
just sort of this one built-in object

1332
00:23:10,950 --> 00:23:10,960
just sort of this one built-in object
 

1333
00:23:10,960 --> 00:23:11,750
just sort of this one built-in object
shader

1334
00:23:11,750 --> 00:23:11,760
shader
 

1335
00:23:11,760 --> 00:23:14,710
shader
and so there's not really much need to

1336
00:23:14,710 --> 00:23:14,720
and so there's not really much need to
 

1337
00:23:14,720 --> 00:23:15,669
and so there's not really much need to
build

1338
00:23:15,669 --> 00:23:15,679
build
 

1339
00:23:15,679 --> 00:23:17,110
build
something that's a little bit more fancy

1340
00:23:17,110 --> 00:23:17,120
something that's a little bit more fancy
 

1341
00:23:17,120 --> 00:23:19,510
something that's a little bit more fancy
than this i'd rather keep it simple for

1342
00:23:19,510 --> 00:23:19,520
than this i'd rather keep it simple for
 

1343
00:23:19,520 --> 00:23:20,549
than this i'd rather keep it simple for
now and then

1344
00:23:20,549 --> 00:23:20,559
now and then
 

1345
00:23:20,559 --> 00:23:22,710
now and then
when the need arises later on we can

1346
00:23:22,710 --> 00:23:22,720
when the need arises later on we can
 

1347
00:23:22,720 --> 00:23:23,750
when the need arises later on we can
extend this into

1348
00:23:23,750 --> 00:23:23,760
extend this into
 

1349
00:23:23,760 --> 00:23:25,029
extend this into
something that's a little bit more fancy

1350
00:23:25,029 --> 00:23:25,039
something that's a little bit more fancy
 

1351
00:23:25,039 --> 00:23:26,390
something that's a little bit more fancy
but for now let's go ahead and keep it

1352
00:23:26,390 --> 00:23:26,400
but for now let's go ahead and keep it
 

1353
00:23:26,400 --> 00:23:28,390
but for now let's go ahead and keep it
simple right

1354
00:23:28,390 --> 00:23:28,400
simple right
 

1355
00:23:28,400 --> 00:23:30,950
simple right
so the other thing that i want to do is

1356
00:23:30,950 --> 00:23:30,960
so the other thing that i want to do is
 

1357
00:23:30,960 --> 00:23:32,549
so the other thing that i want to do is
i like to

1358
00:23:32,549 --> 00:23:32,559
i like to
 

1359
00:23:32,559 --> 00:23:34,470
i like to
in cases like this when i'm running

1360
00:23:34,470 --> 00:23:34,480
in cases like this when i'm running
 

1361
00:23:34,480 --> 00:23:35,830
in cases like this when i'm running
stuff with

1362
00:23:35,830 --> 00:23:35,840
stuff with
 

1363
00:23:35,840 --> 00:23:38,310
stuff with
echo off i actually like to echo a

1364
00:23:38,310 --> 00:23:38,320
echo off i actually like to echo a
 

1365
00:23:38,320 --> 00:23:38,950
echo off i actually like to echo a
special

1366
00:23:38,950 --> 00:23:38,960
special
 

1367
00:23:38,960 --> 00:23:41,990
special
message of my own to say uh what were

1368
00:23:41,990 --> 00:23:42,000
message of my own to say uh what were
 

1369
00:23:42,000 --> 00:23:43,590
message of my own to say uh what were
what we're actually doing so that way as

1370
00:23:43,590 --> 00:23:43,600
what we're actually doing so that way as
 

1371
00:23:43,600 --> 00:23:45,110
what we're actually doing so that way as
this script is running you can tell what

1372
00:23:45,110 --> 00:23:45,120
this script is running you can tell what
 

1373
00:23:45,120 --> 00:23:46,230
this script is running you can tell what
it's doing

1374
00:23:46,230 --> 00:23:46,240
it's doing
 

1375
00:23:46,240 --> 00:23:49,590
it's doing
so in this case i'm just saying uh uh

1376
00:23:49,590 --> 00:23:49,600
so in this case i'm just saying uh uh
 

1377
00:23:49,600 --> 00:23:51,350
so in this case i'm just saying uh uh
the original name of the file and then

1378
00:23:51,350 --> 00:23:51,360
the original name of the file and then
 

1379
00:23:51,360 --> 00:23:52,789
the original name of the file and then
i've got this sort of little arrow that

1380
00:23:52,789 --> 00:23:52,799
i've got this sort of little arrow that
 

1381
00:23:52,799 --> 00:23:54,070
i've got this sort of little arrow that
i'm outputting here and then

1382
00:23:54,070 --> 00:23:54,080
i'm outputting here and then
 

1383
00:23:54,080 --> 00:23:56,230
i'm outputting here and then
the target name of the file okay and i'm

1384
00:23:56,230 --> 00:23:56,240
the target name of the file okay and i'm
 

1385
00:23:56,240 --> 00:23:58,789
the target name of the file okay and i'm
just outputting that

1386
00:23:58,789 --> 00:23:58,799
just outputting that
 

1387
00:23:58,799 --> 00:24:02,230
just outputting that
okay so we have that

1388
00:24:02,230 --> 00:24:02,240
okay so we have that
 

1389
00:24:02,240 --> 00:24:05,430
okay so we have that
we have something for the vertex stage

1390
00:24:05,430 --> 00:24:05,440
we have something for the vertex stage
 

1391
00:24:05,440 --> 00:24:07,750
we have something for the vertex stage
we also need one for the fragment stage

1392
00:24:07,750 --> 00:24:07,760
we also need one for the fragment stage
 

1393
00:24:07,760 --> 00:24:09,430
we also need one for the fragment stage
and again we haven't created these files

1394
00:24:09,430 --> 00:24:09,440
and again we haven't created these files
 

1395
00:24:09,440 --> 00:24:11,590
and again we haven't created these files
yet but we will come back to this

1396
00:24:11,590 --> 00:24:11,600
yet but we will come back to this
 

1397
00:24:11,600 --> 00:24:14,630
yet but we will come back to this
um so this is exactly the same

1398
00:24:14,630 --> 00:24:14,640
um so this is exactly the same
 

1399
00:24:14,640 --> 00:24:16,789
um so this is exactly the same
name and location and all of that the

1400
00:24:16,789 --> 00:24:16,799
name and location and all of that the
 

1401
00:24:16,799 --> 00:24:18,789
name and location and all of that the
only difference is the stage is frag for

1402
00:24:18,789 --> 00:24:18,799
only difference is the stage is frag for
 

1403
00:24:18,799 --> 00:24:19,590
only difference is the stage is frag for
fragment

1404
00:24:19,590 --> 00:24:19,600
fragment
 

1405
00:24:19,600 --> 00:24:22,549
fragment
the name of the file is frag.js glsl

1406
00:24:22,549 --> 00:24:22,559
the name of the file is frag.js glsl
 

1407
00:24:22,559 --> 00:24:22,950
the name of the file is frag.js glsl
here

1408
00:24:22,950 --> 00:24:22,960
here
 

1409
00:24:22,960 --> 00:24:25,590
here
and frag.spv here and of course that's

1410
00:24:25,590 --> 00:24:25,600
and frag.spv here and of course that's
 

1411
00:24:25,600 --> 00:24:27,750
and frag.spv here and of course that's
reflected in the echo as well

1412
00:24:27,750 --> 00:24:27,760
reflected in the echo as well
 

1413
00:24:27,760 --> 00:24:30,870
reflected in the echo as well
now should there be problems

1414
00:24:30,870 --> 00:24:30,880
now should there be problems
 

1415
00:24:30,880 --> 00:24:34,230
now should there be problems
with either of these compiling we don't

1416
00:24:34,230 --> 00:24:34,240
with either of these compiling we don't
 

1417
00:24:34,240 --> 00:24:35,669
with either of these compiling we don't
necessarily want to continue with the

1418
00:24:35,669 --> 00:24:35,679
necessarily want to continue with the
 

1419
00:24:35,679 --> 00:24:37,430
necessarily want to continue with the
script right we want to sort of echo out

1420
00:24:37,430 --> 00:24:37,440
script right we want to sort of echo out
 

1421
00:24:37,440 --> 00:24:38,390
script right we want to sort of echo out
what that problem is

1422
00:24:38,390 --> 00:24:38,400
what that problem is
 

1423
00:24:38,400 --> 00:24:40,870
what that problem is
and kill the script so i actually have a

1424
00:24:40,870 --> 00:24:40,880
and kill the script so i actually have a
 

1425
00:24:40,880 --> 00:24:42,710
and kill the script so i actually have a
line that i'm going to put in here

1426
00:24:42,710 --> 00:24:42,720
line that i'm going to put in here
 

1427
00:24:42,720 --> 00:24:45,350
line that i'm going to put in here
after this first shader which is if the

1428
00:24:45,350 --> 00:24:45,360
after this first shader which is if the
 

1429
00:24:45,360 --> 00:24:45,990
after this first shader which is if the
error level

1430
00:24:45,990 --> 00:24:46,000
error level
 

1431
00:24:46,000 --> 00:24:47,990
error level
output by this program is not zero

1432
00:24:47,990 --> 00:24:48,000
output by this program is not zero
 

1433
00:24:48,000 --> 00:24:49,909
output by this program is not zero
meaning it wasn't successful

1434
00:24:49,909 --> 00:24:49,919
meaning it wasn't successful
 

1435
00:24:49,919 --> 00:24:52,149
meaning it wasn't successful
uh then we are going to echo the error

1436
00:24:52,149 --> 00:24:52,159
uh then we are going to echo the error
 

1437
00:24:52,159 --> 00:24:53,350
uh then we are going to echo the error
the error level

1438
00:24:53,350 --> 00:24:53,360
the error level
 

1439
00:24:53,360 --> 00:24:54,950
the error level
and we are going to bomb the script

1440
00:24:54,950 --> 00:24:54,960
and we are going to bomb the script
 

1441
00:24:54,960 --> 00:24:56,950
and we are going to bomb the script
basically and we're going to do that

1442
00:24:56,950 --> 00:24:56,960
basically and we're going to do that
 

1443
00:24:56,960 --> 00:24:57,830
basically and we're going to do that
after

1444
00:24:57,830 --> 00:24:57,840
after
 

1445
00:24:57,840 --> 00:25:00,230
after
both the vertex and the fragment shader

1446
00:25:00,230 --> 00:25:00,240
both the vertex and the fragment shader
 

1447
00:25:00,240 --> 00:25:01,350
both the vertex and the fragment shader
compilation stages

1448
00:25:01,350 --> 00:25:01,360
compilation stages
 

1449
00:25:01,360 --> 00:25:04,630
compilation stages
okay and so

1450
00:25:04,630 --> 00:25:04,640
okay and so
 

1451
00:25:04,640 --> 00:25:07,750
okay and so
once we are done with that then we

1452
00:25:07,750 --> 00:25:07,760
once we are done with that then we
 

1453
00:25:07,760 --> 00:25:09,909
once we are done with that then we
are ready to go ahead and move on to our

1454
00:25:09,909 --> 00:25:09,919
are ready to go ahead and move on to our
 

1455
00:25:09,919 --> 00:25:11,669
are ready to go ahead and move on to our
asset copy

1456
00:25:11,669 --> 00:25:11,679
asset copy
 

1457
00:25:11,679 --> 00:25:14,149
asset copy
and our asset copy is actually going to

1458
00:25:14,149 --> 00:25:14,159
and our asset copy is actually going to
 

1459
00:25:14,159 --> 00:25:14,789
and our asset copy is actually going to
be

1460
00:25:14,789 --> 00:25:14,799
be
 

1461
00:25:14,799 --> 00:25:16,870
be
pretty straightforward um at least i

1462
00:25:16,870 --> 00:25:16,880
pretty straightforward um at least i
 

1463
00:25:16,880 --> 00:25:18,630
pretty straightforward um at least i
think if you've ever used xcopy before

1464
00:25:18,630 --> 00:25:18,640
think if you've ever used xcopy before
 

1465
00:25:18,640 --> 00:25:19,510
think if you've ever used xcopy before
this should look

1466
00:25:19,510 --> 00:25:19,520
this should look
 

1467
00:25:19,520 --> 00:25:21,909
this should look
pretty familiar to you what we're

1468
00:25:21,909 --> 00:25:21,919
pretty familiar to you what we're
 

1469
00:25:21,919 --> 00:25:23,190
pretty familiar to you what we're
dealing with here is we're saying

1470
00:25:23,190 --> 00:25:23,200
dealing with here is we're saying
 

1471
00:25:23,200 --> 00:25:25,990
dealing with here is we're saying
uh we're copying the assets and then

1472
00:25:25,990 --> 00:25:26,000
uh we're copying the assets and then
 

1473
00:25:26,000 --> 00:25:28,549
uh we're copying the assets and then
we're copying everything

1474
00:25:28,549 --> 00:25:28,559
we're copying everything
 

1475
00:25:28,559 --> 00:25:31,029
we're copying everything
from the assets directory to the bin

1476
00:25:31,029 --> 00:25:31,039
from the assets directory to the bin
 

1477
00:25:31,039 --> 00:25:32,470
from the assets directory to the bin
assets directory

1478
00:25:32,470 --> 00:25:32,480
assets directory
 

1479
00:25:32,480 --> 00:25:35,750
assets directory
and this is recursive and this

1480
00:25:35,750 --> 00:25:35,760
and this is recursive and this
 

1481
00:25:35,760 --> 00:25:39,110
and this is recursive and this
is a sequence of

1482
00:25:39,110 --> 00:25:39,120
is a sequence of
 

1483
00:25:39,120 --> 00:25:42,149
is a sequence of
switches that are available for

1484
00:25:42,149 --> 00:25:42,159
switches that are available for
 

1485
00:25:42,159 --> 00:25:44,310
switches that are available for
xcopy if you're interested in that feel

1486
00:25:44,310 --> 00:25:44,320
xcopy if you're interested in that feel
 

1487
00:25:44,320 --> 00:25:45,590
xcopy if you're interested in that feel
free to look them up

1488
00:25:45,590 --> 00:25:45,600
free to look them up
 

1489
00:25:45,600 --> 00:25:47,110
free to look them up
i don't remember what all these are off

1490
00:25:47,110 --> 00:25:47,120
i don't remember what all these are off
 

1491
00:25:47,120 --> 00:25:48,549
i don't remember what all these are off
the top my head this is just what i've

1492
00:25:48,549 --> 00:25:48,559
the top my head this is just what i've
 

1493
00:25:48,559 --> 00:25:50,070
the top my head this is just what i've
been using for years

1494
00:25:50,070 --> 00:25:50,080
been using for years
 

1495
00:25:50,080 --> 00:25:52,310
been using for years
um and so this handles recursion it

1496
00:25:52,310 --> 00:25:52,320
um and so this handles recursion it
 

1497
00:25:52,320 --> 00:25:53,350
um and so this handles recursion it
handles uh

1498
00:25:53,350 --> 00:25:53,360
handles uh
 

1499
00:25:53,360 --> 00:25:55,350
handles uh
error checking it handles overwriting

1500
00:25:55,350 --> 00:25:55,360
error checking it handles overwriting
 

1501
00:25:55,360 --> 00:25:58,070
error checking it handles overwriting
files things of that nature so

1502
00:25:58,070 --> 00:25:58,080
files things of that nature so
 

1503
00:25:58,080 --> 00:26:01,669
files things of that nature so
we'll want to go ahead and perform this

1504
00:26:01,669 --> 00:26:01,679
we'll want to go ahead and perform this
 

1505
00:26:01,679 --> 00:26:03,590
we'll want to go ahead and perform this
x copy right so this is a line that just

1506
00:26:03,590 --> 00:26:03,600
x copy right so this is a line that just
 

1507
00:26:03,600 --> 00:26:05,669
x copy right so this is a line that just
says what we're doing

1508
00:26:05,669 --> 00:26:05,679
says what we're doing
 

1509
00:26:05,679 --> 00:26:07,590
says what we're doing
which is here and then this is a line

1510
00:26:07,590 --> 00:26:07,600
which is here and then this is a line
 

1511
00:26:07,600 --> 00:26:10,070
which is here and then this is a line
that actually executes it okay

1512
00:26:10,070 --> 00:26:10,080
that actually executes it okay
 

1513
00:26:10,080 --> 00:26:11,750
that actually executes it okay
and so that will grab all of our assets

1514
00:26:11,750 --> 00:26:11,760
and so that will grab all of our assets
 

1515
00:26:11,760 --> 00:26:13,510
and so that will grab all of our assets
and copy them over and then of course we

1516
00:26:13,510 --> 00:26:13,520
and copy them over and then of course we
 

1517
00:26:13,520 --> 00:26:14,549
and copy them over and then of course we
will simply say

1518
00:26:14,549 --> 00:26:14,559
will simply say
 

1519
00:26:14,559 --> 00:26:16,310
will simply say
done at the end of the script and that

1520
00:26:16,310 --> 00:26:16,320
done at the end of the script and that
 

1521
00:26:16,320 --> 00:26:17,669
done at the end of the script and that
is all there is to it right it's a

1522
00:26:17,669 --> 00:26:17,679
is all there is to it right it's a
 

1523
00:26:17,679 --> 00:26:19,669
is all there is to it right it's a
pretty straightforward script

1524
00:26:19,669 --> 00:26:19,679
pretty straightforward script
 

1525
00:26:19,679 --> 00:26:21,029
pretty straightforward script
this will get a little bit complicated

1526
00:26:21,029 --> 00:26:21,039
this will get a little bit complicated
 

1527
00:26:21,039 --> 00:26:22,310
this will get a little bit complicated
once we actually start adding more

1528
00:26:22,310 --> 00:26:22,320
once we actually start adding more
 

1529
00:26:22,320 --> 00:26:23,190
once we actually start adding more
shaders

1530
00:26:23,190 --> 00:26:23,200
shaders
 

1531
00:26:23,200 --> 00:26:25,830
shaders
but for now since we haven't even added

1532
00:26:25,830 --> 00:26:25,840
but for now since we haven't even added
 

1533
00:26:25,840 --> 00:26:28,230
but for now since we haven't even added
our first shader into this pipeline yet

1534
00:26:28,230 --> 00:26:28,240
our first shader into this pipeline yet
 

1535
00:26:28,240 --> 00:26:30,549
our first shader into this pipeline yet
i'm not too worried about it okay so

1536
00:26:30,549 --> 00:26:30,559
i'm not too worried about it okay so
 

1537
00:26:30,559 --> 00:26:32,470
i'm not too worried about it okay so
this is the basic

1538
00:26:32,470 --> 00:26:32,480
this is the basic
 

1539
00:26:32,480 --> 00:26:34,230
this is the basic
this is the basis of our post build

1540
00:26:34,230 --> 00:26:34,240
this is the basis of our post build
 

1541
00:26:34,240 --> 00:26:36,070
this is the basis of our post build
process now

1542
00:26:36,070 --> 00:26:36,080
process now
 

1543
00:26:36,080 --> 00:26:39,110
process now
we have a postbuild.bat we should also

1544
00:26:39,110 --> 00:26:39,120
we have a postbuild.bat we should also
 

1545
00:26:39,120 --> 00:26:40,549
we have a postbuild.bat we should also
have a post build

1546
00:26:40,549 --> 00:26:40,559
have a post build
 

1547
00:26:40,559 --> 00:26:42,870
have a post build
dot sh for linux so i'm going to go

1548
00:26:42,870 --> 00:26:42,880
dot sh for linux so i'm going to go
 

1549
00:26:42,880 --> 00:26:44,550
dot sh for linux so i'm going to go
ahead and create that

1550
00:26:44,550 --> 00:26:44,560
ahead and create that
 

1551
00:26:44,560 --> 00:26:51,269
ahead and create that
[Music]

1552
00:26:51,269 --> 00:26:51,279

 

1553
00:26:51,279 --> 00:26:52,470

okay and this time i'm just going to

1554
00:26:52,470 --> 00:26:52,480
okay and this time i'm just going to
 

1555
00:26:52,480 --> 00:26:54,470
okay and this time i'm just going to
paste the code right

1556
00:26:54,470 --> 00:26:54,480
paste the code right
 

1557
00:26:54,480 --> 00:26:56,789
paste the code right
and this basically does the exact same

1558
00:26:56,789 --> 00:26:56,799
and this basically does the exact same
 

1559
00:26:56,799 --> 00:26:57,909
and this basically does the exact same
thing it just makes sure that the

1560
00:26:57,909 --> 00:26:57,919
thing it just makes sure that the
 

1561
00:26:57,919 --> 00:26:59,110
thing it just makes sure that the
folders exist

1562
00:26:59,110 --> 00:26:59,120
folders exist
 

1563
00:26:59,120 --> 00:27:02,789
folders exist
and then it goes ahead and compiles the

1564
00:27:02,789 --> 00:27:02,799
and then it goes ahead and compiles the
 

1565
00:27:02,799 --> 00:27:05,590
and then it goes ahead and compiles the
vertex shader the fragment shader and

1566
00:27:05,590 --> 00:27:05,600
vertex shader the fragment shader and
 

1567
00:27:05,600 --> 00:27:05,990
vertex shader the fragment shader and
then

1568
00:27:05,990 --> 00:27:06,000
then
 

1569
00:27:06,000 --> 00:27:07,830
then
goes ahead and copies our assets for us

1570
00:27:07,830 --> 00:27:07,840
goes ahead and copies our assets for us
 

1571
00:27:07,840 --> 00:27:09,590
goes ahead and copies our assets for us
and says done okay so this is pretty

1572
00:27:09,590 --> 00:27:09,600
and says done okay so this is pretty
 

1573
00:27:09,600 --> 00:27:10,950
and says done okay so this is pretty
much the exact same thing

1574
00:27:10,950 --> 00:27:10,960
much the exact same thing
 

1575
00:27:10,960 --> 00:27:15,190
much the exact same thing
as the windows equivalent great

1576
00:27:15,190 --> 00:27:15,200
as the windows equivalent great
 

1577
00:27:15,200 --> 00:27:17,350
as the windows equivalent great
now that we have that hooked up one last

1578
00:27:17,350 --> 00:27:17,360
now that we have that hooked up one last
 

1579
00:27:17,360 --> 00:27:19,190
now that we have that hooked up one last
thing that we need to do

1580
00:27:19,190 --> 00:27:19,200
thing that we need to do
 

1581
00:27:19,200 --> 00:27:21,590
thing that we need to do
is we need to go ahead and hook this up

1582
00:27:21,590 --> 00:27:21,600
is we need to go ahead and hook this up
 

1583
00:27:21,600 --> 00:27:22,789
is we need to go ahead and hook this up
in our tasks

1584
00:27:22,789 --> 00:27:22,799
in our tasks
 

1585
00:27:22,799 --> 00:27:26,070
in our tasks
okay so if we go into our tasks listing

1586
00:27:26,070 --> 00:27:26,080
okay so if we go into our tasks listing
 

1587
00:27:26,080 --> 00:27:26,950
okay so if we go into our tasks listing
we have

1588
00:27:26,950 --> 00:27:26,960
we have
 

1589
00:27:26,960 --> 00:27:28,870
we have
our build engine build testbed build

1590
00:27:28,870 --> 00:27:28,880
our build engine build testbed build
 

1591
00:27:28,880 --> 00:27:31,190
our build engine build testbed build
everything and then clean everything

1592
00:27:31,190 --> 00:27:31,200
everything and then clean everything
 

1593
00:27:31,200 --> 00:27:33,029
everything and then clean everything
and uh we are just going to add a new

1594
00:27:33,029 --> 00:27:33,039
and uh we are just going to add a new
 

1595
00:27:33,039 --> 00:27:34,389
and uh we are just going to add a new
entry here

1596
00:27:34,389 --> 00:27:34,399
entry here
 

1597
00:27:34,399 --> 00:27:37,510
entry here
to the end of this list so right

1598
00:27:37,510 --> 00:27:37,520
to the end of this list so right
 

1599
00:27:37,520 --> 00:27:41,510
to the end of this list so right
here called post build and all this does

1600
00:27:41,510 --> 00:27:41,520
here called post build and all this does
 

1601
00:27:41,520 --> 00:27:43,669
here called post build and all this does
is for windows it calls the batch file

1602
00:27:43,669 --> 00:27:43,679
is for windows it calls the batch file
 

1603
00:27:43,679 --> 00:27:44,950
is for windows it calls the batch file
for linux it calls

1604
00:27:44,950 --> 00:27:44,960
for linux it calls
 

1605
00:27:44,960 --> 00:27:48,149
for linux it calls
the sh file and

1606
00:27:48,149 --> 00:27:48,159
the sh file and
 

1607
00:27:48,159 --> 00:27:49,350
the sh file and
we're simply just saying that the

1608
00:27:49,350 --> 00:27:49,360
we're simply just saying that the
 

1609
00:27:49,360 --> 00:27:50,789
we're simply just saying that the
current working directory is the

1610
00:27:50,789 --> 00:27:50,799
current working directory is the
 

1611
00:27:50,799 --> 00:27:51,909
current working directory is the
workspace folder

1612
00:27:51,909 --> 00:27:51,919
workspace folder
 

1613
00:27:51,919 --> 00:27:55,190
workspace folder
okay and so now if we go ahead and press

1614
00:27:55,190 --> 00:27:55,200
okay and so now if we go ahead and press
 

1615
00:27:55,200 --> 00:27:56,950
okay and so now if we go ahead and press
f1

1616
00:27:56,950 --> 00:27:56,960
f1
 

1617
00:27:56,960 --> 00:27:59,430
f1
we can go ahead and run a task and we

1618
00:27:59,430 --> 00:27:59,440
we can go ahead and run a task and we
 

1619
00:27:59,440 --> 00:28:02,710
we can go ahead and run a task and we
can say that we want to run post build

1620
00:28:02,710 --> 00:28:02,720
can say that we want to run post build
 

1621
00:28:02,720 --> 00:28:05,350
can say that we want to run post build
and when we do that we actually see that

1622
00:28:05,350 --> 00:28:05,360
and when we do that we actually see that
 

1623
00:28:05,360 --> 00:28:07,909
and when we do that we actually see that
our error catching is working so

1624
00:28:07,909 --> 00:28:07,919
our error catching is working so
 

1625
00:28:07,919 --> 00:28:09,669
our error catching is working so
it says here compiling shaders says

1626
00:28:09,669 --> 00:28:09,679
it says here compiling shaders says
 

1627
00:28:09,679 --> 00:28:11,110
it says here compiling shaders says
which one we're compiling

1628
00:28:11,110 --> 00:28:11,120
which one we're compiling
 

1629
00:28:11,120 --> 00:28:12,630
which one we're compiling
and then it says it cannot open the

1630
00:28:12,630 --> 00:28:12,640
and then it says it cannot open the
 

1631
00:28:12,640 --> 00:28:14,549
and then it says it cannot open the
input file because it doesn't exist

1632
00:28:14,549 --> 00:28:14,559
input file because it doesn't exist
 

1633
00:28:14,559 --> 00:28:15,990
input file because it doesn't exist
which is exactly what we expect

1634
00:28:15,990 --> 00:28:16,000
which is exactly what we expect
 

1635
00:28:16,000 --> 00:28:18,870
which is exactly what we expect
because we haven't created it yet okay

1636
00:28:18,870 --> 00:28:18,880
because we haven't created it yet okay
 

1637
00:28:18,880 --> 00:28:19,750
because we haven't created it yet okay
so

1638
00:28:19,750 --> 00:28:19,760
so
 

1639
00:28:19,760 --> 00:28:23,510
so
that is basically preparing us

1640
00:28:23,510 --> 00:28:23,520
that is basically preparing us
 

1641
00:28:23,520 --> 00:28:26,549
that is basically preparing us
to move forward to the next part of this

1642
00:28:26,549 --> 00:28:26,559
to move forward to the next part of this
 

1643
00:28:26,559 --> 00:28:27,750
to move forward to the next part of this
where we're actually going to start

1644
00:28:27,750 --> 00:28:27,760
where we're actually going to start
 

1645
00:28:27,760 --> 00:28:28,389
where we're actually going to start
building out

1646
00:28:28,389 --> 00:28:28,399
building out
 

1647
00:28:28,399 --> 00:28:32,470
building out
the pipeline so building up the pipeline

1648
00:28:32,470 --> 00:28:32,480
the pipeline so building up the pipeline
 

1649
00:28:32,480 --> 00:28:34,630
the pipeline so building up the pipeline
is going to be probably a pretty long

1650
00:28:34,630 --> 00:28:34,640
is going to be probably a pretty long
 

1651
00:28:34,640 --> 00:28:35,510
is going to be probably a pretty long
video so

1652
00:28:35,510 --> 00:28:35,520
video so
 

1653
00:28:35,520 --> 00:28:38,389
video so
i'm going to split this here and next

1654
00:28:38,389 --> 00:28:38,399
i'm going to split this here and next
 

1655
00:28:38,399 --> 00:28:39,909
i'm going to split this here and next
time we are actually going to start

1656
00:28:39,909 --> 00:28:39,919
time we are actually going to start
 

1657
00:28:39,919 --> 00:28:43,269
time we are actually going to start
coding out the pipeline and

1658
00:28:43,269 --> 00:28:43,279
coding out the pipeline and
 

1659
00:28:43,279 --> 00:28:45,990
coding out the pipeline and
i should warn that uh you know this is

1660
00:28:45,990 --> 00:28:46,000
i should warn that uh you know this is
 

1661
00:28:46,000 --> 00:28:46,870
i should warn that uh you know this is
another

1662
00:28:46,870 --> 00:28:46,880
another
 

1663
00:28:46,880 --> 00:28:50,470
another
unfortunate um instance of it's gonna

1664
00:28:50,470 --> 00:28:50,480
unfortunate um instance of it's gonna
 

1665
00:28:50,480 --> 00:28:52,549
unfortunate um instance of it's gonna
take a long time to get through this

1666
00:28:52,549 --> 00:28:52,559
take a long time to get through this
 

1667
00:28:52,559 --> 00:28:54,549
take a long time to get through this
uh not as long as it's taken us to get

1668
00:28:54,549 --> 00:28:54,559
uh not as long as it's taken us to get
 

1669
00:28:54,559 --> 00:28:55,909
uh not as long as it's taken us to get
to this point so far but

1670
00:28:55,909 --> 00:28:55,919
to this point so far but
 

1671
00:28:55,919 --> 00:28:58,789
to this point so far but
uh there is a lot to consider here with

1672
00:28:58,789 --> 00:28:58,799
uh there is a lot to consider here with
 

1673
00:28:58,799 --> 00:29:00,549
uh there is a lot to consider here with
the compilation of shaders loading up

1674
00:29:00,549 --> 00:29:00,559
the compilation of shaders loading up
 

1675
00:29:00,559 --> 00:29:02,470
the compilation of shaders loading up
those shaders

1676
00:29:02,470 --> 00:29:02,480
those shaders
 

1677
00:29:02,480 --> 00:29:04,389
those shaders
the graphics pipeline and tying that

1678
00:29:04,389 --> 00:29:04,399
the graphics pipeline and tying that
 

1679
00:29:04,399 --> 00:29:06,630
the graphics pipeline and tying that
into our current system

1680
00:29:06,630 --> 00:29:06,640
into our current system
 

1681
00:29:06,640 --> 00:29:10,470
into our current system
and ultimately getting something to

1682
00:29:10,470 --> 00:29:10,480
and ultimately getting something to
 

1683
00:29:10,480 --> 00:29:13,190
and ultimately getting something to
show up and render on the screen so um

1684
00:29:13,190 --> 00:29:13,200
show up and render on the screen so um
 

1685
00:29:13,200 --> 00:29:14,630
show up and render on the screen so um
just be prepared for that

1686
00:29:14,630 --> 00:29:14,640
just be prepared for that
 

1687
00:29:14,640 --> 00:29:16,870
just be prepared for that
uh and next time we will go ahead and

1688
00:29:16,870 --> 00:29:16,880
uh and next time we will go ahead and
 

1689
00:29:16,880 --> 00:29:18,549
uh and next time we will go ahead and
get started on that so

1690
00:29:18,549 --> 00:29:18,559
get started on that so
 

1691
00:29:18,559 --> 00:29:19,909
get started on that so
anyway thank you guys so much for

1692
00:29:19,909 --> 00:29:19,919
anyway thank you guys so much for
 

1693
00:29:19,919 --> 00:29:21,830
anyway thank you guys so much for
watching i really appreciate you guys i

1694
00:29:21,830 --> 00:29:21,840
watching i really appreciate you guys i
 

1695
00:29:21,840 --> 00:29:23,510
watching i really appreciate you guys i
hope you enjoy this series so far i hope

1696
00:29:23,510 --> 00:29:23,520
hope you enjoy this series so far i hope
 

1697
00:29:23,520 --> 00:29:24,950
hope you enjoy this series so far i hope
you're learning from it

1698
00:29:24,950 --> 00:29:24,960
you're learning from it
 

1699
00:29:24,960 --> 00:29:27,430
you're learning from it
if you like the video please toss it a

1700
00:29:27,430 --> 00:29:27,440
if you like the video please toss it a
 

1701
00:29:27,440 --> 00:29:28,070
if you like the video please toss it a
thumbs up

1702
00:29:28,070 --> 00:29:28,080
thumbs up
 

1703
00:29:28,080 --> 00:29:29,350
thumbs up
if you haven't already consider

1704
00:29:29,350 --> 00:29:29,360
if you haven't already consider
 

1705
00:29:29,360 --> 00:29:31,190
if you haven't already consider
subscribing hit the little bell

1706
00:29:31,190 --> 00:29:31,200
subscribing hit the little bell
 

1707
00:29:31,200 --> 00:29:33,190
subscribing hit the little bell
notification there to

1708
00:29:33,190 --> 00:29:33,200
notification there to
 

1709
00:29:33,200 --> 00:29:35,750
notification there to
get notified as to when the next video

1710
00:29:35,750 --> 00:29:35,760
get notified as to when the next video
 

1711
00:29:35,760 --> 00:29:37,430
get notified as to when the next video
in this or other series drops

1712
00:29:37,430 --> 00:29:37,440
in this or other series drops
 

1713
00:29:37,440 --> 00:29:38,870
in this or other series drops
and i will see you guys in the next

1714
00:29:38,870 --> 00:29:38,880
and i will see you guys in the next
 

1715
00:29:38,880 --> 00:29:42,490
and i will see you guys in the next
video

1716
00:29:42,490 --> 00:29:42,500

 

1717
00:29:42,500 --> 00:29:48,450

[Music]

1718
00:29:48,450 --> 00:29:48,460

 

1719
00:29:48,460 --> 00:29:53,970

[Music]


