Use float4s to prevent padding
This commit is contained in:
parent
74808c224a
commit
660406bab2
|
@ -21,7 +21,7 @@ uniform sampler2D gbuffer1;
|
|||
|
||||
uniform float envmapStrength;
|
||||
#ifdef _Irr
|
||||
//!uniform float shirr[27];
|
||||
//!uniform vec4 shirr[7];
|
||||
#endif
|
||||
#ifdef _Rad
|
||||
uniform sampler2D senvmapRadiance;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
uniform float shirr[28];
|
||||
uniform vec4 shirr[7];
|
||||
|
||||
vec3 shIrradiance(const vec3 nor, const float scale) {
|
||||
const float c1 = 0.429043;
|
||||
|
@ -6,16 +6,16 @@ vec3 shIrradiance(const vec3 nor, const float scale) {
|
|||
const float c3 = 0.743125;
|
||||
const float c4 = 0.886227;
|
||||
const float c5 = 0.247708;
|
||||
vec3 cl00, cl1m1, cl10, cl11, cl2m2, cl2m1, cl20, cl21, cl22;
|
||||
cl00 = vec3(shirr[0], shirr[1], shirr[2]);
|
||||
cl1m1 = vec3(shirr[3], shirr[4], shirr[5]);
|
||||
cl10 = vec3(shirr[6], shirr[7], shirr[8]);
|
||||
cl11 = vec3(shirr[9], shirr[10], shirr[11]);
|
||||
cl2m2 = vec3(shirr[12], shirr[13], shirr[14]);
|
||||
cl2m1 = vec3(shirr[15], shirr[16], shirr[17]);
|
||||
cl20 = vec3(shirr[18], shirr[19], shirr[20]);
|
||||
cl21 = vec3(shirr[21], shirr[22], shirr[23]);
|
||||
cl22 = vec3(shirr[24], shirr[25], shirr[26]);
|
||||
// TODO: Use padding for 4th component and pass shirr[].xyz directly
|
||||
vec3 cl00 = vec3(shirr[0].x, shirr[0].y, shirr[0].z);
|
||||
vec3 cl1m1 = vec3(shirr[0].w, shirr[1].x, shirr[1].y);
|
||||
vec3 cl10 = vec3(shirr[1].z, shirr[1].w, shirr[2].x);
|
||||
vec3 cl11 = vec3(shirr[2].y, shirr[2].z, shirr[2].w);
|
||||
vec3 cl2m2 = vec3(shirr[3].x, shirr[3].y, shirr[3].z);
|
||||
vec3 cl2m1 = vec3(shirr[3].w, shirr[4].x, shirr[4].y);
|
||||
vec3 cl20 = vec3(shirr[4].z, shirr[4].w, shirr[5].x);
|
||||
vec3 cl21 = vec3(shirr[5].y, shirr[5].z, shirr[5].w);
|
||||
vec3 cl22 = vec3(shirr[6].x, shirr[6].y, shirr[6].z);
|
||||
return (
|
||||
c1 * cl22 * (nor.y * nor.y - (-nor.z) * (-nor.z)) +
|
||||
c3 * cl20 * nor.x * nor.x +
|
||||
|
|
|
@ -221,7 +221,10 @@ def parse_shader(sres, c, con, defs, lines, parse_attributes):
|
|||
else: # Constant
|
||||
if cid.find('[') != -1: # Float arrays
|
||||
cid = cid.split('[')[0]
|
||||
ctype = 'floats'
|
||||
if ctype == 'vec4':
|
||||
ctype = 'float4s'
|
||||
else:
|
||||
ctype = 'floats'
|
||||
for const in con['constants']:
|
||||
if const['name'] == cid:
|
||||
found = True
|
||||
|
|
|
@ -161,8 +161,13 @@ def compile_project(target_name=None, is_publish=False, watch=False, patch=False
|
|||
|
||||
if armutils.get_os() == 'win':
|
||||
cmd.append('-g')
|
||||
if (target_name == '' or target_name == '--run') and wrd.arm_gapi_win == 'direct3d9':
|
||||
cmd.append('direct3d9')
|
||||
if target_name == '' or target_name == '--run':
|
||||
if wrd.arm_gapi_win == 'direct3d9':
|
||||
cmd.append('direct3d9')
|
||||
elif wrd.arm_gapi_win == 'direct3d11':
|
||||
cmd.append('direct3d11')
|
||||
else:
|
||||
cmd.append('opengl2')
|
||||
else:
|
||||
cmd.append('opengl2')
|
||||
|
||||
|
|
|
@ -10,6 +10,8 @@ import material.make_mesh as make_mesh
|
|||
import material.make_shadowmap as make_shadowmap
|
||||
import material.make_transluc as make_transluc
|
||||
import material.make_overlay as make_overlay
|
||||
import material.make_depth as make_depth
|
||||
import material.make_decal as make_decal
|
||||
|
||||
def parse(material, mat_data, mat_users, rid):
|
||||
wrd = bpy.data.worlds['Arm']
|
||||
|
|
|
@ -1,5 +1,21 @@
|
|||
import bpy
|
||||
import make_state as state
|
||||
import material.mat_state as mat_state
|
||||
import material.mat_utils as mat_utils
|
||||
import armutils
|
||||
import assets
|
||||
|
||||
def make(context_id):
|
||||
pass
|
||||
# con_depth = mat_state.data.add_context({ 'name': context_id, 'depth_write': False, 'compare_mode': 'less', 'cull_mode': 'clockwise' })
|
||||
# return con_depth
|
||||
|
||||
con_depth = mat_state.data.add_context({ 'name': context_id, 'depth_write': True, 'compare_mode': 'less', 'cull_mode': 'clockwise', 'color_write_red': False, 'color_write_green': False, 'color_write_blue': False, 'color_write_alpha': False })
|
||||
|
||||
vert = con_depth.make_vert()
|
||||
frag = con_depth.make_frag()
|
||||
|
||||
vert.add_uniform('mat4 WVP', '_worldViewProjectionMatrix')
|
||||
vert.write('gl_Position = WVP * vec4(pos, 1.0);')
|
||||
|
||||
frag.add_out('vec4 fragColor')
|
||||
frag.write('fragColor = vec4(0.0);')
|
||||
|
||||
return con_depth
|
||||
|
|
|
@ -218,7 +218,7 @@ def make_forward_base(con_mesh, parse_opacity=False):
|
|||
|
||||
if '_Irr' in wrd.world_defs:
|
||||
frag.add_include('../../Shaders/std/shirr.glsl')
|
||||
frag.add_uniform('float shirr[28]', link='_envmapIrradiance', included=True)
|
||||
frag.add_uniform('vec4 shirr[7]', link='_envmapIrradiance', included=True)
|
||||
if '_Rad' in wrd.world_defs:
|
||||
frag.add_uniform('sampler2D senvmapRadiance', link='_envmapRadiance')
|
||||
frag.add_uniform('sampler2D senvmapBrdf', link='_envmapBrdf')
|
||||
|
|
|
@ -16,6 +16,11 @@ def make(context_id, rpasses):
|
|||
frag.add_out('vec4 fragColor')
|
||||
vert.write('vec4 spos = vec4(pos, 1.0);')
|
||||
|
||||
# TODO: pass vbuf with proper struct
|
||||
vert.write('vec3 t1 = nor; // Temp for d3d')
|
||||
if mat_state.data.is_elem('tex'):
|
||||
vert.write('vec2 t2 = tex; // Temp for d3d')
|
||||
|
||||
parse_opacity = 'translucent' in rpasses
|
||||
if parse_opacity:
|
||||
frag.write('vec3 n = vec3(0.0);') # Discard at compile time
|
||||
|
|
|
@ -30,9 +30,13 @@ class Shader:
|
|||
if ar[0] == 'sampler2D':
|
||||
self.context.add_texture_unit(ar[0], ar[1], link=link)
|
||||
else:
|
||||
# Prefer vec4[] for d3d to avoid padding
|
||||
if ar[0] == 'float' and '[' in ar[1]:
|
||||
ar[0] = 'floats'
|
||||
ar[1] = ar[1].split('[', 1)[0]
|
||||
elif ar[0] == 'vec4' and '[' in ar[1]:
|
||||
ar[0] = 'float4s'
|
||||
ar[1] = ar[1].split('[', 1)[0]
|
||||
self.context.add_constant(ar[0], ar[1], link=link)
|
||||
if included == False and s not in self.uniforms:
|
||||
self.uniforms.append(s)
|
||||
|
|
|
@ -62,14 +62,15 @@ project.addSources('Sources');
|
|||
if wrd.arm_play_console:
|
||||
f.write("project.addDefine('arm_profile');\n")
|
||||
|
||||
if wrd.arm_play_console or wrd.arm_ui:
|
||||
if wrd.arm_play_console:
|
||||
f.write(add_armory_library(sdk_path, 'lib/armui'))
|
||||
p = sdk_path + '/lib/armui/Assets/dejavu.ttf'
|
||||
f.write('project.addAssets("' + p.replace('\\', '/') + '");\n')
|
||||
|
||||
# f.write(add_armory_library(sdk_path, 'lib/haxeui/haxeui-core'))
|
||||
# f.write(add_armory_library(sdk_path, 'lib/haxeui/haxeui-kha'))
|
||||
# f.write(add_armory_library(sdk_path, 'lib/haxeui/hscript'))
|
||||
if wrd.arm_ui:
|
||||
f.write(add_armory_library(sdk_path, 'lib/haxeui-core'))
|
||||
f.write(add_armory_library(sdk_path, 'lib/haxeui-kha'))
|
||||
f.write(add_armory_library(sdk_path, 'lib/hscript'))
|
||||
|
||||
if wrd.arm_minimize == False:
|
||||
f.write("project.addDefine('arm_json');\n")
|
||||
|
|
Loading…
Reference in a new issue