dark-hammer / data / shaders / glsl / csm.vs.glsl

/***********************************************************************************
 * Copyright (c) 2013, Sepehr Taghdisian
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above copyright notice, 
 *   this list of conditions and the following disclaimer.
 * - Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation 
 *   and/or other materials provided with the distribution.
 *
 ***********************************************************************************/

#ifndef _MAX_INSTANCES_
#error "_MAX_INSTANCES_ not defined"
#endif

/* inputs */
in vec4 vsi_pos;
#if defined(_ALPHAMAP_)
in vec2 vsi_coord;
#endif
#if defined(_SKIN_)
in ivec4 vsi_blend_idxs;
in vec4 vsi_blend_weights;
#endif

/* outputs */
out vso {
    vec4 pos0;
    vec4 pos1;
    vec4 pos2;
#if defined(_ALPHAMAP_)
    vec2 coord;
#endif
} o;

layout(std140) uniform cb_frame
{
    mat4 c_cascade_mats[_CASCADE_CNT_];
};

layout(std140) uniform cb_xforms
{
    mat3x4 c_mats[_MAX_INSTANCES_];
};

void main()
{
#if defined(_SKIN_)
    vec4 pos = skin_vertex_p(vsi_blend_idxs, vsi_blend_weights, vsi_pos);
#else
    vec4 pos = vsi_pos;
#endif

    vec4 pos_ws = vec4(pos * c_mats[gl_InstanceID], 1);

    o.pos0 = pos_ws * c_cascade_mats[0];
    o.pos1 = pos_ws * c_cascade_mats[1];
    o.pos2 = pos_ws * c_cascade_mats[2];

#if defined(_ALPHAMAP_)
    o.coord = vec2(vsi_coord.x, vsi_coord.y);
#endif
}
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.