[Mesa-dev] [PATCH 09/12] glsl/gsraytrace: Switch to core profile.

Fabian Bieler fabianbieler at fastmail.fm
Wed Feb 19 15:17:10 PST 2014


v2: Remove redundant 'core' in GLSL version statement.

Signed-off-by: Fabian Bieler <fabianbieler at fastmail.fm>
Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/glsl/gsraytrace.cpp | 34 ++++++++++++++++++++++++++--------
 1 file changed, 26 insertions(+), 8 deletions(-)

diff --git a/src/glsl/gsraytrace.cpp b/src/glsl/gsraytrace.cpp
index 6df6543..44f2674 100644
--- a/src/glsl/gsraytrace.cpp
+++ b/src/glsl/gsraytrace.cpp
@@ -408,6 +408,7 @@ static const char* fsSource =
 "uniform vec4 backgroundColor;                                            \n"
 "uniform int emitNoMore;                                                  \n"
 "                                                                         \n"
+"out vec4 frag_color;                                                     \n"
 "                                                                         \n"
 "//-----------------------------------------------------------------------\n"
 "                                                                         \n"
@@ -493,7 +494,7 @@ static const char* fsSource =
 "    Isec eyeHit = isec;\n"
 "    if (eyeHit.idx == -1)\n"
 "    {\n"
-"      gl_FragColor = vec4(backgroundColor.rgb, 0.0);\n"
+"      frag_color = vec4(backgroundColor.rgb, 0.0);\n"
 "      return;\n"
 "    }\n"
 "    vec3 eyeHitPosition = eyeRay.orig + eyeRay.dir * eyeHit.t;\n"
@@ -503,7 +504,7 @@ static const char* fsSource =
 "    vec3  L      = normalize(lightVec);                                         \n"
 "    float NdotL  = max(dot(N, L), 0.0);                                         \n"
 "    vec3 diffuse = idx2color(eyeHit.idx); // material color of the visible point\n"
-"    gl_FragColor = vec4(diffuse * NdotL, 1.0);                                  \n"
+"    frag_color = vec4(diffuse * NdotL, 1.0);                                  \n"
 "    return;                                                                \n"
 "  }                                                                        \n"
 "#ifdef SHADOWS                                                             \n"
@@ -514,7 +515,7 @@ static const char* fsSource =
 "    {                                                             \n"
 "      discard;                                                    \n"
 "    }                                                             \n"
-"    gl_FragColor = vec4(-1,-1,-1, 0.0);                           \n"
+"    frag_color = vec4(-1,-1,-1, 0.0);                           \n"
 "    return;                                                       \n"
 "  }                                                               \n"
 "#endif                                                            \n"
@@ -534,7 +535,7 @@ static const char* fsSource =
 "    vec3  L      = normalize(lightVec);                           \n"
 "    float NdotL  = max(dot(N, L), 0.0);                           \n"
 "    vec3 diffuse = idx2color(reflHit.idx);                        \n"
-"    gl_FragColor = vec4(diffuse * NdotL * 0.25, 1.0); // material color of the visible point\n"
+"    frag_color = vec4(diffuse * NdotL * 0.25, 1.0); // material color of the visible point\n"
 "    return;                                                       \n"
 "  }                                                               \n"
 "#endif                                                            \n"
@@ -608,6 +609,8 @@ Draw(void)
    dir_idxAttribLoc = glGetAttribLocation(program, "dir_idx");
    uv_stateAttribLoc = glGetAttribLocation(program, "uv_state");
 
+   glBindFragDataLocation(program, 0, "frag_color");
+
    ////printf("%d\n", i);
    //gs.fpwQuery->beginQuery();
    //gs.pgQuery->beginQuery();
@@ -755,10 +758,6 @@ Reshape(int width, int height)
    WinWidth = width;
    WinHeight = height;
    glViewport(0, 0, width, height);
-   glMatrixMode(GL_PROJECTION);
-   glLoadIdentity();
-   glMatrixMode(GL_MODELVIEW);
-   glLoadIdentity();
 
    {
       size_t nElem = WinWidth*WinHeight*nRayGens;
@@ -911,6 +910,10 @@ Init(void)
    glGenBuffers(1, &dst);
    glGenBuffers(1, &eyeRaysAsPoints);
 
+   GLuint vao;
+   glGenVertexArrays(1, &vao);
+   glBindVertexArray(vao);
+
    printf("\nESC                 = exit demo\nleft mouse + drag   = rotate camera\n\n");
 }
 
@@ -920,9 +923,24 @@ main(int argc, char *argv[])
 {
    glutInitWindowSize(WinWidth, WinHeight);
    glutInit(&argc, argv);
+
+#ifdef HAVE_FREEGLUT
+   glutInitContextVersion(3, 2);
+   glutInitContextProfile(GLUT_CORE_PROFILE);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+#elif defined __APPLE__
+   glutInitDisplayMode(GLUT_3_2_CORE_PROFILE | GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+#else
+   glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
+#endif
    Win = glutCreateWindow(argv[0]);
+
+   // glewInit requires glewExperimentel set to true for core profiles.
+   // Depending on the glew version it also generates GL_INVALID_ENUM.
+   glewExperimental = GL_TRUE;
    glewInit();
+   glGetError();
+
    glutReshapeFunc(Reshape);
    glutKeyboardFunc(Key);
    glutDisplayFunc(Draw);
-- 
1.8.3.2



More information about the mesa-dev mailing list