Writing shader attribs

This commit is contained in:
luboslenco 2018-03-26 18:15:02 +02:00
parent df96e7d663
commit 3e5fff8d9d
4 changed files with 23 additions and 19 deletions

View file

@ -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;')

View file

@ -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:

View file

@ -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;')

View file

@ -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