void PrimitiveShader_PC::init() { model_xy_ = getAttribLocation("i2d_Vertex"); color_ = getAttribLocation("i2d_Color"); pv_ = getUniformLocation("i2d_PV"); glGenBuffers(1, &vbo_); }
SceneColorShader(void) : BaseProjNormalShader("shaders/scenecolor.vert", "shaders/scenecolor.frag"), texcoordAHandle(-1), modelViewMatUHandle(-1), lightPositionUHandle(-1), lightAmbientUHandle(-1), lightDiffuseUHandle(-1), lightSpecularUHandle(-1), lightShininessUHandle(-1), diffuseTexUHandle(-1) { // vertex attributes texcoordAHandle = getAttribLocation("a_vTexCoord"); // uniforms modelViewMatUHandle = getUniformLocation("u_mModelViewMat"); lightPositionUHandle = getUniformLocation("u_vLightPosition"); lightAmbientUHandle = getUniformLocation("u_fLightAmbient"); lightDiffuseUHandle = getUniformLocation("u_fLightDiffuse"); lightSpecularUHandle = getUniformLocation("u_fLightSpecular"); lightShininessUHandle = getUniformLocation("u_fLightShininess"); diffuseTexUHandle = getUniformLocation("u_tDiffuseTex"); CHECK_GL_ERROR(); }
BaseShader( const char *vertexProgramPath, const char *fragmentProgramPath) : m_PositionAHandle(-1) { setSourceFromFiles(vertexProgramPath, fragmentProgramPath); m_PositionAHandle = getAttribLocation("a_vPosition"); }
std::shared_ptr<VertexBufferObject> ShaderProgram::getAttribute(const char * name) { GLint attributeId = getAttribLocation(name); //return attributes[attributeId].lock(); return attributes[attributeId]; }
int texture2d5InitGl() { // http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_06 /* init_resources */ const GLchar* vertexShaderSource[] = { "#version 100\n attribute vec3 vertexPosition_modelspace; attribute vec2 texcoord; varying vec2 f_texcoord; uniform mat4 MVP; void main(){ gl_Position = (MVP * vec4(0,0,0,1))+vec4(vertexPosition_modelspace.y, vertexPosition_modelspace.z, 0, 0); f_texcoord = texcoord;}" }; //const GLchar* vertexShaderSource[] = { "#version 100\n attribute vec3 vertexPosition_modelspace; attribute vec2 texcoord; varying vec2 f_texcoord; uniform mat4 MVP; void main(){ gl_Position = (MVP * vec4(vertexPosition_modelspace,1))+vec4(vertexPosition_modelspace.y, vertexPosition_modelspace.z, 0, 0); f_texcoord = texcoord;}" }; //const GLchar* vertexShaderSource[] = { "#version 100\n attribute vec3 vertexPosition_modelspace; attribute vec2 texcoord; varying vec2 f_texcoord; uniform mat4 MVP; void main(){ gl_Position = MVP * vec4(vertexPosition_modelspace,1); f_texcoord = texcoord;}" }; const GLchar* fragmentShaderSource[] = { "#version 100\n precision mediump float; varying vec2 f_texcoord; uniform sampler2D mytexture; void main(void) { gl_FragColor = texture2D(mytexture, f_texcoord); }" }; texture2d5ProgramId = createProgram(vertexShaderSource, fragmentShaderSource); texture2d5Coord3dAttribute = getAttribLocation(texture2d5ProgramId, "vertexPosition_modelspace"); if (texture2d5Coord3dAttribute<0) { return -1; } texture2d5Texcoord_attribute = getAttribLocation(texture2d5ProgramId, "texcoord"); if (texture2d5Texcoord_attribute<0) { return -1; } // Get a handle for our "MVP" uniform texture2d5MatrixID = getUniformLocation(texture2d5ProgramId, "MVP"); texture2d5UniformMytexture = getUniformLocation(texture2d5ProgramId, "mytexture"); if (texture2d5UniformMytexture<0) { return -1; } return 0; }
BaseProjNormalShader(const char *vertexProgramPath, const char *fragmentProgramPath) : BaseProjectionShader(vertexProgramPath, fragmentProgramPath), m_NormalAHandle(-1), m_NormalMatUHandle(-1) { m_NormalAHandle = getAttribLocation("a_vNormal"); m_NormalMatUHandle = getUniformLocation("u_mNormalMat"); }
Color3DShader::Color3DShader() { /*} void SpriteShader::loadFromFiles(const char* vertexShader, const char* fragmentShader) {*/ GLuint vertexShaderId = loadShader("Calamity/Shader/color3D.vert", GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader("Calamity/Shader/color3D.frag", GL_FRAGMENT_SHADER); /*GLuint vertexShaderId = loadShader(vertexShader, GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader(fragmentShader, GL_FRAGMENT_SHADER);*/ programId = glCreateProgram(); glAttachShader(programId, vertexShaderId); glAttachShader(programId, fragmentShaderId); glLinkProgram(programId); // Check for errors GLint programSuccess = GL_TRUE; glGetProgramiv(programId, GL_LINK_STATUS, &programSuccess); if (programSuccess != GL_TRUE) { printf("Error linking program %d!\n", programId); printProgramLog(programId); glDeleteProgram(programId); programId = 0; glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); return; } glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); positionLocation = getAttribLocation("in_Position"); colorLocation = getAttribLocation("in_Color"); projectionMatrixLocation = getUniformLocation("projectionMatrix"); modelViewMatrixLocation = getUniformLocation("modelViewMatrix"); }
BaseShader(const char *vertexProgramPath, const char *fragmentProgramPath) : positionAHandle(-1) { setSourceFromFiles(vertexProgramPath, fragmentProgramPath); // vertex attributes positionAHandle = getAttribLocation("a_vPosition"); CHECK_GL_ERROR(); }
SimpleShader::SimpleShader() { GLuint vertexShaderId = loadShader("Calamity/Shader/simple.vert", GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader("Calamity/Shader/simple.frag", GL_FRAGMENT_SHADER); programId = glCreateProgram(); glAttachShader(programId, vertexShaderId); glAttachShader(programId, fragmentShaderId); glLinkProgram(programId); // Check for errors GLint programSuccess = GL_TRUE; glGetProgramiv(programId, GL_LINK_STATUS, &programSuccess); if (programSuccess != GL_TRUE) { printf("Error linking program %d!\n", programId); printProgramLog(programId); glDeleteProgram(programId); programId = 0; } glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); positionLocation = getAttribLocation("in_Position"); //texCoordLocation = getAttribLocation("in_TexCoord"); colorLocation = getAttribLocation("in_Color"); projectionMatrixLocation = getUniformLocation("projectionMatrix"); /*modelViewMatrixLocation = getUniformLocation("modelViewMatrix");*/ /*useTextureLocation = getUniformLocation("useTexture");*/ /*GLint textureLocation = getUniformLocation("tex"); glUniform1i(textureLocation, 0);*/ }
BaseProjNormalShader(const char *vertexProgramPath, const char *fragmentProgramPath) : BaseProjectionShader(vertexProgramPath, fragmentProgramPath), normalAHandle(-1), normalMatUHandle(-1) { // vertex attributes normalAHandle = getAttribLocation("a_vNormal"); // uniforms normalMatUHandle = getUniformLocation("u_mNormalMat"); CHECK_GL_ERROR(); }
SceneShader(const char* pVert, const char* pFrag) : BaseProjNormalShader(pVert, pFrag), m_TexcoordAHandle(-1), m_InstanceAHandle(-1), m_ModelViewMatUHandle(-1), m_LightPositionUHandle(-1), m_LightAmbientUHandle(-1), m_LightDiffuseUHandle(-1), m_LightSpecularUHandle(-1), m_LightShininessUHandle(-1), m_DiffuseTexUHandle(-1), m_PositionUHandle(-1) { m_TexcoordAHandle = getAttribLocation("a_vTexCoord"); m_InstanceAHandle = getAttribLocation("a_vInstance"); m_ModelViewMatUHandle = getUniformLocation("u_mModelViewMat"); m_LightPositionUHandle = getUniformLocation("u_vLightPosition"); m_LightAmbientUHandle = getUniformLocation("u_fLightAmbient"); m_LightDiffuseUHandle = getUniformLocation("u_fLightDiffuse"); m_LightSpecularUHandle = getUniformLocation("u_fLightSpecular"); m_LightShininessUHandle = getUniformLocation("u_fLightShininess"); m_DiffuseTexUHandle = getUniformLocation("u_tDiffuseTex"); m_PositionUHandle = getUniformLocation("u_vPosition"); }
void Program::mapAttributeNamesToIndices(void) { int total = -1; glGetProgramiv(_handle, GL_ACTIVE_ATTRIBUTES, &total); for(GLuint i = 0; i < total; ++i) { int name_len=-1, num=-1; GLenum type = GL_ZERO; char name[100]; glGetActiveAttrib(_handle, i, sizeof(name) - 1, &name_len, &num, &type, name); name[name_len] = 0; _attrib[std::string(name)] = getAttribLocation(name); } #ifdef DEBUG std::map<std::string, GLuint>::const_iterator itr; for(itr = _attrib.begin(); itr != _attrib.end(); ++itr) { std::cout << "(name, index): (" << itr->first << "," << itr->second << ")" << std::endl; } #endif }
DeferredShader::DeferredShader() { /*} void SpriteShader::loadFromFiles(const char* vertexShader, const char* fragmentShader) {*/ GLuint vertexShaderId = loadShader("Calamity/Shader/pointLight.vert", GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader("Calamity/Shader/pointLight.frag", GL_FRAGMENT_SHADER); /*GLuint vertexShaderId = loadShader(vertexShader, GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader(fragmentShader, GL_FRAGMENT_SHADER);*/ programId = glCreateProgram(); glAttachShader(programId, vertexShaderId); glAttachShader(programId, fragmentShaderId); glLinkProgram(programId); // Check for errors GLint programSuccess = GL_TRUE; glGetProgramiv(programId, GL_LINK_STATUS, &programSuccess); if (programSuccess != GL_TRUE) { printf("Error linking program %d!\n", programId); printProgramLog(programId); glDeleteProgram(programId); programId = 0; glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); return; } glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); positionLocation = getAttribLocation("in_Position"); projectionMatrixLocation = getUniformLocation("projectionMatrix"); modelViewMatrixLocation = getUniformLocation("modelViewMatrix"); /*dirLightColorLocation = getUniformLocation("directionalLight.color"); dirLightDirectionLocation = getUniformLocation("directionalLight.direction"); dirLightAmbientIntensityLocation = getUniformLocation("directionalLight.ambientIntensity"); dirLightDiffuseIntensityLocation = getUniformLocation("directionalLight.diffuseIntensity");*/ /*dirLightLocation.color = getUniformLocation("directionalLight.base.color"); dirLightLocation.ambientIntensity = getUniformLocation("directionalLight.base.ambientIntensity"); dirLightLocation.diffuseIntensity = getUniformLocation("directionalLight.base.diffuseIntensity"); dirLightLocation.direction = getUniformLocation("directionalLight.direction");*/ pointLightLocation.color = getUniformLocation("pointLight.base.color"); pointLightLocation.ambientIntensity = getUniformLocation("pointLight.base.ambientIntensity"); pointLightLocation.diffuseIntensity = getUniformLocation("pointLight.base.diffuseIntensity"); pointLightLocation.position = getUniformLocation("pointLight.position"); pointLightLocation.attConstant = getUniformLocation("pointLight.attConstant"); pointLightLocation.attLinear = getUniformLocation("pointLight.attLinear"); pointLightLocation.attExponential = getUniformLocation("pointLight.attExponential"); eyeWorldPosLocation = getUniformLocation("eyeWorldPos"); matSpecularIntensityLocation = getUniformLocation("matSpecularIntensity"); matSpecularPowerLocation = getUniformLocation("matSpecularPower"); screenSizeLocation = getUniformLocation("screenSize"); GLint positionTextureLocation = getUniformLocation("positionTexture"); GLint colorTextureLocation = getUniformLocation("colorTexture"); GLint normalTextureLocation = getUniformLocation("normalTexture"); bind(); glUniform1i(positionTextureLocation, 0); glUniform1i(colorTextureLocation, 1); glUniform1i(normalTextureLocation, 2); unbind(); }
RadialBlurShader::RadialBlurShader(int screenWidth, int screenHeight) { this->screenWidth = screenWidth; this->screenHeight = screenHeight; GLuint vertexShaderId = loadShader("Calamity/Shader/radialBlur.vert", GL_VERTEX_SHADER); GLuint fragmentShaderId = loadShader("Calamity/Shader/radialBlur.frag", GL_FRAGMENT_SHADER); programId = glCreateProgram(); glAttachShader(programId, vertexShaderId); glAttachShader(programId, fragmentShaderId); glLinkProgram(programId); // Check for errors GLint programSuccess = GL_TRUE; glGetProgramiv(programId, GL_LINK_STATUS, &programSuccess); if (programSuccess != GL_TRUE) { printf("Error linking program %d!\n", programId); printProgramLog(programId); glDeleteProgram(programId); programId = 0; } glDetachShader(programId, vertexShaderId); glDetachShader(programId, fragmentShaderId); glDeleteShader(vertexShaderId); glDeleteShader(fragmentShaderId); positionLocation = getAttribLocation("in_Position"); texCoordLocation = getAttribLocation("in_TexCoord"); colorLocation = getAttribLocation("in_Color"); projectionMatrixLocation = getUniformLocation("projectionMatrix"); modelViewMatrixLocation = getUniformLocation("modelViewMatrix"); //useTextureLocation = getUniformLocation("useTexture"); GLint textureLocation = getUniformLocation("tex"); /*vec2 radialSize; // texel size float radialBlur; // blur factor float radialBright; // bright factor vec2 radialOrigin;*/ GLint radialSizeLocation = getUniformLocation("radialSize"); GLint radialBlurLocation = getUniformLocation("radialBlur"); GLint radialBrightLocation = getUniformLocation("radialBright"); GLint radialOriginLocation = getUniformLocation("radialOrigin"); // for moon /*bind(); glUniform1i(textureLocation, 0); glUniform2f(radialSizeLocation, 1.0f/800, 1.0f/600); //glUniform1f(radialBlurLocation, 0.99f); glUniform1f(radialBlurLocation, 0.8f); //glUniform1f(radialBrightLocation, 0.1f); glUniform1f(radialBrightLocation, 0.06f); //glUniform2f(radialOriginLocation, 0.45f, 0.8f); glUniform2f(radialOriginLocation, 0.45f, 0.7f); unbind();*/ // for sun bind(); glUniform1i(textureLocation, 0); glUniform2f(radialSizeLocation, 1.0f/screenWidth, 1.0f/screenHeight); //glUniform2f(radialSizeLocation, 1.0f/800, 1.0f/600); //glUniform1f(radialBlurLocation, 0.99f); glUniform1f(radialBlurLocation, 0.8f); //glUniform1f(radialBrightLocation, 0.1f); glUniform1f(radialBrightLocation, 0.05f); //glUniform2f(radialOriginLocation, 0.45f, 0.8f); glUniform2f(radialOriginLocation, 0.45f, 0.7f); unbind(); }
void ShaderProgram::addAttribute(const char * name, std::shared_ptr<VertexBufferObject> vbo) { GLint attributeId = getAttribLocation(name); attributes[attributeId] = vbo; }
void Program::vertexAttribPointer(const std::string &name, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLint offset) const { GLuint h = getAttribLocation(name); glVertexAttribPointer(h, size, type, normalized, stride, reinterpret_cast<const GLvoid*>(offset)); glEnableVertexAttribArray(h); }