gpt4 book ai didi

java - 停止 glUseProgram()

转载 作者:行者123 更新时间:2023-11-30 08:02:17 26 4
gpt4 key购买 nike

我在纹理上使用 opengl 着色器。一旦纹理完成着色,我想停止 glUseProgram() 函数。

目前,着色器正在超越一切,包括我不需要着色的 rectf() 函数。

我尝试了 glUseProgram(0) 但没有成功。

相关问题:Java Opengl: Discarding Texture Background with Shaders

这是相关代码。

        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) 语句,但是当我添加时,着色器根本不起作用。

最佳答案

您必须切换到不同的着色器,执行您想要的其他内容渲染操作。着色器并不是“包裹”在渲染的东西上的东西。着色器是渲染工作的基础。如果禁用着色器,并且您的 OpenGL 上下文不是兼容性配置文件,则不会提供默认后备(固定功能管道行为)并且不会渲染任何内容。 OTOH,您正在使用固定功能管道,但要使其工作,您必须正确对其进行参数化(启用纹理目标、调制模式、颜色等)。一般来说,简单地切换着色器而不是处理 FF 管道状态会更容易。

关于java - 停止 glUseProgram(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com