33#ifdef G4OPENGL_VERSION_2
56 "precision highp float;\n"
59 "varying vec3 vLightWeighting;\n"
60 "uniform vec4 uPointColor; // Point Color\n"
63 " vec4 matColor = uPointColor;\n"
64 " gl_FragColor = vec4(matColor.rgb, matColor.a);\n"
69 "attribute highp vec4 aVertexPosition;\n"
70 "attribute vec3 aVertexNormal;\n"
71 "uniform highp mat4 uCMatrix;\n"
72 "uniform highp mat4 uPMatrix; // Perspective [P]rojection matrix\n"
73 "uniform highp mat4 uMVMatrix; // [M]odel[V]iew matrix\n"
74 "uniform highp mat4 uTMatrix; // [T]ransformation matrix\n"
75 "uniform float uPointSize; // Point size\n"
78 " gl_Position = uPMatrix * uCMatrix * uMVMatrix * uTMatrix * aVertexPosition;\n"
81 " vec3 lightingDirection = normalize(vec3(1, 1, 1));\n"
85 " gl_PointSize = uPointSize;\n"
91G4OpenGLVboDrawer::~G4OpenGLVboDrawer (
102void G4OpenGLVboDrawer:: vboGlMultMatrixf(
const GLfloat *matrix){
104 if (fVboViewer->isInitialized()) {
109 if (fMatrixMode == GL_MODELVIEW) {
110 glUniformMatrix4fv(fVboViewer->getShaderTransformMatrix(),1,0,matrix);
112 G4cerr <<
"glMultMatrixf could only be used in GL_MODELVIEW mode" <<
G4endl;
119void G4OpenGLVboDrawer:: vboGlMultMatrixd(
const GLdouble *matrix){
121 if (fVboViewer->isInitialized()) {
127 matrix[0],matrix[1],matrix[2],matrix[3],
128 matrix[4],matrix[5],matrix[6],matrix[7],
129 matrix[8],matrix[9],matrix[10],matrix[11],
130 matrix[12],matrix[13],matrix[14],matrix[15]
133 glUniformMatrix4fv(fVboViewer->getShaderTransformMatrix(),1,0,mat);
134 GLenum e = glGetError();
135 printf(
"GL error : %d",e);
151void G4OpenGLVboDrawer::vboGlOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {
153 if (fVboViewer->isInitialized()) {
154 printf(
"glOrtho implemented --- %f %f %f %f %f %f \n",left, right, bottom, top, zNear, zFar);
155 float a = 2.0f / (right - left);
156 float b = 2.0f / (top - bottom);
157 float c = -2.0f / (zFar - zNear);
159 float tx = - (right + left)/(right - left);
160 float ty = - (top + bottom)/(top - bottom);
161 float tz = - (zFar + zNear)/(zFar - zNear);
173 if (fMatrixMode == GL_PROJECTION) {
174 glUniformMatrix4fv(fVboViewer->getShaderProjectionMatrix(), 1, 0, ortho);
176 G4cerr <<
"glFrustum could only be used in GL_PROJECTION mode" <<
G4endl;
183void G4OpenGLVboDrawer::vboGlFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) {
185 if (fVboViewer->isInitialized()) {
186 float deltaX = right - left;
187 float deltaY = top - bottom;
188 float deltaZ = zFar - zNear;
190 float a = 2.0f * zNear / deltaX;
191 float b = 2.0f * zNear / deltaY;
192 float c = (right + left) / deltaX;
193 float d = (top + bottom) / deltaY;
194 float e = -(zFar + zNear) / (zFar - zNear);
195 float f = -2.0f * zFar * zNear / deltaZ;
204 if (fMatrixMode == GL_PROJECTION) {
205 glUniformMatrix4fv(fVboViewer->getShaderProjectionMatrix(), 1, 0, proj);
207 G4cerr <<
"glFrustrum could only be used in GL_PROJECTION mode" <<
G4endl;
214void G4OpenGLVboDrawer::vboGlMatrixMode(GLenum a) {
216 if (fVboViewer->isInitialized()) {
217 printf(
"G4OpenGLVboDrawer::vboGlMatrixMode CHANGED :%d \n",a);
224void G4OpenGLVboDrawer::vboGlColor4d(
int red,
int green,
int blue,
int alpha) {
226 if (fVboViewer->isInitialized()) {
230 glUniform4f (glGetUniformLocation(fVboViewer->getShaderProgram(),
"uPointColor"),red, green, blue, alpha);
235void G4OpenGLVboDrawer:: vboGlColor4fv(
const GLfloat* data) {
237 if (fVboViewer->isInitialized()) {
238 double color [] = { (data[0]), (data[1]), (data[2]), 0.7};
240 glUniform4f (glGetUniformLocation(fVboViewer->getShaderProgram(),
"uPointColor"),color[0],color[1],color[2], color[3]);
245void G4OpenGLVboDrawer:: vboGlPointSize(
float size) {
247 if (fVboViewer->isInitialized()) {
248 glUniform1f (glGetUniformLocation(fVboViewer->getShaderProgram(),
"uPointSize"),size);
G4GLOB_DLL std::ostream G4cerr