Writing shader attribs
This commit is contained in:
parent
df96e7d663
commit
3e5fff8d9d
|
@ -35,20 +35,20 @@ def make(context_id):
|
|||
frag.add_uniform('vec3 eye', '_cameraPosition')
|
||||
frag.add_out('vec4[2] fragColor')
|
||||
|
||||
frag.write_main_header(' vec3 n = normalize(wnormal);')
|
||||
frag.write_attrib(' vec3 n = normalize(wnormal);')
|
||||
|
||||
frag.write_main_header(' vec2 screenPosition = wvpposition.xy / wvpposition.w;')
|
||||
frag.write_main_header(' vec2 depthCoord = screenPosition * 0.5 + 0.5;')
|
||||
frag.write_main_header(' float depth = texture(gbufferD, depthCoord).r * 2.0 - 1.0;')
|
||||
frag.write_attrib(' vec2 screenPosition = wvpposition.xy / wvpposition.w;')
|
||||
frag.write_attrib(' vec2 depthCoord = screenPosition * 0.5 + 0.5;')
|
||||
frag.write_attrib(' float depth = texture(gbufferD, depthCoord).r * 2.0 - 1.0;')
|
||||
|
||||
frag.write_main_header(' vec3 wpos = getPos2(invVP, depth, depthCoord);')
|
||||
frag.write_main_header(' vec4 mpos = invW * vec4(wpos, 1.0);')
|
||||
frag.write_main_header(' if (abs(mpos.x) > 1.0) discard;')
|
||||
frag.write_main_header(' if (abs(mpos.y) > 1.0) discard;')
|
||||
frag.write_main_header(' if (abs(mpos.z) > 1.0) discard;')
|
||||
frag.write_attrib(' vec3 wpos = getPos2(invVP, depth, depthCoord);')
|
||||
frag.write_attrib(' vec4 mpos = invW * vec4(wpos, 1.0);')
|
||||
frag.write_attrib(' if (abs(mpos.x) > 1.0) discard;')
|
||||
frag.write_attrib(' if (abs(mpos.y) > 1.0) discard;')
|
||||
frag.write_attrib(' if (abs(mpos.z) > 1.0) discard;')
|
||||
|
||||
frag.write_main_header(' vec3 vVec = normalize(eye - wpos);')
|
||||
frag.write_main_header(' vec2 texCoord = mpos.xy * 0.5 + 0.5;')
|
||||
frag.write_attrib(' vec3 vVec = normalize(eye - wpos);')
|
||||
frag.write_attrib(' vec2 texCoord = mpos.xy * 0.5 + 0.5;')
|
||||
|
||||
frag.write('vec3 basecol;')
|
||||
frag.write('float roughness;')
|
||||
|
|
|
@ -25,7 +25,7 @@ def make(context_id, rpasses, shadowmap=False):
|
|||
tesc = None
|
||||
tese = None
|
||||
|
||||
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
|
||||
vert.write_attrib('vec4 spos = vec4(pos, 1.0);')
|
||||
|
||||
parse_opacity = 'translucent' in rpasses or mat_state.material.arm_discard
|
||||
if parse_opacity:
|
||||
|
|
|
@ -129,7 +129,7 @@ def make_base(con_mesh, parse_opacity):
|
|||
tese = None
|
||||
|
||||
vert.add_uniform('mat3 N', '_normalMatrix')
|
||||
vert.write_main_header(' vec4 spos = vec4(pos, 1.0);')
|
||||
vert.write_attrib(' vec4 spos = vec4(pos, 1.0);')
|
||||
|
||||
vattr_written = False
|
||||
is_displacement = mat_utils.disp_linked(mat_state.output_node)
|
||||
|
@ -351,7 +351,7 @@ def make_deferred_plus(con_mesh):
|
|||
frag.add_out('vec4[3] fragColor')
|
||||
|
||||
vert.add_uniform('mat3 N', '_normalMatrix')
|
||||
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
|
||||
vert.write_attrib('vec4 spos = vec4(pos, 1.0);')
|
||||
|
||||
frag.ins = vert.outs
|
||||
vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix')
|
||||
|
@ -391,7 +391,7 @@ def make_forward_mobile(con_mesh):
|
|||
tese = None
|
||||
|
||||
vert.add_uniform('mat3 N', '_normalMatrix')
|
||||
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
|
||||
vert.write_attrib('vec4 spos = vec4(pos, 1.0);')
|
||||
frag.ins = vert.outs
|
||||
vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix')
|
||||
vert.add_uniform('mat4 W', '_worldMatrix')
|
||||
|
@ -482,7 +482,7 @@ def make_forward_solid(con_mesh):
|
|||
tesc = None
|
||||
tese = None
|
||||
|
||||
vert.write_main_header('vec4 spos = vec4(pos, 1.0);')
|
||||
vert.write_attrib('vec4 spos = vec4(pos, 1.0);')
|
||||
frag.ins = vert.outs
|
||||
vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix')
|
||||
vert.write('gl_Position = WVP * spos;')
|
||||
|
|
|
@ -15,6 +15,7 @@ class Shader:
|
|||
self.main_pre = ''
|
||||
self.main_header = ''
|
||||
self.main_textures = ''
|
||||
self.main_attribs = ''
|
||||
self.header = ''
|
||||
self.write_pre = False
|
||||
self.write_normal = 0
|
||||
|
@ -84,15 +85,17 @@ class Shader:
|
|||
def write_header(self, s):
|
||||
self.header += s + '\n'
|
||||
|
||||
def write_main_header(self, s):
|
||||
self.main_header += s + '\n'
|
||||
def write_attrib(self, s):
|
||||
self.main_attribs += s + '\n'
|
||||
|
||||
def is_equal(self, sh):
|
||||
self.vstruct_to_vsin()
|
||||
return self.ins == sh.ins and \
|
||||
self.main == sh.main and \
|
||||
self.main_header == sh.main_header and \
|
||||
self.main_pre == sh.main_pre
|
||||
self.main_pre == sh.main_pre and \
|
||||
self.main_textures == sh.main_textures and \
|
||||
self.main_attribs == sh.main_attribs
|
||||
|
||||
def vstruct_to_vsin(self):
|
||||
if self.shader_type != 'vert' or self.ins != [] or not self.vstruct_as_vsin: # Vertex structure as vertex shader input
|
||||
|
@ -155,6 +158,7 @@ class Shader:
|
|||
for f in self.functions:
|
||||
s += self.functions[f]
|
||||
s += 'void main() {\n'
|
||||
s += self.main_attribs
|
||||
s += self.main_textures
|
||||
s += self.main_header
|
||||
s += self.main_pre
|
||||
|
|
Loading…
Reference in a new issue