123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936 |
- /*
- --------------------------------------------------
- James William Fletcher (github.com/mrbid)
- October 2021 - esAux2.h v2.0
- --------------------------------------------------
- Requires:
- - vec.h: https://gist.github.com/mrbid/77a92019e1ab8b86109bf103166bd04e
- - mat.h: https://gist.github.com/mrbid/cbc69ec9d99b0fda44204975fcbeae7c
- v2.0:
- - added support for fullbright texture mapping
- - added esRebind()
- v1.0:
- The shaders are the product of a little help from:
- http://www.cs.toronto.edu/~jacobson/phong-demo/
- https://www.mathematik.uni-marburg.de/~thormae/lectures/graphics1/code/WebGLShaderLightMat/ShaderLightMat.html
- https://www.gsn-lib.org/docs/nodes/ShaderPluginNode.php
- https://www.khronos.org/registry/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf
- https://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf
- https://www.khronos.org/registry/OpenGL-Refpages/es2.0/
- The phong uses BlinnPhong by default, if you wish to use
- vanilla phong just specify the following definition in
- your source file: #define REGULAR_PHONG
- */
- #ifndef AUX_H
- #define AUX_H
- #include "vec.h"
- #include "mat.h"
- //*************************************
- // MATRIX
- //*************************************
- // structures
- typedef struct
- {
- GLuint vid; // Vertex Array Buffer ID
- GLuint iid; // Index Array Buffer ID
- GLuint cid; // Colour Array Buffer ID
- GLuint nid; // Normal Array Buffer ID
- GLuint tid; // TexCoord Array Buffer ID
- } ESModel;
- //*************************************
- // UTILITY
- //*************************************
- GLuint esRand(const GLuint min, const GLuint max);
- GLfloat esRandFloat(const GLfloat min, const GLfloat max);
- void esBind(const GLenum target, GLuint* buffer, const void* data, const GLsizeiptr datalen, const GLenum usage);
- void esRebind(const GLenum target, GLuint* buffer, const void* data, const GLsizeiptr datalen, const GLenum usage);
- void esBindModel(ESModel* model, const GLfloat* vertices, const GLsizei vertlen, const GLushort* indices, const GLsizei indlen);
- GLuint esLoadTexture(const GLuint w, const GLuint h, const unsigned char* data);
- GLuint esLoadTextureA(const GLuint w, const GLuint h, const unsigned char* data);
- //*************************************
- // SHADER
- //*************************************
- void makeAllShaders();
- void makeFullbright();
- void makeLambert();
- void makeLambert1();
- void makeLambert2();
- void makeLambert3();
- void makePhong();
- void makePhong1();
- void makePhong2();
- void makePhong3();
- void shadeFullbrightT(GLint* position, GLint* projection, GLint* modelview, GLint* texcoord, GLint* sampler); // texture + no shading
- void shadeFullbright(GLint* position, GLint* projection, GLint* modelview, GLint* color, GLint* opacity); // solid color + no shading
- void shadeLambert(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* color, GLint* opacity); // solid color + no normals
- void shadeLambert1(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity); // solid color + normals
- void shadeLambert2(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* color, GLint* opacity); // colors + no normals
- void shadeLambert3(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity); // colors + normals
- void shadePhong(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* color, GLint* opacity); // solid color + no normals
- void shadePhong1(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity); // solid color + normals
- void shadePhong2(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* color, GLint* opacity); // colors + no normals
- void shadePhong3(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity); // colors + normals
- //*************************************
- // UTILITY CODE
- //*************************************
- GLuint esRand(const GLuint min, const GLuint max)
- {
- return (rand()%(max+1-min))+min;
- }
- GLfloat esRandFloat(const GLfloat min, const GLfloat max)
- {
- static GLfloat rrndmax = 1.f/(GLfloat)RAND_MAX;
- return ( (((GLfloat)rand()) * rrndmax) * (max-min) ) + min;
- }
- void esBind(const GLenum target, GLuint* buffer, const void* data, const GLsizeiptr datalen, const GLenum usage)
- {
- glGenBuffers(1, buffer);
- glBindBuffer(target, *buffer);
- glBufferData(target, datalen, data, usage);
- }
- void esRebind(const GLenum target, GLuint* buffer, const void* data, const GLsizeiptr datalen, const GLenum usage)
- {
- glBindBuffer(target, *buffer);
- glBufferData(target, datalen, data, usage);
- }
- void esBindModel(ESModel* model, const GLfloat* vertices, const GLsizei vertlen, const GLushort* indices, const GLsizei indlen)
- {
- esBind(GL_ARRAY_BUFFER, &model->vid, vertices, vertlen * sizeof(GLfloat) * 3, GL_STATIC_DRAW);
- esBind(GL_ELEMENT_ARRAY_BUFFER, &model->iid, indices, indlen * sizeof(GLushort), GL_STATIC_DRAW);
- }
- GLuint esLoadTexture(const GLuint w, const GLuint h, const unsigned char* data)
- {
- GLuint textureId;
- // Use tightly packed data
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- // Generate a texture object
- glGenTextures(1, &textureId);
- // Bind the texture object
- glBindTexture(GL_TEXTURE_2D, textureId);
- // Load the texture
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
- // Set the filtering mode
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- return textureId;
- }
- GLuint esLoadTextureA(const GLuint w, const GLuint h, const unsigned char* data)
- {
- GLuint textureId;
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glGenTextures(1, &textureId);
- glBindTexture(GL_TEXTURE_2D, textureId);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- return textureId;
- }
- //*************************************
- // SHADER CODE
- //*************************************
- const GLchar* vt0 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "attribute vec4 position;\n"
- "attribute vec2 texcoord;\n"
- "varying vec2 vtc;\n"
- "void main()\n"
- "{\n"
- "vtc = texcoord;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* ft0 =
- "#version 100\n"
- "precision mediump float;\n"
- "varying vec2 vtc;\n"
- "uniform sampler2D tex;\n"
- "void main()\n"
- "{\n"
- "gl_FragColor = texture2D(tex, vtc);\n"
- "}\n";
- //
- const GLchar* v0 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform vec3 color;\n"
- "uniform float opacity;\n"
- "attribute vec4 position;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "void main()\n"
- "{\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* f0 =
- "#version 100\n"
- "precision mediump float;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "void main()\n"
- "{\n"
- "gl_FragColor = vec4(vertCol, vertOpa);\n"
- "}\n";
- //
- // solid color + no normals
- const GLchar* v1 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform vec3 color;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertNorm;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertNorm = vec3(modelview * vec4(position.xyz, 0.0));\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- // solid color + normal array
- const GLchar* v11 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform vec3 color;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "attribute vec3 normal;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertNorm;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertNorm = vec3(modelview * vec4(normal.xyz, 0.0));\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- // color array + normal array
- const GLchar* v12 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "attribute vec3 normal;\n"
- "attribute vec3 color;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertNorm;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertNorm = vec3(modelview * vec4(normal.xyz, 0.0));\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- // color array + no normals
- const GLchar* v13 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "attribute vec3 color;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertNorm;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertNorm = vec3(modelview * vec4(position.xyz, 0.0));\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* f1 =
- "#version 100\n"
- "precision mediump float;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertNorm;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- //"float rand(vec2 co){return fract(sin(dot(co, vec2(12.9898, 78.233))) * 43758.5453);}\n"
- "void main()\n"
- "{\n"
- //"vec3 ambientColor = vertCol * 0.148*sin(vertNorm);\n" // lol
- "vec3 ambientColor = vertCol * 0.148;\n"
- "vec3 diffuseColor = vertCol;\n"
- "vec3 normal = normalize(vertNorm);\n"
- "vec3 lightDir = normalize(vlightPos - vertPos);\n"
- "float lambertian = max(dot(lightDir,normal), 0.0);\n"
- "gl_FragColor = vec4(ambientColor + lambertian*diffuseColor, vertOpa);\n"
- "}\n";
- const GLchar* v2 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform mat4 normalmat;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "uniform vec3 color;\n"
- "attribute vec4 position;\n"
- "varying vec3 normalInterp;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "normalInterp = vec3(normalmat * vec4(position.xyz, 0.0));\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* v21 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform mat4 normalmat;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "uniform vec3 color;\n"
- "attribute vec4 position;\n"
- "attribute vec3 normal;\n"
- "varying vec3 normalInterp;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "normalInterp = vec3(normalmat * vec4(normal.xyz, 0.0));\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* v22 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform mat4 normalmat;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "attribute vec3 color;\n"
- "varying vec3 normalInterp;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "normalInterp = vec3(normalmat * vec4(position.xyz, 0.0));\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
- const GLchar* v23 =
- "#version 100\n"
- "uniform mat4 modelview;\n"
- "uniform mat4 projection;\n"
- "uniform mat4 normalmat;\n"
- "uniform float opacity;\n"
- "uniform vec3 lightpos;\n"
- "attribute vec4 position;\n"
- "attribute vec3 normal;\n"
- "attribute vec3 color;\n"
- "varying vec3 normalInterp;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec4 vertPos4 = modelview * position;\n"
- "vertPos = vec3(vertPos4) / vertPos4.w;\n"
- "vertCol = color;\n"
- "vertOpa = opacity;\n"
- "vlightPos = lightpos;\n"
- "normalInterp = vec3(normalmat * vec4(normal.xyz, 0.0));\n"
- "gl_Position = projection * modelview * position;\n"
- "}\n";
-
- const GLchar* f2 =
- "#version 100\n"
- "precision mediump float;\n"
- "varying vec3 normalInterp;\n"
- "varying vec3 vertPos;\n"
- "varying vec3 vertCol;\n"
- "varying float vertOpa;\n"
- "varying vec3 vlightPos;\n"
- "void main()\n"
- "{\n"
- "vec3 ambientColor = vertCol * 0.14;\n"
- "vec3 diffuseColor = vertCol;\n"
- "vec3 specColor = vec3(1.0, 1.0, 1.0);\n"
- "float specAmount = 4.0;\n"
- "vec3 normal = normalize(normalInterp);\n"
- "vec3 lightDir = normalize(vlightPos - vertPos);\n"
- "vec3 viewDir = normalize(-vertPos);\n"
- #ifdef REGULAR_PHONG
- "vec3 reflectDir = reflect(-lightDir, normal);\n"
- #else
- "vec3 halfDir = normalize(viewDir + lightDir);\n"
- #endif
- "float lumosity = dot(lightDir, normal);\n" // [0] you can max this or
- "vec3 specular = diffuseColor;\n"
- "if(lumosity > 0.0)\n"
- "{\n"
- #ifdef REGULAR_PHONG
- "float specAngle = max(dot(reflectDir, viewDir), 0.0);\n"
- #else
- "float specAngle = max(dot(halfDir, normal), 0.0);\n"
- #endif
- "specular += pow(specAngle, specAmount) * specColor;\n"
- "}\n"
- "gl_FragColor = vec4(ambientColor + max(specular * lumosity, 0.0), vertOpa);\n" // [0] .. you can max this
- "}\n";
- //
- GLuint shdFullbrightT;
- GLint shdFullbrightT_position;
- GLint shdFullbrightT_projection;
- GLint shdFullbrightT_modelview;
- GLint shdFullbrightT_texcoord;
- GLint shdFullbrightT_sampler;
- GLuint shdFullbright;
- GLint shdFullbright_position;
- GLint shdFullbright_projection;
- GLint shdFullbright_modelview;
- GLint shdFullbright_color;
- GLint shdFullbright_opacity;
- GLuint shdLambert;
- GLint shdLambert_position;
- GLint shdLambert_projection;
- GLint shdLambert_modelview;
- GLint shdLambert_lightpos;
- GLint shdLambert_color;
- GLint shdLambert_opacity;
- GLuint shdLambert1;
- GLint shdLambert1_position;
- GLint shdLambert1_projection;
- GLint shdLambert1_modelview;
- GLint shdLambert1_lightpos;
- GLint shdLambert1_color;
- GLint shdLambert1_normal;
- GLint shdLambert1_opacity;
- GLuint shdLambert2;
- GLint shdLambert2_position;
- GLint shdLambert2_projection;
- GLint shdLambert2_modelview;
- GLint shdLambert2_lightpos;
- GLint shdLambert2_color;
- GLint shdLambert2_normal;
- GLint shdLambert2_opacity;
- GLuint shdLambert3;
- GLint shdLambert3_position;
- GLint shdLambert3_projection;
- GLint shdLambert3_modelview;
- GLint shdLambert3_lightpos;
- GLint shdLambert3_color;
- GLint shdLambert3_opacity;
- GLuint shdPhong;
- GLint shdPhong_position;
- GLint shdPhong_projection;
- GLint shdPhong_modelview;
- GLint shdPhong_normalmat;
- GLint shdPhong_lightpos;
- GLint shdPhong_color;
- GLint shdPhong_opacity;
- GLuint shdPhong1;
- GLint shdPhong1_position;
- GLint shdPhong1_projection;
- GLint shdPhong1_modelview;
- GLint shdPhong1_normalmat;
- GLint shdPhong1_lightpos;
- GLint shdPhong1_color;
- GLint shdPhong1_normal;
- GLint shdPhong1_opacity;
- GLuint shdPhong2;
- GLint shdPhong2_position;
- GLint shdPhong2_projection;
- GLint shdPhong2_modelview;
- GLint shdPhong2_normalmat;
- GLint shdPhong2_lightpos;
- GLint shdPhong2_color;
- GLint shdPhong2_opacity;
- GLuint shdPhong3;
- GLint shdPhong3_position;
- GLint shdPhong3_projection;
- GLint shdPhong3_modelview;
- GLint shdPhong3_normalmat;
- GLint shdPhong3_lightpos;
- GLint shdPhong3_color;
- GLint shdPhong3_normal;
- GLint shdPhong3_opacity;
- //
- void makeFullbrightT()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &vt0, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &ft0, NULL);
- glCompileShader(fragmentShader);
- shdFullbrightT = glCreateProgram();
- glAttachShader(shdFullbrightT, vertexShader);
- glAttachShader(shdFullbrightT, fragmentShader);
- glLinkProgram(shdFullbrightT);
- shdFullbrightT_position = glGetAttribLocation(shdFullbrightT, "position");
- shdFullbrightT_texcoord = glGetAttribLocation(shdFullbrightT, "texcoord");
- shdFullbrightT_projection = glGetUniformLocation(shdFullbrightT, "projection");
- shdFullbrightT_modelview = glGetUniformLocation(shdFullbrightT, "modelview");
- shdFullbrightT_sampler = glGetUniformLocation(shdFullbrightT, "tex");
- }
- void makeFullbright()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v0, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f0, NULL);
- glCompileShader(fragmentShader);
- shdFullbright = glCreateProgram();
- glAttachShader(shdFullbright, vertexShader);
- glAttachShader(shdFullbright, fragmentShader);
- glLinkProgram(shdFullbright);
- shdFullbright_position = glGetAttribLocation(shdFullbright, "position");
-
- shdFullbright_projection = glGetUniformLocation(shdFullbright, "projection");
- shdFullbright_modelview = glGetUniformLocation(shdFullbright, "modelview");
- shdFullbright_color = glGetUniformLocation(shdFullbright, "color");
- shdFullbright_opacity = glGetUniformLocation(shdFullbright, "opacity");
- }
- void makeLambert()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v1, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f1, NULL);
- glCompileShader(fragmentShader);
- shdLambert = glCreateProgram();
- glAttachShader(shdLambert, vertexShader);
- glAttachShader(shdLambert, fragmentShader);
- glLinkProgram(shdLambert);
- shdLambert_position = glGetAttribLocation(shdLambert, "position");
-
- shdLambert_projection = glGetUniformLocation(shdLambert, "projection");
- shdLambert_modelview = glGetUniformLocation(shdLambert, "modelview");
- shdLambert_lightpos = glGetUniformLocation(shdLambert, "lightpos");
- shdLambert_color = glGetUniformLocation(shdLambert, "color");
- shdLambert_opacity = glGetUniformLocation(shdLambert, "opacity");
- }
- void makeLambert1()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v11, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f1, NULL);
- glCompileShader(fragmentShader);
- shdLambert1 = glCreateProgram();
- glAttachShader(shdLambert1, vertexShader);
- glAttachShader(shdLambert1, fragmentShader);
- glLinkProgram(shdLambert1);
- shdLambert1_position = glGetAttribLocation(shdLambert1, "position");
- shdLambert1_normal = glGetAttribLocation(shdLambert1, "normal");
-
- shdLambert1_projection = glGetUniformLocation(shdLambert1, "projection");
- shdLambert1_modelview = glGetUniformLocation(shdLambert1, "modelview");
- shdLambert1_lightpos = glGetUniformLocation(shdLambert1, "lightpos");
- shdLambert1_color = glGetUniformLocation(shdLambert1, "color");
- shdLambert1_opacity = glGetUniformLocation(shdLambert1, "opacity");
- }
- void makeLambert2()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v1, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f1, NULL);
- glCompileShader(fragmentShader);
- shdLambert3 = glCreateProgram();
- glAttachShader(shdLambert3, vertexShader);
- glAttachShader(shdLambert3, fragmentShader);
- glLinkProgram(shdLambert3);
- shdLambert3_position = glGetAttribLocation(shdLambert3, "position");
- shdLambert3_color = glGetAttribLocation(shdLambert3, "color");
-
- shdLambert3_projection = glGetUniformLocation(shdLambert3, "projection");
- shdLambert3_modelview = glGetUniformLocation(shdLambert3, "modelview");
- shdLambert3_lightpos = glGetUniformLocation(shdLambert3, "lightpos");
- shdLambert3_opacity = glGetUniformLocation(shdLambert3, "opacity");
- }
- void makeLambert3()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v12, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f1, NULL);
- glCompileShader(fragmentShader);
- shdLambert2 = glCreateProgram();
- glAttachShader(shdLambert2, vertexShader);
- glAttachShader(shdLambert2, fragmentShader);
- glLinkProgram(shdLambert2);
- shdLambert2_position = glGetAttribLocation(shdLambert2, "position");
- shdLambert2_normal = glGetAttribLocation(shdLambert2, "normal");
- shdLambert2_color = glGetAttribLocation(shdLambert2, "color");
-
- shdLambert2_projection = glGetUniformLocation(shdLambert2, "projection");
- shdLambert2_modelview = glGetUniformLocation(shdLambert2, "modelview");
- shdLambert2_lightpos = glGetUniformLocation(shdLambert2, "lightpos");
- shdLambert2_opacity = glGetUniformLocation(shdLambert2, "opacity");
- }
- void makePhong()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v2, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f2, NULL);
- glCompileShader(fragmentShader);
- shdPhong = glCreateProgram();
- glAttachShader(shdPhong, vertexShader);
- glAttachShader(shdPhong, fragmentShader);
- glLinkProgram(shdPhong);
- shdPhong_position = glGetAttribLocation(shdPhong, "position");
-
- shdPhong_projection = glGetUniformLocation(shdPhong, "projection");
- shdPhong_modelview = glGetUniformLocation(shdPhong, "modelview");
- shdPhong_normalmat = glGetUniformLocation(shdPhong, "normalmat");
- shdPhong_lightpos = glGetUniformLocation(shdPhong, "lightpos");
- shdPhong_opacity = glGetUniformLocation(shdPhong, "opacity");
- shdPhong_color = glGetUniformLocation(shdPhong, "color");
- }
- void makePhong1()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v21, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f2, NULL);
- glCompileShader(fragmentShader);
- shdPhong1 = glCreateProgram();
- glAttachShader(shdPhong1, vertexShader);
- glAttachShader(shdPhong1, fragmentShader);
- glLinkProgram(shdPhong1);
- shdPhong1_position = glGetAttribLocation(shdPhong1, "position");
- shdPhong1_normal = glGetAttribLocation(shdPhong1, "normal");
-
- shdPhong1_projection = glGetUniformLocation(shdPhong1, "projection");
- shdPhong1_modelview = glGetUniformLocation(shdPhong1, "modelview");
- shdPhong1_normalmat = glGetUniformLocation(shdPhong1, "normalmat");
- shdPhong1_lightpos = glGetUniformLocation(shdPhong1, "lightpos");
- shdPhong1_opacity = glGetUniformLocation(shdPhong1, "opacity");
- shdPhong1_color = glGetUniformLocation(shdPhong1, "color");
- }
- void makePhong2()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v22, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f2, NULL);
- glCompileShader(fragmentShader);
- shdPhong2 = glCreateProgram();
- glAttachShader(shdPhong2, vertexShader);
- glAttachShader(shdPhong2, fragmentShader);
- glLinkProgram(shdPhong2);
- shdPhong2_position = glGetAttribLocation(shdPhong2, "position");
- shdPhong2_color = glGetAttribLocation(shdPhong2, "color");
-
- shdPhong2_projection = glGetUniformLocation(shdPhong2, "projection");
- shdPhong2_modelview = glGetUniformLocation(shdPhong2, "modelview");
- shdPhong2_normalmat = glGetUniformLocation(shdPhong2, "normalmat");
- shdPhong2_lightpos = glGetUniformLocation(shdPhong2, "lightpos");
- shdPhong2_opacity = glGetUniformLocation(shdPhong2, "opacity");
- }
- void makePhong3()
- {
- GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
- glShaderSource(vertexShader, 1, &v23, NULL);
- glCompileShader(vertexShader);
- GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(fragmentShader, 1, &f2, NULL);
- glCompileShader(fragmentShader);
- shdPhong3 = glCreateProgram();
- glAttachShader(shdPhong3, vertexShader);
- glAttachShader(shdPhong3, fragmentShader);
- glLinkProgram(shdPhong3);
- shdPhong3_position = glGetAttribLocation(shdPhong3, "position");
- shdPhong3_color = glGetAttribLocation(shdPhong3, "color");
- shdPhong3_normal = glGetAttribLocation(shdPhong3, "normal");
-
- shdPhong3_projection = glGetUniformLocation(shdPhong3, "projection");
- shdPhong3_modelview = glGetUniformLocation(shdPhong3, "modelview");
- shdPhong3_normalmat = glGetUniformLocation(shdPhong3, "normalmat");
- shdPhong3_lightpos = glGetUniformLocation(shdPhong3, "lightpos");
- shdPhong3_opacity = glGetUniformLocation(shdPhong3, "opacity");
- }
- void makeAllShaders()
- {
- makeFullbrightT();
- makeFullbright();
- makeLambert();
- makeLambert1();
- makeLambert2();
- makeLambert3();
- makePhong();
- makePhong1();
- makePhong2();
- makePhong3();
- }
- void shadeFullbrightT(GLint* position, GLint* projection, GLint* modelview, GLint* texcoord, GLint* sampler)
- {
- *position = shdFullbrightT_position;
- *projection = shdFullbrightT_projection;
- *modelview = shdFullbrightT_modelview;
- *texcoord = shdFullbrightT_texcoord;
- *sampler = shdFullbrightT_sampler;
- glUseProgram(shdFullbrightT);
- }
- void shadeFullbright(GLint* position, GLint* projection, GLint* modelview, GLint* color, GLint* opacity)
- {
- *position = shdFullbright_position;
- *projection = shdFullbright_projection;
- *modelview = shdFullbright_modelview;
- *color = shdFullbright_color;
- *opacity = shdFullbright_opacity;
- glUseProgram(shdFullbright);
- }
- void shadeLambert(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* color, GLint* opacity)
- {
- *position = shdLambert_position;
- *projection = shdLambert_projection;
- *modelview = shdLambert_modelview;
- *lightpos = shdLambert_lightpos;
- *color = shdLambert_color;
- *opacity = shdLambert_opacity;
- glUseProgram(shdLambert);
- }
- void shadeLambert1(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity)
- {
- *position = shdLambert1_position;
- *projection = shdLambert1_projection;
- *modelview = shdLambert1_modelview;
- *lightpos = shdLambert1_lightpos;
- *color = shdLambert1_color;
- *normal = shdLambert1_normal;
- *opacity = shdLambert1_opacity;
- glUseProgram(shdLambert1);
- }
- // notice: swapped this from 2 to 3
- void shadeLambert3(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity)
- {
- *position = shdLambert2_position;
- *projection = shdLambert2_projection;
- *modelview = shdLambert2_modelview;
- *lightpos = shdLambert2_lightpos;
- *color = shdLambert2_color;
- *normal = shdLambert2_normal;
- *opacity = shdLambert2_opacity;
- glUseProgram(shdLambert2);
- }
- // notice: swapped this from 3 to 2
- void shadeLambert2(GLint* position, GLint* projection, GLint* modelview, GLint* lightpos, GLint* color, GLint* opacity)
- {
- *position = shdLambert3_position;
- *projection = shdLambert3_projection;
- *modelview = shdLambert3_modelview;
- *lightpos = shdLambert3_lightpos;
- *color = shdLambert3_color;
- *opacity = shdLambert3_opacity;
- glUseProgram(shdLambert3);
- }
- void shadePhong(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* color, GLint* opacity)
- {
- *position = shdPhong_position;
- *projection = shdPhong_projection;
- *modelview = shdPhong_modelview;
- *normalmat = shdPhong_normalmat;
- *lightpos = shdPhong_lightpos;
- *color = shdPhong_color;
- *opacity = shdPhong_opacity;
- glUseProgram(shdPhong);
- }
- void shadePhong1(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity)
- {
- *position = shdPhong1_position;
- *projection = shdPhong1_projection;
- *modelview = shdPhong1_modelview;
- *normalmat = shdPhong1_normalmat;
- *lightpos = shdPhong1_lightpos;
- *color = shdPhong1_color;
- *normal = shdPhong1_normal;
- *opacity = shdPhong1_opacity;
- glUseProgram(shdPhong1);
- }
- void shadePhong2(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* color, GLint* opacity)
- {
- *position = shdPhong2_position;
- *projection = shdPhong2_projection;
- *modelview = shdPhong2_modelview;
- *normalmat = shdPhong2_normalmat;
- *lightpos = shdPhong2_lightpos;
- *color = shdPhong2_color;
- *opacity = shdPhong2_opacity;
- glUseProgram(shdPhong2);
- }
- void shadePhong3(GLint* position, GLint* projection, GLint* modelview, GLint* normalmat, GLint* lightpos, GLint* normal, GLint* color, GLint* opacity)
- {
- *position = shdPhong3_position;
- *projection = shdPhong3_projection;
- *modelview = shdPhong3_modelview;
- *normalmat = shdPhong3_normalmat;
- *lightpos = shdPhong3_lightpos;
- *color = shdPhong3_color;
- *normal = shdPhong3_normal;
- *opacity = shdPhong3_opacity;
- glUseProgram(shdPhong3);
- }
- #endif
|