小编Roo*_*kie的帖子

如何有效地调整DirectX窗口的大小?

我查看了这个站点示例:http://www.codesampler.com/dx9src/dx9src_6.htm

但代码相当奇怪:它释放了每个纹理,顶点缓冲区,一切!然后再次构建它们:从磁盘加载模型......我不认为这是非常有效的!OpenGL可以在没有这些限制的情况下进行窗口大小调整.我怎么能像OpenGL一样做:高效的窗口调整大小而不需要释放程序中的每个资源?

我尝试了上面的链接示例中的代码,没有那些invalidateDeviceObjects/restoreDeviceObjects函数调用,但它没有工作..所以我想它必须完成?我希望不会,或者窗口调整大小会对大型应用程序造成痛苦,在这些应用程序中,您可以在纹理,模型等中分配数百兆字节的数据.

c++ windows directx visual-c++

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

c ++ static关键字对大括号有什么作用?

我发现这个代码在某处,perlin噪声发生器,我想:

static {
    for(int i=0; i<512; i++) perm[i]=p[i & 255];
}
Run Code Online (Sandbox Code Playgroud)

静电有什么作用?它在很多其他地方也被垃圾邮件发送了......代码实际上是用静态{}构建的.我丢失了原来的代码,所以这是我唯一的东西,但它就像上面的代码:那里没有变量声明,这就是为什么我没有得到它.

c++ java visual-c++

4
推荐指数
2
解决办法
352
查看次数

为什么const int比const int更快?

有一天我意外地注意到了这一点,现在决定对它进行广泛的测试.

所以,当我调用一个函数时:

#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 intconst int &.(注意:我使用返回值来确保函数不会被优化掉).

为什么会这样?我一直认为添加&实际上会让它更快,但测试反过来说.我知道对于更大的数据类型,它可能会有不同的结果,我没有测试那些,因为我非常肯定结果.

我的测试:

const int: 7.95s …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++

4
推荐指数
2
解决办法
1152
查看次数

强制GLUtesselator仅生成GL_TRIANGLES?

如果我只想使用一个顶点数组格式,那么渲染我生成的数据非常困难.

我试图提供GLU_TESS_EDGE_FLAG_DATA回调,但它使我的程序崩溃.(也试过没有"_DATA",效果相同).

我怎样才能让它只生成GL_TRIANGLES?

c++ opengl tesselation glu

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

CreateThread参数值意外更改

我试图创建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++ winapi multithreading visual-c++

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

如何强制函数参数为同一类型,不允许使用类型构造函数匹配给定的类型?

我有点惊讶在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类型函数,因为它有一个相同类型的构造函数!我不希望这种情况发生,我该怎么做才能防止这种情况发生?

c++ visual-studio-2008 visual-c++

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

为什么union不允许其元素具有用户定义的构造函数?

当第一个结构体有构造函数时,如何使第二个结构体工作?我收到错误:

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()等前缀创建自己的函数,这是不好的.有没有其他办法解决这个问题?

c++ visual-c++ unions c++03

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

如何从向量指针读取元素?

我需要访问一个向量指针元素,我的动画结构有以下代码(这里简化了,不必要的变量被截断):

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)?

c++ vector visual-c++ c++03

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

如何将任意大整数从任意基数转换为不同的基数?

我有一个长度为数十万个字符的 base-n(无符号)整数。

如何将此数字(从文件中读取的字符串)转换为 2-256 之间的任何基数?当然是在合理的时间。

GMP 库仅支持碱基 2-62。

c++ windows numbers gmp

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

为什么push_back()会导致malloc()的ed数据崩溃?

为什么会崩溃?我确实发现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)

c++ malloc stdvector visual-c++

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

使用带有多选标志的GetOpenFileName()时如何获取所选文件的列表?

我试过谷歌搜索,但人们似乎有同样的问题:我们无法获得所选文件的列表.

这是一段简单的工作代码,类似于我使用的代码:

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.我试图打印出该结构中的所有字符串变量,但什么也没找到.它仅显示所选文件的主文件夹.

c++ windows winapi visual-c++

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

在线C++编译器:为我输出二进制文件?

是否有任何网站允许我上传我的源代码,它会返回我可以从Linux运行的二进制文件?

我在使用Linux时非常苛刻,这种服务对我来说将是一种救命.

我知道codepad.org但据我所知,它只输出这些程序的文本.我需要下载它在编译时生成的可执行文件.

c++ linux compiler-construction executable

-2
推荐指数
1
解决办法
3265
查看次数

如何安全地将任何文件读入字符串?

可能重复:
在c ++中将文件粘贴到std :: string的最佳方法是什么?

我正在尝试模仿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的最佳方法是什么?或者您是否希望我创建一个新问题,要求在没有额外字符串副本的情况下读取文件?

c++ string file

-3
推荐指数
1
解决办法
970
查看次数