首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"RuntimeError:验证失败(0)“使用着色器

"RuntimeError:验证失败(0)“使用着色器
EN

Game Development用户
提问于 2018-07-17 19:13:47
回答 2查看 1.2K关注 0票数 1

我试图在游戏代码中不再使用glVertex(),因为它似乎不能很好地处理大量的顶点。目前,我正在尝试编写使用Shaders的代码,但是在用shaders.compileProgram编译时,它给出了标题中显示的错误,但没有解释哪里出了问题。

目前为止的代码:

代码语言:javascript
运行
复制
import OpenGL
from OpenGL.GL import *
from OpenGL.GL import shaders
from OpenGL.arrays import vbo

import math
import pygame
from pygame.locals import *

VERTEX_SHADER = shaders.compileShader("""
#version 120 
 void main() {
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
 }
""", GL_VERTEX_SHADER)

FRAGMENT_SHADER = shaders.compileShader("""
#version 120 
void main() { 
    gl_FragColor = vec4( 0, 1, 0, 1 ); 
}
""", GL_FRAGMENT_SHADER)

self.shader = shaders.compileProgram(VERTEX_SHADER,FRAGMENT_SHADER)

完整的错误消息:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "PyOpenGl shader test from scratch.py", line 24, in <module>
    self.shader = shaders.compileProgram(VERTEX_SHADER,FRAGMENT_SHADER)
  File "/home/[my name]/.local/lib/python2.7/site-packages/OpenGL    /GL/shaders.py", line 196, in compileProgram
    program.check_validate()
  File "/home/[my name]/.local/lib/python2.7/site-packages/OpenGL/GL/shaders.py", line 108, in check_validate
    glGetProgramInfoLog( self ),
RuntimeError: Validation failure (0): 

有什么需要我补充的线来告诉我出了什么问题吗?

EN

回答 2

Game Development用户

发布于 2019-01-09 11:33:26

如果在编译着色器之前不指定上下文,也经常会发生这种情况。例如,对于QT (pytqt),在启用gl上下文(例如在initializeGL函数中)时,应该编译着色器。因此,在使用QT的情况下,您可以执行如下操作:

代码语言:javascript
运行
复制
class MyQtWidget(QOpenGLWidget, QWidget):
    def __init__(self, directory):
        super(MyQtWidget, self).__init__()
...

def initializeGL(self):
    """
    Initializes openGL context and scenery
    """
    self.shader = compileProgram(
            compileShader(my_vert_shader, gl.GL_VERTEX_SHADER),
            compileShader(my_frag_shader, gl.GL_FRAGMENT_SHADER)
        )

至于你的个案,请参阅这里的例子:

https://github.com/tartley/opengl-tutorials/blob/master/pyopengl/05-lighting.py

着色器是在上下文启用后编译的(通过继承BaseContext类)。

另一个使用glfw的示例还预先初始化了上下文:

https://github.com/totex/PyOpenGL_教程/blob/master/main.py

在这里我们有一个glfw.make_context_current函数。

然而,即使您这样做,这并不意味着您的着色器是正确的,但如果您确实不完善的上下文,您应该得到详细的错误消息,您的着色器是什么问题。

票数 2
EN

Game Development用户

发布于 2018-07-20 17:46:39

事实上,我完全忽略了这一事实,即本教程专门为本教程使用了一个特殊的库。(我讨厌一个导师这样做.在没有教程模块的情况下,我该怎么做?)

这是一个有问题的教程。

问题似乎并不在于着色器,我只是从继承的类中丢失了函数。

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/161831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档