我查看了这个站点示例:http://www.codesampler.com/dx9src/dx9src_6.htm
但代码相当奇怪:它释放了每个纹理,顶点缓冲区,一切!然后再次构建它们:从磁盘加载模型......我不认为这是非常有效的!OpenGL可以在没有这些限制的情况下进行窗口大小调整.我怎么能像OpenGL一样做:高效的窗口调整大小而不需要释放程序中的每个资源?
我尝试了上面的链接示例中的代码,没有那些invalidateDeviceObjects/restoreDeviceObjects函数调用,但它没有工作..所以我想它必须完成?我希望不会,或者窗口调整大小会对大型应用程序造成痛苦,在这些应用程序中,您可以在纹理,模型等中分配数百兆字节的数据.
我发现这个代码在某处,perlin噪声发生器,我想:
static {
for(int i=0; i<512; i++) perm[i]=p[i & 255];
}
Run Code Online (Sandbox Code Playgroud)
静电有什么作用?它在很多其他地方也被垃圾邮件发送了......代码实际上是用静态{}构建的.我丢失了原来的代码,所以这是我唯一的东西,但它就像上面的代码:那里没有变量声明,这就是为什么我没有得到它.
有一天我意外地注意到了这一点,现在决定对它进行广泛的测试.
所以,当我调用一个函数时:
#define Type int
#define Prm const Type &
Type testfunc1(Prm v1, Prm v2, Prm v3, Prm v4, Prm v5, Prm v6, Prm v7, Prm v8, Prm v9, Prm v10){
return (v1|v2|v3|v4|v5|v6|v7|v8|v9|v10);
}
Run Code Online (Sandbox Code Playgroud)
1亿次:
for(Type y = 0; y < 10000; y++){
for(Type x = 0; x < 10000; x++){
out |= testfunc1(x,y,x,x,y,y,x,y,x,y);
}
}
Run Code Online (Sandbox Code Playgroud)
对于类型int,const int而且const int &,我注意到它const int比const int &.(注意:我使用返回值来确保函数不会被优化掉).
为什么会这样?我一直认为添加&实际上会让它更快,但测试反过来说.我知道对于更大的数据类型,它可能会有不同的结果,我没有测试那些,因为我非常肯定结果.
我的测试:
const int: 7.95s …Run Code Online (Sandbox Code Playgroud) 如果我只想使用一个顶点数组格式,那么渲染我生成的数据非常困难.
我试图提供GLU_TESS_EDGE_FLAG_DATA回调,但它使我的程序崩溃.(也试过没有"_DATA",效果相同).
我怎样才能让它只生成GL_TRIANGLES?
我试图创建4个线程,在我的4个CPU核心同时运行一个功能.我调用的函数将根据val变量值改变一些循环偏移.
我尝试了这个,但它没有val正确地增加计数器,一些线程报告相同的值,它似乎随机改变:
int val = 1;
threads[0] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[1] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[2] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[3] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
Run Code Online (Sandbox Code Playgroud)
但这似乎工作得很好:
int val1 = 1;
int val2 = 2;
int val3 = 3;
int val4 = 4;
threads[0] = CreateThread(0, 0, my_thread_1, &val1, 0, 0);
threads[1] = CreateThread(0, 0, my_thread_1, &val2, 0, 0);
threads[2] = …Run Code Online (Sandbox Code Playgroud) 我有点惊讶在C++中发现这个功能,我没想到会发生这种情况.
这是代码:
struct XY {
int x,y;
XY(int v) : x(v), y(v) {}
};
bool test1(const XY &pos){
return pos.x < pos.y;
}
bool test1(int x, int y){
return x < y;
}
void functest(){
int val = 5;
test1(val);
}
Run Code Online (Sandbox Code Playgroud)
所以我可以调用一个带整数参数的函数,无论是否存在这样的重载,它都会使用XY类型函数,因为它有一个相同类型的构造函数!我不希望这种情况发生,我该怎么做才能防止这种情况发生?
当第一个结构体有构造函数时,如何使第二个结构体工作?我收到错误:
error C2620: member 'test::teststruct::pos' of union 'test::teststruct::<unnamed-tag>' has user-defined constructor or non-trivial default constructor
Run Code Online (Sandbox Code Playgroud)
代码:
struct xyz {
Uint8 x, y, z, w;
xyz(Uint8 x, Uint8 y, Uint8 z) : x(x), y(y), z(z) {}
};
struct teststruct {
union {
Uint32 value;
xyz pos; // error at this line.
};
};
Run Code Online (Sandbox Code Playgroud)
我可以使用一个函数来初始化xyz结构,但它不会慢得多吗?更不用说:我有大量的结构我需要用init_xyz()等前缀创建自己的函数,这是不好的.有没有其他办法解决这个问题?
我需要访问一个向量指针元素,我的动画结构有以下代码(这里简化了,不必要的变量被截断):
struct framestruct {
int w,h;
};
struct animstruct {
vector<framestruct> *frames;
};
vector<framestruct> some_animation; // this will be initialized with some frames data elsewhere.
animstruct test; // in this struct we save the pointer to those frames.
void init_anim(){
test.frames = (vector<framestruct> *)&some_animation; // take pointer.
}
void test_anim(){
test.frames[0].w; // error C2039: 'w' : is not a member of 'std::vector<_Ty>'
}
Run Code Online (Sandbox Code Playgroud)
阵列工作,我通过测试它:
test.frames->size()它是我计划的7.
那么如何从向量中的第N个索引处访问向量元素(w和h)?
我有一个长度为数十万个字符的 base-n(无符号)整数。
如何将此数字(从文件中读取的字符串)转换为 2-256 之间的任何基数?当然是在合理的时间。
GMP 库仅支持碱基 2-62。
为什么会崩溃?我确实发现malloc()没有调用构造函数,所以我手动调用它们,但它仍然崩溃,我不明白为什么.
PS.我知道std :: vector和new []存在.不要告诉我使用vectors/new []作为答案.
struct MyStruct {
vector<int> list;
};
void make_crash(){
MyStruct *array = (MyStruct *)malloc(100*sizeof(MyStruct));
MyStruct element; // initialize element here since malloc() doesnt do it.
array[0] = element; // copy, everything should be alright?
array[0].list.push_back(1337); // nope, BANG!
// The above line makes these:
// First-chance exception at 0x7c970441 in test.exe: 0xC0000005: Access violation reading location 0xbaadf005.
// First-chance exception at 0x00401cd0 in test.exe: 0xC0000005: Access violation reading location 0xbaadf00d.
// Unhandled exception at 0x00401cd0 …Run Code Online (Sandbox Code Playgroud) 我试过谷歌搜索,但人们似乎有同样的问题:我们无法获得所选文件的列表.
这是一段简单的工作代码,类似于我使用的代码:
OPENFILENAME ofn = { sizeof ofn };
wchar_t file[1024];
file[0] = '\0';
ofn.lpstrFile = file;
ofn.nMaxFile = 1024;
ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
GetOpenFileName(&ofn);
Run Code Online (Sandbox Code Playgroud)
我如何实际获取我选择的文件名?目前我只能在没有OFN_ALLOWMULTISELECT标志的情况下使用它,因此它会返回一个选定的文件名ofn.lpstrFile.我试图打印出该结构中的所有字符串变量,但什么也没找到.它仅显示所选文件的主文件夹.
是否有任何网站允许我上传我的源代码,它会返回我可以从Linux运行的二进制文件?
我在使用Linux时非常苛刻,这种服务对我来说将是一种救命.
我知道codepad.org但据我所知,它只输出这些程序的文本.我需要下载它在编译时生成的可执行文件.
我正在尝试模仿PHP的C++文件_get_contents()函数.
但是,当我将char数组转换为字符串时,它将停止在nullbyte:
fread(charbuf, 1, file_size, fp);
string str(charbuf);
Run Code Online (Sandbox Code Playgroud)
如何将字符串初始化为静态大小数组,并将文件内容直接读取到该容器?另外,如何检查错误,例如,如果没有足够的内存来初始化该字符串.这也可以让我摆脱我目前正在使用的临时内存分配,我想摆脱它.
安全怎么样?是否有可能许多进程同时读取同一个文件和/或其中一个在我阅读时同时写入其中?我该如何避免这种情况发生?
我希望你能回答"字符串不是二进制容器"的其他方式.
我要求重新打开这个问题: "显然,这个问题与以往一样重要:两年后,两个最有效的解决方案仍然将整个文件内容复制到内存中,优化器无法忽略此副本.是一个非常不令人满意的事态. - Konrad Rudolph 2010年10月25日6:25" 在C++中将整个文件读入std :: string的最佳方法是什么?或者您是否希望我创建一个新问题,要求在没有额外字符串副本的情况下读取文件?