我想知道glUniformXXv是否会阻塞,直到指针指向的数据被复制到GPU.换句话说,如果GPU忙,此代码是否会导致问题?
int i=5;
glUniform1iv(location,1,&i);
i = 6;
Run Code Online (Sandbox Code Playgroud)
如果GPU忙,这会导致glUniform1fv发送6吗?
有没有办法检查两个实例是否是相同的派生类?就像是:
Base *inst1 = new A();
Base *inst2 = new B();
Base *inst3 = new A();
bool b1 = (inst1->class== inst2->class); //<-- should evaluate to false
bool b1 = (inst2->class== inst3->class); //<-- should evaluate to true
Run Code Online (Sandbox Code Playgroud)
显然,我可以向基类添加一个虚函数,并实现每个派生类以返回唯一值.但是,我宁愿不必为派生类实现任何特定的东西,因为我正在基于派生这个基类来创建API.
对于每个属性,使用跨步顶点缓冲区与紧密打包缓冲区有什么优缺点?我的意思是例如:
步幅: xyzrgb xyzrgb xyzrgb
紧: xyzxyzxyz rgbrgbrgb
乍一看,您看起来很容易在使用跨步时更改大小,但是当您使用进行重新分配时,顶点缓冲区的内容将被删除glBufferData()。
对我来说,最好使用紧密模型,因为位置,颜色和texcoords可能来自本地内存中的不同数组,并且因为没有跨步缓冲区数据函数;您必须在上传之前将所有数组复制到交错缓冲区中,或者glBufferSubData()每个属性每个顶点使用一个(我猜这是一个糟糕的主意)。
似乎通常使用交错缓冲区(步幅)。这是为什么?我在这里想念什么吗?
glCheckFramebufferStatus返回0,之后没有从glGetError返回错误.假设这是一个驱动程序错误是否安全?我似乎无法在OpenGL的文档中找到有关如何处理这种情况的任何内容.
我正在使用nvidia专有驱动程序在Linux(Ubuntu 14.04)上使用SDL2编写游戏.
说我有一个功能:
def test(ab):
print ab.a
print ab.b
Run Code Online (Sandbox Code Playgroud)
如何在不定义类的情况下轻松地将参数传递给此函数?我正在寻找以下内容:
test({4,5})
Run Code Online (Sandbox Code Playgroud)
要么
test(ab.a = 5, ab.b = 6)
Run Code Online (Sandbox Code Playgroud)
这是可能吗?更改功能'test'不是一个选项.
opengl ×3
c++ ×2
abstract ×1
attributes ×1
class ×1
framebuffer ×1
function ×1
linux ×1
pointers ×1
polymorphism ×1
python ×1
sdl ×1
vertexdata ×1
virtual ×1