停止 glUseProgram()
Stopping glUseProgram()
我在纹理上使用 opengl 着色器。一旦纹理完成着色,我想停止 glUseProgram() 函数。
目前着色器正在覆盖所有内容,包括我不需要着色的 rectf() 函数。
我试过 glUseProgram(0) 但没用。
相关问题:
这里是相关代码。
glPushMatrix();
dirPosd = i.torso.getPosition().mul(30);
glTranslatef(dirPosd.x, dirPosd.y, 0);
glRotated(Math.toDegrees(i.torso.getAngle()), 0, 0, 1);
glColor3f(1,1,1);
skel_torso.bind();
sizer = 40;
glUseProgram(shaderProgram);
glBegin(GL_QUADS);
glTexCoord2f(0f, 0f);
glVertex2f( i.torso.getPosition().x - sizer-5, i.torso.getPosition().y - sizer-5); //NW
glTexCoord2f(1, 0);
glVertex2f( i.torso.getPosition().x + sizer-5, i.torso.getPosition().y - sizer-5); //NE
glTexCoord2f(1, 1);
glVertex2f( i.torso.getPosition().x + sizer-5, i.torso.getPosition().y + sizer-5); //SE
glTexCoord2f(0, 1);
glVertex2f( i.torso.getPosition().x - sizer-5, i.torso.getPosition().y + sizer-5); //SW
glEnd();
glPopMatrix();
glUseProgram(0); //Note here
glPushMatrix();
Vec2 shoulderPosL = i.shouldL.getPosition().mul(30);
glTranslatef(shoulderPosL.x, shoulderPosL.y, 0);
glRotated(Math.toDegrees(i.shouldL.getAngle()), 0, 0, 1);
glColor3f(1,1,0);
glRectf(-i.shoulderSize[0] * 30, -i.shoulderSize[1] * 30, i.shoulderSize[0] * 30, i.shoulderSize[1] * 30);
glPopMatrix();`
我已经添加了 glUseProgram(0) 语句,但是当我添加时,着色器根本不起作用。
你必须切换到不同的着色器,做你想做的其他东西渲染。着色器不是 "wrapped" 你渲染的东西。着色器使渲染工作。如果您禁用着色器,并且您的 OpenGL 上下文不是兼容性配置文件,则不会提供默认回退(固定功能管道行为)并且不会呈现任何内容。 OTOH 您使用的是固定功能管道,但要使其正常工作,您必须对其进行正确参数化(启用纹理目标、调制模式、颜色等)。简单地切换着色器通常比处理 FF 管线状态更容易。
我在纹理上使用 opengl 着色器。一旦纹理完成着色,我想停止 glUseProgram() 函数。
目前着色器正在覆盖所有内容,包括我不需要着色的 rectf() 函数。
我试过 glUseProgram(0) 但没用。
相关问题:
这里是相关代码。
glPushMatrix();
dirPosd = i.torso.getPosition().mul(30);
glTranslatef(dirPosd.x, dirPosd.y, 0);
glRotated(Math.toDegrees(i.torso.getAngle()), 0, 0, 1);
glColor3f(1,1,1);
skel_torso.bind();
sizer = 40;
glUseProgram(shaderProgram);
glBegin(GL_QUADS);
glTexCoord2f(0f, 0f);
glVertex2f( i.torso.getPosition().x - sizer-5, i.torso.getPosition().y - sizer-5); //NW
glTexCoord2f(1, 0);
glVertex2f( i.torso.getPosition().x + sizer-5, i.torso.getPosition().y - sizer-5); //NE
glTexCoord2f(1, 1);
glVertex2f( i.torso.getPosition().x + sizer-5, i.torso.getPosition().y + sizer-5); //SE
glTexCoord2f(0, 1);
glVertex2f( i.torso.getPosition().x - sizer-5, i.torso.getPosition().y + sizer-5); //SW
glEnd();
glPopMatrix();
glUseProgram(0); //Note here
glPushMatrix();
Vec2 shoulderPosL = i.shouldL.getPosition().mul(30);
glTranslatef(shoulderPosL.x, shoulderPosL.y, 0);
glRotated(Math.toDegrees(i.shouldL.getAngle()), 0, 0, 1);
glColor3f(1,1,0);
glRectf(-i.shoulderSize[0] * 30, -i.shoulderSize[1] * 30, i.shoulderSize[0] * 30, i.shoulderSize[1] * 30);
glPopMatrix();`
我已经添加了 glUseProgram(0) 语句,但是当我添加时,着色器根本不起作用。
你必须切换到不同的着色器,做你想做的其他东西渲染。着色器不是 "wrapped" 你渲染的东西。着色器使渲染工作。如果您禁用着色器,并且您的 OpenGL 上下文不是兼容性配置文件,则不会提供默认回退(固定功能管道行为)并且不会呈现任何内容。 OTOH 您使用的是固定功能管道,但要使其正常工作,您必须对其进行正确参数化(启用纹理目标、调制模式、颜色等)。简单地切换着色器通常比处理 FF 管线状态更容易。