/usr/include/sofa/helper/gl/GLSLShader.h is in libsofa1-dev 1.0~beta4-12.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | /******************************************************************************
* SOFA, Simulation Open-Framework Architecture, version 1.0 beta 4 *
* (c) 2006-2009 MGH, INRIA, USTL, UJF, CNRS *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2.1 of the License, or (at *
* your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
*******************************************************************************
* SOFA :: Framework *
* *
* Authors: M. Adam, J. Allard, B. Andre, P-J. Bensoussan, S. Cotin, C. Duriez,*
* H. Delingette, F. Falipou, F. Faure, S. Fonteneau, L. Heigeas, C. Mendoza, *
* M. Nesme, P. Neumann, J-P. de la Plata Alcade, F. Poyer and F. Roy *
* *
* Contact information: contact@sofa-framework.org *
******************************************************************************/
#ifndef SOFA_HELPER_GL_GLSLSHADER_H
#define SOFA_HELPER_GL_GLSLSHADER_H
#include <sofa/helper/system/gl.h>
#include <sofa/helper/system/glu.h>
#include <string>
#include <string.h>
#include <sofa/helper/helper.h>
#include <vector>
namespace sofa
{
namespace helper
{
namespace gl
{
#ifndef SOFA_HAVE_GLEW
#error GL Shader support requires GLEW. Please define SOFA_HAVE_GLEW to use shaders.
#endif
class SOFA_HELPER_API GLSLShader
{
public:
GLSLShader();
~GLSLShader();
/// This builds a header before any shader contents
void AddHeader(const std::string& header);
void AddDefineMacro(const std::string &name, const std::string &value);
/// This loads our text file for each shader and returns it in a string
std::string LoadTextFile(const std::string& strFile);
/// This is used to load all of the extensions and checks compatibility.
static bool InitGLSL();
/// This loads a vertex, geometry and fragment shader
void InitShaders(const std::string& strVertex, const std::string& stdGeometry, const std::string& strFragment);
/// This loads a vertex and fragment shader
void InitShaders(const std::string& strVertex, const std::string& strFragment)
{
InitShaders(strVertex, std::string(""), strFragment);
}
/// This returns an ID for a variable in our shader
GLint GetVariable(std::string strVariable);
/// This returns an ID for an attribute variable in our shader
GLint GetAttributeVariable(std::string strVariable);
/// These are our basic get functions for our private data
/// @{
GLhandleARB GetProgram() { return m_hProgramObject; }
GLhandleARB GetVertexS() { return m_hVertexShader; }
GLhandleARB GetGeometryS() { return m_hGeometryShader; }
GLhandleARB GetFragmentS() { return m_hFragmentShader; }
/// Below are functions to set an integer or a float
/// @{
void SetInt(GLint variable, int newValue);
void SetFloat(GLint variable, float newValue);
/// @}
/// Below are functions to set more than 1 integer or float
/// @{
void SetInt2(GLint variable, int i1, int i2);
void SetInt3(GLint variable, int i1, int i2, int i3);
void SetInt4(GLint variable, int i1, int i2, int i3, int i4);
void SetFloat2(GLint variable, float v0, float v1);
void SetFloat3(GLint variable, float v0, float v1, float v2);
void SetFloat4(GLint variable, float v0, float v1, float v2, float v3);
/// @}
/// Below are functions to set a vector of integer or float
/// @{
void SetIntVector(GLint variable, GLsizei count, const GLint *value);
void SetIntVector2(GLint variable, GLsizei count, const GLint *value);
void SetIntVector3(GLint variable, GLsizei count, const GLint *value);
void SetIntVector4(GLint variable, GLsizei count, const GLint *value);
void SetFloatVector(GLint variable, GLsizei count, const float *value);
void SetFloatVector2(GLint variable, GLsizei count, const float *value);
void SetFloatVector3(GLint variable, GLsizei count, const float *value);
void SetFloatVector4(GLint variable, GLsizei count, const float *value);
/// @}
/// These 2 functions turn on and off our shader
/// @{
void TurnOn();
void TurnOff();
/// @}
/// This releases our memory for our shader
void Release();
GLint GetGeometryInputType() { return geometry_input_type; }
void SetGeometryInputType(GLint v) { geometry_input_type = v; }
GLint GetGeometryOutputType() { return geometry_output_type; }
void SetGeometryOutputType(GLint v) { geometry_output_type = v; }
GLint GetGeometryVerticesOut() { return geometry_vertices_out; }
void SetGeometryVerticesOut(GLint v) { geometry_vertices_out = v; }
protected:
bool CompileShader(GLint target, const std::string& source, GLhandleARB& shader);
std::string header;
/// This handle stores our vertex shader information
GLhandleARB m_hVertexShader;
/// This handle stores our geometry shader information
GLhandleARB m_hGeometryShader;
/// This handle stores our fragment shader information
GLhandleARB m_hFragmentShader;
/// This handle stores our program information which encompasses our shader
GLhandleARB m_hProgramObject;
GLint geometry_input_type;
GLint geometry_output_type;
GLint geometry_vertices_out;
};
} // namespace gl
} // namespace helper
} // namespace sofa
#endif
|