230 const GLubyte* gl_version_string = glGetString(GL_VERSION);
231 std::cerr <<
"GL version: " << gl_version_string << std::endl;
232 std::cerr <<
"GLSL version: " << glGetString(GL_SHADING_LANGUAGE_VERSION) << std::endl;
235 GLint gl_major_version = gl_version_string[0] -
'0';
236 GLint gl_minor_version = gl_version_string[2] -
'0';
237 bool legacy_gl = gl_major_version < 3 || (gl_major_version == 3 && gl_minor_version < 2);
247 glVertex(2 * v3f + v3f);
354 std::cerr <<
"Warning: fixed-function pipeline was not tested.\n";
363 std::vector<std::string> glsl_vars;
364 glsl_vars.push_back(
"${GLSL_VERSION}");
365 glsl_vars.push_back(
"${FRAG_OUTPUT_DECLARATION}");
366 glsl_vars.push_back(
"${FRAG_OUTPUT_VARIABLE}");
368 std::vector<std::string> glsl_vals;
370 if (gl_major_version >= 3) {
371 glsl_vals.push_back(
"out vec4 fragColor;");
372 glsl_vals.push_back(
"fragColor");
374 glsl_vals.push_back(
"");
375 glsl_vals.push_back(
"gl_FragColor");
383 "void main(void) {\n"
384 " gl_Position = vec4(0,0,0,1);\n"
386 glsl_vars, glsl_vals);
388 #ifdef GL_VERSION_2_0
389 if (GLEW_VERSION_2_0 && GL_VERSION_2_0) {
392 "uniform vec2 v2f;\n"
393 "uniform vec3 v3f;\n"
394 "uniform vec4 v4f;\n"
395 "uniform ivec2 v2i;\n"
396 "uniform ivec3 v3i;\n"
397 "uniform ivec4 v4i;\n"
398 "uniform mat2 m2f;\n"
399 "uniform mat3 m3f;\n"
400 "uniform mat4 m4f;\n"
401 "${FRAG_OUTPUT_DECLARATION}\n"
402 "void main(void) { \n"
403 " ${FRAG_OUTPUT_VARIABLE} = "
404 "vec4(v2f[0]+v3f[0]+v4f[0])+vec4(v2i[0]+v3i[0]+v4i[0])+vec4(m2f[0][0]+m3f[0][0]+m4f[0][0]);\n"
406 glsl_vars, glsl_vals);
409 VERIFY(prg_id > 0 &&
"Failed to create program.");
419 glDeleteProgram(prg_id);
422 std::cerr <<
"Warning: opengl 2.0 was not tested.\n";
424 #ifdef GL_VERSION_2_1
425 if (GLEW_VERSION_2_1 && GL_VERSION_2_1 &&
426 (gl_major_version > 2 || (gl_major_version == 2 && gl_minor_version >= 1))) {
429 "uniform mat2x3 m23f;\n"
430 "uniform mat3x2 m32f;\n"
431 "uniform mat2x4 m24f;\n"
432 "uniform mat4x2 m42f;\n"
433 "uniform mat3x4 m34f;\n"
434 "uniform mat4x3 m43f;\n"
435 "${FRAG_OUTPUT_DECLARATION}\n"
436 "void main(void) {\n"
437 " ${FRAG_OUTPUT_VARIABLE} = vec4(m23f[0][0]+m32f[0][0]+m24f[0][0]+m42f[0][0]+m34f[0][0]+m43f[0][0]);\n"
439 glsl_vars, glsl_vals);
442 VERIFY(prg_id > 0 &&
"Failed to create program.");
456 glDeleteProgram(prg_id);
459 std::cerr <<
"Warning: opengl 2.1 was not tested.\n";
461 #ifdef GL_VERSION_3_0
462 if (GLEW_VERSION_3_0 && GL_VERSION_3_0 && gl_major_version >= 3) {
465 "uniform uvec2 v2ui;\n"
466 "uniform uvec3 v3ui;\n"
467 "uniform uvec4 v4ui;\n"
468 "${FRAG_OUTPUT_DECLARATION}\n"
469 "void main(void) {\n"
470 " ${FRAG_OUTPUT_VARIABLE} = vec4(v2ui[0]+v3ui[0]+v4ui[0]);\n"
472 glsl_vars, glsl_vals);
475 VERIFY(prg_id > 0 &&
"Failed to create program.");
483 glDeleteProgram(prg_id);
486 std::cerr <<
"Warning: opengl 3.0 was not tested.\n";
489 bool has_fp64_native = (gl_major_version == 4 && gl_minor_version >= 1);
490 bool has_fp64_extension =
false;
491 #ifdef GLEW_ARB_gpu_shader_fp64
492 if (GLEW_ARB_gpu_shader_fp64) {
494 if (has_fp64_extension) {
497 "#extension GL_ARB_gpu_shader_fp64 : enable\n"
498 "uniform dvec2 dv2;\n"
499 "${FRAG_OUTPUT_DECLARATION}\n"
500 "void main(void) {\n"
501 " ${FRAG_OUTPUT_VARIABLE} = vec4(dv2.x, dv2.y, dv2.x, dv2.y);\n"
503 glsl_vars, glsl_vals);
506 has_fp64_extension =
true;
507 glDeleteProgram(prg_id);
513 if (has_fp64_native || has_fp64_extension) {
514 std::vector<std::string> glsl_vars_with_extension = glsl_vars;
515 glsl_vars_with_extension.push_back(
"${GLSL_EXTENSIONS}");
516 std::vector<std::string> glsl_vals_with_extension = glsl_vals;
517 if (has_fp64_extension) {
518 glsl_vals_with_extension.push_back(
"#extension GL_ARB_gpu_shader_fp64 : enable");
520 glsl_vals_with_extension.push_back(
"");
525 "${GLSL_EXTENSIONS}\n"
526 "uniform dvec2 v2d;\n"
527 "uniform dvec3 v3d;\n"
528 "uniform dvec4 v4d;\n"
529 "${FRAG_OUTPUT_DECLARATION}\n"
530 "void main(void) {\n"
531 " ${FRAG_OUTPUT_VARIABLE} = vec4(v2d[0]+v3d[0]+v4d[0]);\n"
533 glsl_vars_with_extension, glsl_vals_with_extension);
536 VERIFY(prg_id > 0 &&
"Failed to create program.");
540 glDeleteProgram(prg_id);
542 std::cerr <<
"Warning: dvec (fp64) was not tested.\n";
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Derived & setRandom(Index size)
Definition: Random.h:147
The quaternion class used to represent 3D orientations and rotations.
Definition: Eigen/Eigen/src/Geometry/Quaternion.h:285
Represents a translation transformation.
Definition: Translation.h:33
EIGEN_DEVICE_FUNC const VectorType & vector() const
Definition: Translation.h:85
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
Transform< double, 3, Projective > Projective3d
Definition: Transform.h:704
Transform< float, 3, Projective > Projective3f
Definition: Transform.h:700
AngleAxis< float > AngleAxisf
Definition: AngleAxis.h:165
AngleAxis< double > AngleAxisd
Definition: AngleAxis.h:168
EIGEN_BLAS_FUNC() rot(int *n, Scalar *px, int *incx, Scalar *py, int *incy, Scalar *pc, Scalar *ps)
Definition: level1_real_impl.h:88
#define VERIFY(a)
Definition: main.h:362
UniformScaling< float > Scaling(float s)
Definition: Eigen/src/Geometry/Scaling.h:138
Translation< float, 3 > Translation3f
Definition: Translation.h:174
Translation< double, 3 > Translation3d
Definition: Translation.h:175
#define VERIFY_MATRIX(CODE, REF)
Definition: openglsupport.cpp:28
#define VERIFY_UNIFORM(SUFFIX, NAME, TYPE)
Definition: openglsupport.cpp:45
#define VERIFY_UNIFORMi(NAME, TYPE)
Definition: openglsupport.cpp:63
std::string getGlslVersionString(int gl_major_version, int gl_minor_version)
Definition: openglsupport.cpp:162
std::string format(const std::string &str, const std::vector< std::string > &find, const std::vector< std::string > &replace)
Definition: openglsupport.cpp:217