This commit prepares the transition from extension to core geometry shaders. (Core geometry shaders require GLSL version 1.5 or later.) This includes using generic vertex attributes instead of built-ins.
Signed-off-by: Fabian Bieler <fabianbie...@fastmail.fm> Reviewed-by: Brian Paul <bri...@vmware.com> Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> --- src/glsl/gsraytrace.cpp | 58 +++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/glsl/gsraytrace.cpp b/src/glsl/gsraytrace.cpp index ef67643..f9e708f 100644 --- a/src/glsl/gsraytrace.cpp +++ b/src/glsl/gsraytrace.cpp @@ -56,6 +56,7 @@ static GLuint pgQuery; static GLuint dst; static GLuint eyeRaysAsPoints; +int posAttribLoc; int orig_tAttribLoc; int dir_idxAttribLoc; int uv_stateAttribLoc; @@ -69,7 +70,7 @@ float rot[9] = {1,0,0, 0,1,0, 0,0,1}; static const char* vsSource = " \n" -"#version 120 \n" +"#version 150 \n" "#line " S__LINE__ "\n" "#define SHADOWS \n" "#define RECURSION \n" @@ -83,9 +84,10 @@ static const char* vsSource = "uniform vec4 backgroundColor; \n" "uniform int emitNoMore; \n" " \n" -"attribute vec4 orig_t; \n" -"attribute vec4 dir_idx; \n" -"attribute vec4 uv_state; \n" +"in vec4 pos; \n" +"in vec4 orig_t; \n" +"in vec4 dir_idx; \n" +"in vec4 uv_state; \n" "// uv_state.z = state \n" "// uv_state.w = type (ray generation) \n" " \n" @@ -98,9 +100,9 @@ static const char* vsSource = "// 0: not shadow ray, eye ray \n" "// 1: shadow ray \n" " \n" -"varying vec4 orig_t1; \n" -"varying vec4 dir_idx1; \n" -"varying vec4 uv_state1; \n" +"out vec4 orig_t1; \n" +"out vec4 dir_idx1; \n" +"out vec4 uv_state1; \n" " \n" " \n" "//----------------------------------------------------------------\n" @@ -224,7 +226,7 @@ static const char* vsSource = " if (state == 0) \n" " { \n" " // generate eye rays\n" -" ray = Ray(cameraPos, normalize(vec3(gl_Vertex.x, gl_Vertex.y, -1.0) * rot3));\n" +" ray = Ray(cameraPos, normalize(vec3(pos.x, pos.y, -1.0) * rot3)); \n" " isec.t = INF;\n" " isec.idx = -1;\n" " state = 1;\n" @@ -240,7 +242,7 @@ static const char* vsSource = " //else state == 3 \n" " \n" " //outVS(); \n" -" gl_Position = gl_Vertex; \n" +" gl_Position = pos; \n" " orig_t1.xyz = ray.orig; \n" " orig_t1.w = isec.t; \n" " dir_idx1.xyz = ray.dir; \n" @@ -251,7 +253,7 @@ static const char* vsSource = static const char* gsSource = -"#version 120 \n" +"#version 150 \n" "#line " S__LINE__ "\n" "#extension GL_ARB_geometry_shader4: require \n" " \n" @@ -310,13 +312,13 @@ static const char* gsSource = " return isec; \n" "} \n" " \n" -"varying in vec4 orig_t1[1]; \n" -"varying in vec4 dir_idx1[1]; \n" -"varying in vec4 uv_state1[1]; \n" +"in vec4 orig_t1[1]; \n" +"in vec4 dir_idx1[1]; \n" +"in vec4 uv_state1[1]; \n" " \n" -"varying out vec4 orig_t2; \n" -"varying out vec4 dir_idx2; \n" -"varying out vec4 uv_state2; \n" +"out vec4 orig_t2; \n" +"out vec4 dir_idx2; \n" +"out vec4 uv_state2; \n" " \n" " \n" "void \n" @@ -390,7 +392,7 @@ static const char* gsSource = "}\n"; static const char* fsSource = -"#version 120 \n" +"#version 150 \n" "#line " S__LINE__ "\n" " \n" "#define SHADOWS \n" @@ -448,9 +450,9 @@ static const char* fsSource = " return isec;\n" "}\n" "\n" -"varying vec4 orig_t2;\n" -"varying vec4 dir_idx2;\n" -"varying vec4 uv_state2;\n" +"in vec4 orig_t2;\n" +"in vec4 dir_idx2;\n" +"in vec4 uv_state2;\n" "\n" "vec3\n" "idx2color(const in int idx)\n" @@ -596,9 +598,11 @@ Draw(void) glUniformMatrix3fv(glGetUniformLocation(program, "rot3"), 1, 0, rot); + //gs.gs->getVertexAttribLocation("pos", gs.posAttribLoc); //gs.gs->getVertexAttribLocation("orig_t", gs.orig_tAttribLoc); //gs.gs->getVertexAttribLocation("dir_idx", gs.dir_idxAttribLoc); //gs.gs->getVertexAttribLocation("uv_state", gs.uv_stateAttribLoc); + posAttribLoc = glGetAttribLocation(program, "pos"); orig_tAttribLoc = glGetAttribLocation(program, "orig_t"); dir_idxAttribLoc = glGetAttribLocation(program, "dir_idx"); uv_stateAttribLoc = glGetAttribLocation(program, "uv_state"); @@ -612,8 +616,9 @@ Draw(void) //gs.eyeRaysAsPoints->bindAs(ARRAY); glBindBuffer(GL_ARRAY_BUFFER, eyeRaysAsPoints); { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(4, GL_FLOAT, sizeof(GSRay), 0); + glEnableVertexAttribArray(posAttribLoc); + glVertexAttribPointer(posAttribLoc, 4, GL_FLOAT, GL_FALSE, + sizeof(GSRay), (void*)offsetof(GSRay, pos)); glEnableVertexAttribArray(orig_tAttribLoc); glVertexAttribPointer(orig_tAttribLoc, 4, GL_FLOAT, GL_FALSE, @@ -641,7 +646,7 @@ Draw(void) glDisableVertexAttribArray(orig_tAttribLoc); - glDisableClientState(GL_VERTEX_ARRAY); + glDisableVertexAttribArray(posAttribLoc); } //gs.eyeRaysAsPoints->unbindAs(ARRAY); glBindBuffer(GL_ARRAY_BUFFER, 0); @@ -670,8 +675,9 @@ Draw(void) //gs.dst->bindAs(ARRAY); glBindBuffer(GL_ARRAY_BUFFER, dst); { - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(4, GL_FLOAT, sizeof(GSRay), 0); + glEnableVertexAttribArray(posAttribLoc); + glVertexAttribPointer(posAttribLoc, 4, GL_FLOAT, GL_FALSE, + sizeof(GSRay), (void*)offsetof(GSRay, pos)); glEnableVertexAttribArray(orig_tAttribLoc); glVertexAttribPointer(orig_tAttribLoc, 4, GL_FLOAT, GL_FALSE, @@ -701,7 +707,7 @@ Draw(void) glDisableVertexAttribArray(orig_tAttribLoc); - glDisableClientState(GL_VERTEX_ARRAY); + glDisableVertexAttribArray(posAttribLoc); } //gs.dst->unbindAs(ARRAY); glBindBuffer(GL_ARRAY_BUFFER, 0); -- 1.8.3.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev