小编vge*_*gel的帖子

由于不推荐使用glPushAttrib/glPopAttrib,保存GL_DEPTH_FUNC等属性的新方法是什么?

我正在尝试编写现代的OpenGL,但是遇到了一些让我烦恼的东西.

我有这段代码:

glUseProgram(skybox_program->id);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_CUBE_MAP, skybox->id);
    glUniform1i(get_program_uniform(skybox_program, "cubemap_tex"), 1);
    //From here
    GLint save_cull_mode, save_depth_mode;
    glGetIntegerv(GL_CULL_FACE_MODE, &save_cull_mode);
    glGetIntegerv(GL_DEPTH_FUNC, &save_depth_mode);
    glCullFace(GL_FRONT);
    glDepthFunc(GL_LEQUAL);
    //To here
        glUniformMatrix4fv(get_program_uniform(skybox_program, "camera"), 1, GL_FALSE, cam_rot.mat);
        glBindVertexArray(skybox_vao);
        glDrawArrays(GL_TRIANGLES, 0, 6 * 2 * 3);
    //And these next 2 lines
    glCullFace(save_cull_mode);
    glDepthFunc(save_depth_mode);
glUseProgram(0);
Run Code Online (Sandbox Code Playgroud)

正如您可能已经意识到的那样,此代码绘制了一个天空盒.部分原因是禁用剔除(所以我们可以在里面看到方框)并更改深度功能(基本上是优化,其中一部分在着色器中,部分在此处).我想保存并恢复这些值,但由于我无法使用gl[Push/Pop]Attrib,我必须自己做.这对于两个属性来说并不是什么大不了的事,但如果我使用更多属性,这很快就会变成一个巨大的痛苦(而且,据我所知,速度glGet*很慢,因为速度不是很快).我读到推送/弹出功能已被弃用,因为它们主要用于处理FFP状态,但这显然不是FFP状态,但推/弹功能非常适合使用.我应该用什么呢?或者我必须处理它

c opengl shader deprecated opengl-3

11
推荐指数
1
解决办法
4486
查看次数

gevent-socketio没有使用我的@ app.route端点进行socketio

我正在使用Flask和gevent-socketio:

$ cat requirements.txt 
Flask==0.10.1
Jinja2==2.7.1
MarkupSafe==0.18
Werkzeug==0.9.3
argparse==1.2.1
gevent==0.13.8
gevent-socketio==0.3.5-rc2
gevent-websocket==0.3.6
greenlet==0.4.1
itsdangerous==0.23
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)

我正在使用一个非常标准的设置来启动服务器:

#Called from __main__
def run_dev_server():
    app.debug = True
    port = 5000
    dapp = werkzeug.debug.DebuggedApplication(app, evalex = True)
    SocketIOServer(('', port), dapp, resource="socket.io").serve_forever()
Run Code Online (Sandbox Code Playgroud)

我的SocketIO命名空间的一个非常标准的钩子:

@app.route('/socket.io/<path:rest>')
def push_stream(rest):
    print 'ws connect', rest
    try:
        socketio.socketio_manage(request.environ, {'/join_notification': JoinsNamespace}, request)
    except Exception as e:
        app.logger.error("Exception while handling socketio connection", exc_info=True)
    return flask.Response()
Run Code Online (Sandbox Code Playgroud)

但是,我遇到的问题是客户端没有触发'connect'事件.经过一番挖掘,我意识到即使我127.0.0.1 - - [2013-08-19 12:53:57] "GET /socket.io/1/websocket/170191232666 HTTP/1.1" 101 - -在输出中收到消息,我也没有收到ws connect消息(而代码中的其他打印语句工作正常).我注释掉了这个端点,果然它甚至没有被调用.这可以解释为什么我的命名空间没有被使用.但为什么?我注册我的命名空间错了吗?

print app.url_map …

python websocket flask socket.io web

9
推荐指数
1
解决办法
883
查看次数

Python 生成器发送:发送后不产生新值

这是一个奇怪的问题,所以我将解释:

我有一个像这样的生成器,它充当 IRC 服务器的生成器前端:

def irc_iter(): # not the real code, simplified
    msgs = get_msgs()
    for msg in msgs:
        if is_ping(msg):
            pong()
        else:
            to_send = yield msg
            for s in to_send:
                send(s)
Run Code Online (Sandbox Code Playgroud)

从理论上讲,这应该允许我做一些很酷的事情,例如:

server = connect()
for line in server:
       if should_respond(line):
           server.send('WOW SUCH MESSAGE')
Run Code Online (Sandbox Code Playgroud)

但是,有一个问题:也会generator.send 产生下一个值。这意味着这server.send也给了我下一条消息......我更愿意像所有其他消息一样处理它,产生为line.

我知道我可以用一种丑陋的方式来解决这个问题,在接收到发送后只产生一个垃圾值,但我试图保持我的代码优雅,但恰恰相反。有没有办法告诉生成器我还不需要新值?

谢谢。

python yield generator yield-keyword coroutine

8
推荐指数
1
解决办法
1126
查看次数

在eax/ecx寄存器中添加32位浮点数?

我有一对存储在eax和ecx中的32位浮点数.我可以直接将它们加载到FPU中对它们进行操作,而无需先存储到内存中吗?这将显着简化一些编译器代码,但fld似乎只能在内存上运行.

floating-point x86 assembly fpu x87

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