Home | History | Annotate | Download | only in src
      1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Adapted from the javascript implementation upon WebGL by kwaters@.
      6 
      7 #ifndef SHADERSRC_H_INCLUDED
      8 #define SHADERSRC_H_INCLUDED
      9 
     10 static const char *sFlatVertexSource =
     11     "attribute highp vec3 pos;\n"
     12     "attribute lowp vec4 colorIn;\n"
     13     "uniform highp mat4 mvp;\n"
     14     "varying lowp vec4 color;\n"
     15     "void main() {\n"
     16     "  color = colorIn;\n"
     17     "  gl_Position = mvp * vec4(pos.xyz, 1.);\n"
     18     "}\n";
     19 
     20 static const char *sFlatFragmentSource =
     21     "varying lowp vec4 color;\n"
     22     "void main() {\n"
     23     "  gl_FragColor = vec4(color.rgb, 1.0);\n"
     24     "}\n";
     25 
     26 static const char *sLitVertexSource =
     27     "attribute highp vec3 pos;\n"
     28     "attribute highp vec3 normal;\n"
     29     "attribute lowp vec4 colorIn;\n"
     30     "\n"
     31     "varying lowp vec4 color;\n"
     32     "\n"
     33     "uniform highp mat4 mvp;\n"
     34     "uniform highp mat3 normalMatrix;\n"
     35     "uniform lowp vec4 ambient;\n"
     36     "uniform lowp float shininess;\n"
     37     "uniform lowp vec3 light_0_direction;\n"
     38     "uniform lowp vec4 light_0_diffuse;\n"
     39     "uniform lowp vec4 light_0_specular;\n"
     40     "uniform lowp vec3 light_1_direction;\n"
     41     "uniform lowp vec4 light_1_diffuse;\n"
     42     "uniform lowp vec3 light_2_direction;\n"
     43     "uniform lowp vec4 light_2_diffuse;\n"
     44     "\n"
     45     "highp vec3 worldNormal;\n"
     46     "\n"
     47     "lowp vec4 SpecularLight(highp vec3 direction,\n"
     48     "                        lowp vec4 diffuseColor,\n"
     49     "                        lowp vec4 specularColor) {\n"
     50     "  lowp vec3 lightDir = normalize(direction);\n"
     51     "  lowp float diffuse = max(0., dot(worldNormal, lightDir));\n"
     52     "  lowp float specular = 0.;\n"
     53     "  if (diffuse > 0.) {\n"
     54     "    highp vec3 halfv = normalize(lightDir + vec3(0., 0., 1.));\n"
     55     "    specular = pow(max(0., dot(halfv, worldNormal)), shininess);\n"
     56     "  }\n"
     57     "  return diffuse * diffuseColor * colorIn + specular * specularColor;\n"
     58     "}\n"
     59     "\n"
     60     "lowp vec4 DiffuseLight(highp vec3 direction, lowp vec4 diffuseColor) {\n"
     61     "  highp vec3 lightDir = normalize(direction);\n"
     62     "  lowp float diffuse = max(0., dot(worldNormal, lightDir));\n"
     63     "  return diffuse * diffuseColor * colorIn;\n"
     64     "}\n"
     65     "\n"
     66     "void main() {\n"
     67     "  worldNormal = normalize(normalMatrix * normal);\n"
     68     "\n"
     69     "  gl_Position = mvp * vec4(pos, 1.);\n"
     70     "\n"
     71     "  color = ambient * colorIn;\n"
     72     "  color += SpecularLight(light_0_direction, light_0_diffuse,\n"
     73     "                         light_0_specular);\n"
     74     "  color += DiffuseLight(light_1_direction, light_1_diffuse);\n"
     75     "  color += DiffuseLight(light_2_direction, light_2_diffuse);\n"
     76     "}\n";
     77 
     78 static const char *sFadeVertexSource =
     79     "attribute highp vec2 pos;\n"
     80     "\n"
     81     "varying lowp vec4 color;\n"
     82     "\n"
     83     "uniform lowp float minFade;\n"
     84     "\n"
     85     "void main() {\n"
     86     "  color = vec4(minFade, minFade, minFade, 1.);\n"
     87     "  gl_Position = vec4(pos, 0., 1.);\n"
     88     "}\n";
     89 
     90 #endif  // SHADERSRC_H_INCLUDED
     91 
     92