fixes for gl3
This commit is contained in:
@ -1,42 +1,5 @@
|
||||
const char *skin_vert_src =
|
||||
"#version 330\n"
|
||||
|
||||
"layout(std140) uniform State\n"
|
||||
"{\n"
|
||||
" int u_alphaTest;\n"
|
||||
" float u_alphaRef;\n"
|
||||
|
||||
" int u_fogEnable;\n"
|
||||
" float u_fogStart;\n"
|
||||
" float u_fogEnd;\n"
|
||||
" vec4 u_fogColor;\n"
|
||||
"};\n"
|
||||
|
||||
"layout(std140) uniform Scene\n"
|
||||
"{\n"
|
||||
" mat4 u_proj;\n"
|
||||
" mat4 u_view;\n"
|
||||
"};\n"
|
||||
|
||||
"#define MAX_LIGHTS 8\n"
|
||||
"struct Light {\n"
|
||||
" vec4 position;\n"
|
||||
" vec4 direction;\n"
|
||||
" vec4 color;\n"
|
||||
" float radius;\n"
|
||||
" float minusCosAngle;\n"
|
||||
"};\n"
|
||||
|
||||
"layout(std140) uniform Object\n"
|
||||
"{\n"
|
||||
" mat4 u_world;\n"
|
||||
" vec4 u_ambLight;\n"
|
||||
" int u_numLights;\n"
|
||||
" Light u_lights[MAX_LIGHTS];\n"
|
||||
"};\n"
|
||||
|
||||
"uniform vec4 u_matColor;\n"
|
||||
"uniform vec4 u_surfaceProps; // amb, spec, diff, extra\n"
|
||||
"uniform mat4 u_boneMatrices[64];\n"
|
||||
|
||||
"layout(location = 0) in vec3 in_pos;\n"
|
||||
"layout(location = 1) in vec3 in_normal;\n"
|
||||
@ -45,8 +8,6 @@ const char *skin_vert_src =
|
||||
"layout(location = 11) in vec4 in_weights;\n"
|
||||
"layout(location = 12) in vec4 in_indices;\n"
|
||||
|
||||
"uniform mat4 u_boneMatrices[64];\n"
|
||||
|
||||
"out vec4 v_color;\n"
|
||||
"out vec2 v_tex0;\n"
|
||||
"out float v_fog;\n"
|
||||
@ -54,27 +15,45 @@ const char *skin_vert_src =
|
||||
"void\n"
|
||||
"main(void)\n"
|
||||
"{\n"
|
||||
" mat4 m = u_boneMatrices[int(in_indices[0])] * in_weights[0];\n"
|
||||
" m += u_boneMatrices[int(in_indices[1])] * in_weights[1];\n"
|
||||
" m += u_boneMatrices[int(in_indices[2])] * in_weights[2];\n"
|
||||
" m += u_boneMatrices[int(in_indices[3])] * in_weights[3];\n"
|
||||
" mat4 world = u_world * m;\n"
|
||||
" vec3 SkinVertex = vec3(0.0, 0.0, 0.0);\n"
|
||||
" vec3 SkinNormal = vec3(0.0, 0.0, 0.0);\n"
|
||||
" for(int i = 0; i < 4; i++){\n"
|
||||
" SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];\n"
|
||||
" SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];\n"
|
||||
" }\n"
|
||||
|
||||
" vec4 V = world * vec4(in_pos, 1.0);\n"
|
||||
" vec4 cV = u_view * V; \n"
|
||||
" gl_Position = u_proj * cV;\n"
|
||||
" vec3 N = mat3(world) * in_normal;\n"
|
||||
" vec4 V = u_world * vec4(SkinVertex, 1.0);\n"
|
||||
" gl_Position = u_proj * u_view * V;\n"
|
||||
" vec3 N = mat3(u_world) * SkinNormal;\n"
|
||||
|
||||
" v_color = in_color;\n"
|
||||
" for(int i = 0; i < u_numLights; i++){\n"
|
||||
" float L = max(0.0, dot(N, -normalize(u_lights[i].direction.xyz)));\n"
|
||||
" v_color.rgb += u_lights[i].color.rgb*L*u_surfaceProps.z;\n"
|
||||
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||
|
||||
"#ifdef DIRECTIONALS\n"
|
||||
" for(int i = 0; i < MAX_LIGHTS; i++){\n"
|
||||
" if(u_directLights[i].enabled == 0.0)\n"
|
||||
" break;\n"
|
||||
" v_color.rgb += DoDirLight(u_directLights[i], N)*surfDiffuse;\n"
|
||||
" }\n"
|
||||
" v_color.rgb += u_ambLight.rgb*u_surfaceProps.x;\n"
|
||||
"#endif\n"
|
||||
"#ifdef POINTLIGHTS\n"
|
||||
" for(int i = 0; i < MAX_LIGHTS; i++){\n"
|
||||
" if(u_pointLights[i].enabled == 0.0)\n"
|
||||
" break;\n"
|
||||
" v_color.rgb += DoPointLight(u_pointLights[i], V.xyz, N)*surfDiffuse;\n"
|
||||
" }\n"
|
||||
"#endif\n"
|
||||
"#ifdef SPOTLIGHTS\n"
|
||||
" for(int i = 0; i < MAX_LIGHTS; i++){\n"
|
||||
" if(u_spotLights[i].enabled == 0.0)\n"
|
||||
" break;\n"
|
||||
" v_color.rgb += DoSpotLight(u_spotLights[i], V.xyz, N)*surfDiffuse;\n"
|
||||
" }\n"
|
||||
"#endif\n"
|
||||
" v_color *= u_matColor;\n"
|
||||
|
||||
" v_tex0 = in_tex0;\n"
|
||||
|
||||
" v_fog = clamp((cV.z - u_fogEnd)/(u_fogStart - u_fogEnd), 0.0, 1.0);\n"
|
||||
" v_fog = DoFog(gl_Position.z);\n"
|
||||
"}\n"
|
||||
;
|
||||
|
Reference in New Issue
Block a user