java - 停止 glUseProgram()

标签 java opengl matrix textures shader

我在纹理上使用 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/

相关文章:

java - 正在解析 .obj 文件 : How to do materials/textures?

java - live555 demux 警告 : no data received in 10s. 切换到 TCP

c++ - LNK 2019 "Unresolved External Symbol"错误(C++ OpenGL)

c++ - 在 C++ 中切换矩阵列和行

android - 如何将位图旋转45度

java - 从 JVM MBean 获取信息

java - 粘性前台服务无法重新启动并出现 "process is bad"错误

opengl - GPU着色器的像素缩放算法问题

c++ - GLSL 330 矩阵计算错误{无编译错误}

c++ - 对 Eigen::Affine3f 应用旋转