mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2024-11-21 16:46:41 -08:00
41 lines
1.1 KiB
GLSL
41 lines
1.1 KiB
GLSL
|
#version 150
|
||
|
#extension GL_ARB_separate_shader_objects : enable
|
||
|
|
||
|
layout(location = 0) in vec4 position_in;
|
||
|
layout(location = 1) in vec3 normal_in;
|
||
|
layout(location = 2) in vec3 diffuse_in;
|
||
|
layout(location = 3) in vec4 transform_in;
|
||
|
|
||
|
layout(location = 0) out vec4 colour_out;
|
||
|
|
||
|
uniform gear_block
|
||
|
{
|
||
|
uniform mat4 mvp_matrix;
|
||
|
uniform mat3 normal_matrix;
|
||
|
} gear;
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
const vec3 l_pos = vec3(5.0, 5.0, 10.0);
|
||
|
vec3 dir, normal;
|
||
|
vec4 position;
|
||
|
float att;
|
||
|
|
||
|
position.x = transform_in.x * position_in.x - transform_in.y * position_in.y + transform_in.z;
|
||
|
position.y = transform_in.x * position_in.y + transform_in.y * position_in.x + transform_in.w;
|
||
|
position.zw = position_in.zw;
|
||
|
|
||
|
gl_Position = gear.mvp_matrix * position;
|
||
|
dir = normalize(l_pos - gl_Position.xyz / gl_Position.w);
|
||
|
|
||
|
normal.x = transform_in.x * normal_in.x - transform_in.y * normal_in.y;
|
||
|
normal.y = transform_in.x * normal_in.y + transform_in.y * normal_in.x;
|
||
|
normal.z = normal_in.z;
|
||
|
att = 0.2 + dot(dir, normalize(gear.normal_matrix * normal));
|
||
|
|
||
|
colour_out.xyz = diffuse_in.xyz * att;
|
||
|
colour_out.w = 1.0;
|
||
|
|
||
|
gl_Position.y = -gl_Position.y;
|
||
|
}
|