假设我有一些功能, f
def f (a=None):
print a
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一本字典dct = {"a":"Foo"},我可以调用f(**dct)并Foo打印结果.
但是,假设我有一本字典dct2 = {"a":"Foo", "b":"Bar"}.如果我打电话给f(**dct2)我一个
TypeError: f() got an unexpected keyword argument 'b'
Run Code Online (Sandbox Code Playgroud)
很公平.但是,无论如何,在f调用它的定义或调用它时,告诉python只是忽略任何不是参数名称的键?优选的是允许指定默认值的方法.
我有以下着色器
VertexShader
#version 330
layout (location = 0) in vec3 inPosition;
layout (location = 1) in vec4 inColour;
layout (location = 2) in vec2 inTex;
layout (location = 3) in vec3 inNorm;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
out vec4 ShadowCoord;
void main()
{
gl_Position = projectionMatrix * transformationMatrix * vec4(inPosition, 1.0);
ShadowCoord = gl_Position;
}
Run Code Online (Sandbox Code Playgroud)
FragmentShader
#version 330
in vec4 ShadowCoord;
out vec4 FragColor;
uniform sampler2D heightmapTexture;
void main()
{
FragColor = vec4(vec3(clamp(ShadowCoord.x/500,0.0,1.0),clamp(gl_FragCoord.y/500,0.0,1.0),0.0),1.0);
}
Run Code Online (Sandbox Code Playgroud)
我期望这样做是绘制场景,左上角是绿色,右上角是黄色,右下角是红色,左下角是黑色.事实上,这是当我更换会发生什么ShadowCoord.x与gl_FragCoord.x我的片段着色器.那么,为什么我只得到一个垂直的绿色渐变?显然,我的ShadowCoord正在发生一些棘手的事情.有人知道这是什么吗?
我正在追踪并消除那些效率低下且速度慢的C++/OpenGL/GLUT代码部分,在这样做的过程中,我每秒钟都会看到我的帧数,知道我是否真的在取得进展.我注意到如果我最大化窗口,我的帧速率从大约120降低到60.
进一步的实验表明,这是一个线性的东西,我可以通过改变窗口的大小来改变帧速率.
这是否意味着我在GPU渲染中的瓶颈?当然GPU的这些日子比足够强大更没有注意到一个300x300的1920×1080和区别?还是我从我的显卡上问了太多?
另一种方法是我的代码中存在一些错误导致系统在较大的渲染上变慢.
我要问的是:在改变窗口大小时期望减少帧速率是否合理,或者是否存在非常错误?
我在c#中输入别人的代码库作为以前的c ++编码器.在他的代码中,我发现了如下所示的片段:
MethodInvoker invoker = new MethodInvoker
(delegate()
{
...
}
);
try
{
this.Invoke(invoker);
}
catch (Exception x)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有理由使用a delegate和try-catch?第三到第五行的花括号内的代码不仅可以放在try catch中吗?c#有一些细微差别我还不知道吗?