小编One*_*lla的帖子

OpenGL glUniform1i无效操作

因此,我一直在使用learnopengl.com书,并且一直无法让纹理单元工作.起初我在主循环中调用glGetUniform1i,就像他在书中所做的那样,但是建议(通过#learnprogramming IRC)将任何纹理操作限制在主循环之前.使用本书的代码时,问题是纹理不会像片段着色器中那样正确混合,只会渲染绑定到GL_TEXTURE_2D的第二个纹理(在本例中为"faceTexture").翻转渲染顺序可以渲染出先前使用的纹理.

但是,在主循环之前放置纹理单元代码会导致glUniform1i调用上的无效操作:

File "C:/Users/1117254/Documents/Python Experiments/OpenGL/OpenGL Testing/main.py", line 171, in main
     glUniform1i(wood_texture_loc, 0)
File "C:\Users\1117254\AppData\Local\Programs\Python\Python36\lib\site-packages\OpenGL\platform\baseplatform.py", line 402, in __call__
     return self( *args, **named )
File "errorchecker.pyx", line 53, in 
     OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src\errorchecker.c:1218)
     OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glUniform1i,
cArguments = (23724032, 0)
)
Run Code Online (Sandbox Code Playgroud)

我的错误似乎与frag着色器中统一变量的位置有关,但我不确定glGetUniformLocation给出的位置(似乎是23724032)是否有效.

下面的相关源以及顶点和片段着色器:

# Shader
shader = shader_loader.Shader("vertex.vs", "fragment.fs")

# Vertex Buffering
vao = GLuint(0)
vbo = GLuint(0)
ebo = GLuint(0)

glGenVertexArrays(1, vao)
glGenBuffers(1, vbo)
glGenBuffers(1, ebo)

glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, …
Run Code Online (Sandbox Code Playgroud)

python opengl textures pyopengl

0
推荐指数
1
解决办法
879
查看次数

标签 统计

opengl ×1

pyopengl ×1

python ×1

textures ×1