在GLSL版本110,我可以在gl_TexCoord []得到協調,但它在150如何在150版本中獲得GLSL的紋理座標?
的OpenGL代碼棄用:
shader.setupShaderFromFile(GL_VERTEX_SHADER, "t.vert");
shader.setupShaderFromFile(GL_FRAGMENT_SHADER, "t.frag");
shader.linkProgram();
glGetFloatv(GL_MODELVIEW_MATRIX, modelview_mat_);
glGetFloatv(GL_PROJECTION_MATRIX, projectionview_mat_);
shader.begin();
glUniformMatrix4fv(glGetUniformLocation(shader.getProgram(), "MVMatrix"), 1, GL_FALSE, modelview_mat_);
glUniformMatrix4fv(glGetUniformLocation(shader.getProgram(), "MPMatrix"), 1, GL_FALSE, projectionview_mat_);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);glVertex2f(0, 0);
glTexCoord2f(1, 0);glVertex2f(100, 0);
glTexCoord2f(1, 1);glVertex2f(100, 100);
glTexCoord2f(0, 1);glVertex2f(0, 100);
glEnd();
shader.end();
shader代碼:
VERTEX-
#version 150
in vec3 in_vertex;
in vec2 in_coord;
uniform mat4 MVMatrix;
uniform mat4 MPMatrix;
out vec2 tex_coord;
void main()
{
vec4 v = vec4(in_vertex, 1.0);
tex_coord = in_coord;
gl_Position = MPMatrix * MVMatrix * v;
}
碎片:
#version 150
in vec2 tex_coord;
out vec4 frgcolor;
void main()
{
frgcolor = vec4(tex_coord, 0.0, 1.0);
}
最終屏幕是紅色的四邊形。
如何將紋理座標傳遞給着色器?或者我的代碼錯了?
TKS,解決了,所有用戶定義的...「 –
」如果您希望保持即時模式,您將使用glVertexAttrib2f。「即時模式也被*刪除(或者,如果你願意的話,「棄用」),所以沒有任何意義。要麼你正在使用刪除的東西,或者你不是;沒有理由半途而廢。 –
我知道這是一個非常古老的線程,但我只想指出已棄用和已刪除的區別。 – MJLaukala